Newznab … un bon exercice de service : Installation

La suite du billet : Newznab … un bon exercice de service : Préparation du LAMP

Il s’agit maintenant d’installer proprement dit … NEWZNAB.

Le set de script est gratuit mais le service est payant (10$ une seule fois) pour que le serveur indexe.
(Il y a NZEDB qui lui est gratuit est pas mal du tout non plus).

On commence par ca:

mkdir -p /var/www/newznab chmod 777 /var/www/newznab
mkdir -p /var/www/newznab
chmod 777 /var/www/newznab

On installe les dépendances (dont certaines sont déjà dans le Turnkey … s’pas grave, on est certain de tout avoir du coup):

apt-get install -y php5 php5-dev php-pear php5-gd php5-mysql php5-curl
apt-get install -y lame
apt-get install -y unrar-free
apt-get install -y ffmpeg
apt-get install -y python-software-properties
apt-get install -y mediainfo
apt-get install -y subversion

 

Dans /etc/php5/apache2/php.ini  et /etc/php5/cli/php.ini

il faut changer ou ajouter ces éléments

register_globals = Off
max_execution_time = 120
memory_limit = 512MB
ou  memory_limit =  -1
date.timezone = Europe/Paris

On fait la petite manip suivante:

a2dissite default
a2ensite newznab
a2enmod rewrite

Petit redemarrage d’Apache:

/etc/init.d/apache2 restart
et on regarde dans son navigateur si le site mondomaine.com/phpinfo.php n’a pas eu de vapeur ….
MySQL est bon il fonctionne
Apache écoute en 8080
Nginx en 80 et va dans le répertoire var/www/newnzab
Jusqu’ici tout va bien !

On installe svn (subversion pour les intimes)

apt-get install subversion
Puis:
svn co svn://svn.newznab.com/nn/branches/nnplus /var/www/newznab

(les codes sont login:SVNPLUS et Password:SVNPLU5)

Après, c’est le drame 😉

chmod 777 /var/www/newznab/www/lib/smarty/templates_c
chmod 777 /var/www/newznab/www/covers/anime
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/movies
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/music
chmod 777 /var/www/newznab/www
chmod 777 /var/www/newznab/www/install
chmod 777 /var/www/newznab/nzbfiles/
chmod 777 /var/www/newznab/nzbfiles/
L’installation de NEWZNAB est terminé il faut passer au paramétrage qui ne necessite plus de tuto 🙂
http://localhost/newznab/www/install

Il reste une dernière difficulté. Faire démarrer les scripts avec le Turnkey:

Dans /etc/init.d , il faut faire un joli fichier newznabstart qui contient ça:

 ### BEGIN INIT INFO
# Provides:          newznab
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: newznab plus update scripts.
# Description:       This script runs the scripts that periodically
#                    update the newznab indices.
### END INIT INFO
sleep 60
[ -c /dev/urandom ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh

. /lib/lsb/init-functions

case "$1" in
  start)
        sudo -u nzb /usr/bin/screen -d -m -S newznab sh /var/www/newznab/misc/update_scripts/cron_scripts/newznab_screen_local.sh
    ;;
  stop)
        sudo -u nzb /usr/bin/screen -X -S newznab quit
    ;;
  status)
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  *)
    echo "Usage: nnplus [start|stop]" >&2
    exit 3
    ;;
esac

 

Et zou c’est parti !

Newznab … un bon exercice de service : Préparation du LAMP

OHhh la on s’attaque à du dur …

Petit récapitulatif sur les newsgroups : Usenet est un système en réseau de forums, inventé en 1979. En gros, ça date d’avant les inter-tubes. 😉

Normalement, ça sert donc à faire un forum. Mais Usenet semble connaitre un regain d’intérêt : avec l’HADOPI2, les systèmes d’échanges P2P étant surveillés, de nouvelles méthodes de téléchargement sont recherchées, et le réseau Usenet (principalement binaire) est de plus en plus fréquenté pour sa haute vitesse de téléchargement, la richesse des contenus et le respect de la neutralité du réseau4. (Wikipedia).

Donc il faut un fournisseur de newsgroup. Vous pouvez oublier votre FAI. « Hadopi c’est fini, c’était la ville de notre dernieeeeer amour ».
Par exemple, Giganews. Il est cher certes mais il offre plusieurs années de rétention, des VPN qui sortent sur la terre entière (qui a dit Netflix ? qu’il se dénonce !) et puis de la vitesse surtout avec un serveur Européen.

Après il faut trouver des fichiers à télécharger. C’est là que Newznab entre en jeu. C’est un peu le google des newsgroup. Un moteur de recherche qui va regarder des groups et en tirer les « releases ».

C’est bien expliqué ici chez Korben.

 

On commence avec Turnkey LAMP que l’on bidouille comme vu sur ce billet : Les Turnkeys de mon Labo

 

On va juste ajouter PHP en fast CGI sur Apache :

apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm php-apc

Il faut valider MPM worker pour Apache.

a2enmod actions alias fastcgi rewrite

On edite /etc/apache2/conf.d/php5-fpm

# Configure all that stuff needed for using PHP-FPM as FastCGI
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
# application/x-httpd-php-source                 phps
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Define Action and Alias needed for FastCGI external server.
Action application/x-httpd-php /fcgi-bin/php5-fpm virtual
Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm
<Location /fcgi-bin/php5-fpm>
  # here we prevent direct access to this Location url,
  # env=REDIRECT_STATUS will let us use this fcgi-bin url
  # only after an internal redirect (by Action upper)
  Order Deny,Allow
  Deny from All
  Allow from env=REDIRECT_STATUS
</Location>
FastCgiExternalServer /fcgi-bin-php5-fpm -socket /var/run/php5-fpm.sock -idle-timeout 250 -pass-header Authorization

 

On édite /etc/php5/fpm/php-fpm.conf


emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

 

On édite /etc/php5/fpm/pool.d/www.con

 

pm = dynamic
pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 500

 

Et on relance PHP-FPM :

/etc/init.d/php5-fpm reload

 

Petite bidouille d’Apache dans  /etc/apache2/conf.d/security :

 

ServerTokens Prod
ServerSignature Off
TraceEnable Off

 

Un petit reload d’Apache:

/etc/init.d/apache2 reload


Et perso je reboot:

Sudo reboot

 

Théoriquement au reboot si vous avez un phpinfo.php dans var/www, vous devez voir fast-cgi comme handler.

On est bon donc : Apache en port 8080, NGINX en port 80 et du fast-cgi avec APC.
Sauf que Nginx a besoin d’etre un peu modifier pour supporter Newznab.

Dans /etc/nginx/sites-available on va créer un fichier newznab :

 server {
    listen 80;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/newznab/www/;
    index index.html index.htm index.php;
    server_name mondomaine.com;
         location ~* \.(?:ico|css|js|gif|inc|txt|gz|xml|png|jpe?g) {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";    }
         location /admin { }
        location /install { }
         location ~ \.php$ {   
         proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
         }
         location / { try_files $uri $uri/ @rewrites; }
        location @rewrites {
            rewrite ^/([^/\.]+)/([^/]+)/([^/]+)/? /index.php?page=$1&id=$2&subpage=$3 last;
            rewrite ^/([^/\.]+)/([^/]+)/?$ /index.php?page=$1&id=$2 last;
            rewrite ^/([^/\.]+)/?$ /index.php?page=$1 last;
    }
          location ~ /\.ht {
                deny all;
        }
}

 

Et aussi une petite modif dans /etc/nginx/nginx.conf

user www-data;
worker_processes  1;
 error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 events {
    worker_connections  1024;
}
 http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
     access_log  /var/log/nginx/access.log  main;
     sendfile        on;
    #tcp_nopush     on;
     keepalive_timeout  65;
     #gzip  on;
     include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

 

 

(A SUIVRE)

Les Turnkeys de mon Labo …

Alors un turnkey, c’est assez simple. C’est soit une image ISO (un CD mais sous forme de fichier à telecharger) soit carrement une machine virtuelle. Dans les deux cas, tout est pré-installé pour par exemple (c’est ce que j’utilise le plus un serveur Linux Apache MySQL PHP ou LAMP).

Au final, je ne configure plus de serveur LAMP je déploie des ISO.
Evidemment, cela va plus vite mais …. Pas toujours (par exemple si vous voulez ajouter des éléments NGINX pour ne pas le nommer, la version est un peu vieille).

Dans mon labcav, j’ai plusieurs LAMP : un lamp multi-site, un observium et un newznab.

Le LAMP multisite : il contient Fever (un agrégateur RSS qui peut classer les informations par importance. Une information qui se répète est une information plutôt importante. Il  contient aussi TTRSS qui fait la meme chose mais en plus classique façon Feedly. Il y a aussi pocket qui est un read-it-later like (je stocke une information généralement de flux RSS pour la lire plus tard).

LAMP Observium : j’avoue ce dernier est tout fait. Il sert a fabriquer une carte d’administration de machine qui renvoi les informations SNMP. En gros, c’est un indicateur de supervision de mon LabCave.

LAMP Newznab : Vaste sujet, je ferais un billet rien que sur ce Turnkey.

 

Tout ça est bien beau MAIS sorti du LAMP, il y a deux chose dont j’ai besoin : APC cache et NGINX.
Tous les LAMP déployés viennent avec Xcache qui est mieux que rien … c’est sûr.
Personnellement, je préfère APC cache qui est plus efficace et surtout qui a un joli panneau de supervision.

Il faut donc installer tout ça sur chacun des LAMP. Pour se faire, j’aime utiliser PuTTY et WinSCP le tout sous un windows par exemple en RDP 😉

Apt-get update && apt-get install php-apc

ET CA NE FONCTIONNE PAS. Forcément, le système cherche Xcache qui a été effacé par l’installation d’APC.
Il suffit d’aller ici :
/etc/php5/conf.d

Et de supprimer le 20-xcache.ini

Et petit redemarrage d’Apache …
sudo service apache2 restart

(si sudo n’est pas présent … ce qui est le cas dans un Turnkey : apt-get install sudo)

Voilà, APC fonctionne et il suffit de mettre le apc.php dans var/www pour avoir le panneau de supervision APC.

NGINX c’est un peu plus compliqué (surtout sur Newznab mais on verra ca ultérieurement). Alors en gros, NGINX c’est un serveur web comme Apache sauf qu’il va super mais alors super vite (ce que doit faire Apache 2.4 aussi d’ailleurs).

D’abord, il faut qu’Apache cesse d’écouter sur le port 80 (bah oui c’est NGINX qui va ecouter les demandes à sa place).

On édite :
/etc/apache2/ports.conf

On change le :
Listen 80 En Listen 8080

Après, petite installation de NGINX (s’pas difficile et c’est lui qui va piquer le port 80) :

sudo apt-get install nginx

Normalement dans /etc/nginx/ , il y a sites-available et sites-enabled. Si ce n’est pas le cas, il faut juste les créer.

Dans sites-available, je créer un fichier LAMP (super original).

Qui contient ça :

server {
listen   80;
root /var/www/;
index index.php index.html index.htm;
server_name mydomain.com;

         location / {
try_files $uri $uri/ /index.php;
}

         location ~ \.php$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}

          location ~ /\.ht {
deny all;
}
}

Après un petit coup de :
sudo ln -s /etc/nginx/sites-available/LAMP /etc/nginx/sites-enabled/LAMP

En gros, j’active avec cette commande le fichier de config qui ecoute en 80 et qui sert du PHP qu’il va chercher en boucle locale sur le port 8080 … le port HTTP d’Apache. Et la boucle est bouclée.

On supprime le site par défaut de NGINX :
sudo rm /etc/nginx/sites-enabled/default

On redémarre tout ca :
sudo service apache2 restart && sudo service nginx restart

Et si ça ne fonctionne pas on redémarre tout le serveur.

Voila, vous avez un serveur qui sert du PHP sur Apache avec le cache APC et accéléré par NGINX. C’est-à-dire le pas loin du fin du fin en matière de serveur WEB PHP.

Je n’ai pas ajouté PHP Fast-CGI (qui accélère de beaucoup le traitement PHP) parce que Fever ne le supporte pas et qu’Observium n’en a pas besoin. Mais ce sera dans le billet sur NewzNAB.

Pourquoi segmenter ses services avec plusieurs machines ?

Un cloud perso performant ma bonne dame 🙂

Bon avec toutes ces machines virtuelles, il faut bien ajouter du service.

Le grand principe de tous ces montages est bien de compartimenter les services. Imaginez, vous installer tous vos services sur une même machine !

D’abord, il va y avoir des problèmes de partage des ports 80 (http) et 443 (https). C’est déjà le cas avec plusieurs machines dans un LAN qui ont chacune leur port 80 (mais avec un bon reverse proxy genre Squid, ça devient tellement plus simple et plus sécurisé surtout en plugin dans pFsense).
Ensuite, si une machine s’effondre (perte de connectivité, support de masse qui flanche, écran bleu irréversible ou manipulation hasardeuse qui bousille tout), si elle est monolithique, tous les services disparaissent.

En gros, dans mon « labcave », j’ai maintenant deux ESXI physiques (le deuxième est une récup d’une vieille machine qui fonctionne encore en DDR2 – ca va être cher à upgrader enfin bref).

Le premier ESXI contient les deux firewalls en Haute disponibilité (si l’un flanche l’autre prend la  main en toute transparence). Le firewall s’occupe du routage aussi et surtout il contient la pièce essentielle qu’est SQUID (j’en reparle un peu plus tard).

Sous le firewall (ok il n’y a pas de dessus ou de dessous mais je considère le Firewall en haut de la hiérarchie des machines virtuelles puisqu’il donne toute la connectivité), j’ai deux Windows Server 2012 R2 (migré il y a peu) Active Directory Fail Over. On retrouve l’AD, le DNS (et DNSSEC en plus), le DHCP en HA (distribue des IP en haute dispo), partage de fichier. Sur le deuxième AD, il y a des petits services de rien du tout comme Subsonic et Airvidéo.

Sur un autre serveur lui aussi en Windows Server 2012 R2, j’ai un WSUS : Windows Server Update Service. En gros, je download les updates de Windows Update sur ce serveur uniquement et les autres machines téléchargent sur ce serveur sans passer par intertube (ca gagne un peu de bande passante).  J’ai séparé ce serveur parce que sa base de données a une petite tendance à se corrompre facilement. Du coup, il est plus facile de le restaurer lui seul sans en passer par la restauration d’un AD.

Sur un autre serveur, un petite Exchange 2013 SP1 pour la messagerie et les tests. La aussi, il fut un temps où je ne virtualisais pas et Exchange se trouvait sur l’AD. En gros, c’est mal !
Là aussi, en terme de récupération sur incident, il n’y a que le messagerie qui tombe et encore ce n’est pas tout a fait vrai puisque via une petite manipulation du DNS de mon nom de domaine chez OVH … mes mails filent sur un Google App Mail si jamais mon serveur ne pouvait plus répondre (c’est assez pratique et c’est une forme de HA du pauvre lol).

Sur un autre serveur (encore un), se trouve VEEAM Lab licence, qui sauvegarde toutes les autres machines. Ce soft est juste une merveille. Pas de client a installer sur les machines, juste une liaison DNS (merci au Synology qui joue le roule d’esclave DNS des AD lorsque l’ESXI tombe. Comme ca, il y a toujours un DNS qui répond. Et bientôt, avec une redbox physique, un pFsense « physique » fera la même chose. C’est un peu ceinture, bretelle et parachute mais c’est amusant aussi de faire une archi de ce type) et une « attaque » IP des hyperviseurs ESXI. Ca backup et ca restaure avec une facilité inconnue avant d’avoir utilisé VEEEM. Ce produit c’est un bon 19/20 !

Sur un autre serveur, j’ai enfin la passerelle RDP. Ah ah mais qu’est-ce à dire ?
Il s’agit d’un serveur Windows 2012 R2 qui va jouer le role de passerelle Remote Desktop et Remote APP.
D’abord c’est une Gateway. En gros, pFsense va donner à cette machine (et je donnerais plus tard les settings de pFsense pour ça) les demandes RDP via Squid (bien sécurisées soit dit en passant en comptant le firewall, le reverse proxy et la gateway).
Ce serveur va me permettre via un navigateur web d’accéder à mes machines sous Windows (un peu comme un teamviewer) mais surtout de « caster » mes applis. Le scénario est simple. Je suis sur une machine banalisée (par exemple l’ordinateur d’un amis chez lui). Je vais sur une URL secrète. Je me log avec mes identifiant Active Directory de session Windows et j’ai accès un un Firefox paramétré à ma sauce, une suite Office 2013, un vsphere client Win32, enfin bref plein de choses très utiles.
Je l’utilise un peu tous les jours pour accéder à mes fichiers (bientôt j’aurais un work folder et j’ai toujours mon VPN IPSEC propre) et surtout à un navigateur qui tourne dans mon LAN (oui forcement c’est du remote). L’intérêt de ce navigateur me direz-vous ? Accéder aux services qui ne sont pas sur Squid parce que trop sensibles !

Enfin (oui c’est la derniere machine Windows après je vous parlerais des turnkeys), j’ai fait un petit NAS virtuel avec un serveur Windows 2012 R2. J’ai passé directement à la machine de vieux disque pour faire un Pool Storage avec compression (bon ca tout le monde connait) et déduplication (en gros, lorsque le système détecte des bouts de fichier identiques, il ne stocke ces bouts qu’une fois et fait pointer les autres fichiers sur ce bout. On gagne de la place).
Ce NAS virtuel vient en plus du Synology que je conserve parce que c’est une machine isolé d’ESXI et surtout un hardware différent des ESXI.