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.