Accueil

Installer SABnzbd derrière Nginx

Hébergement04 Dec 2012

SABnzbd, comme son nom ne l'indique pas vraiment, est un lecteur de news binaires. Il permet de récupérer des fichiers depuis Usenet. C'est une application serveur, qu'on héberge derrière un serveur Web, et qui offre une interface de gestion depuis un navigateur. Il faut bien sûr l'associer à un compte chez un fournisseur Usenet. Je ne détaille pas plus l'utilisation de l'outil, le site officiel est suffisamment documenté, mais plutôt son installation dans le cadre de l'auto-hébergement avec le serveur Web Nginx en frontal et non pas le traditionnel Apache.

Depuis la page de téléchargement on peut télécharger les sources Python. Les manipulations suivantes sont réalisées sur une Debian 6 avec Python, Nginx et OpenSSH installés.

# on installe sous /srv
cd /srv
wget http://sourceforge.net/projects/sabnzbdplus/files/sabnzbdplus/0.7.6/
        SABnzbd-0.7.6-src.tar.gz/download -O SABnzbd-0.7.6-src.tar.gz
tar xvf SABnzbd-0.7.6-src.tar.gz &&  rm -f SABnzbd-0.7.6-src.tar.gz
# on crée un lien symbolique /srv/sabnzbd pour gérer aisément les futures mises à jour
ln -s SABnzbd-0.7.6 sabnzbd

L'étape suivante consiste à démarrer SABnzbd pour définir sa configuration générale et aussi restreindre l'adresse d'écoute à l'interface localhost (127.0.0.1) pour forcer le passage par Nginx et son authentification que nous allons mettre en place par la suite. On peut automatiser le démarrage en rajoutant un script sabnzbd sous /etc/init.d tel que celui-ci :

### BEGIN INIT INFO
# Provides:          sabnzd
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop Sabnzbd
# Description:       Start/stop Sabnzbd
### END INIT INFO

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

. /lib/lsb/init-functions

if [ "$#" -ne 1 ]; then
  log_failure_msg "Usage: /etc/init.d/sabnzd" \
      "{start|stop}"
  exit 2
fi

case "$1" in
  start)
        python /srv/sabnzbd/SABnzbd.py -d -f /root/.sabnzbd/sabnzbd.ini
  exit $?
  ;;
  stop)
    /usr/bin/wget -q --delete-after "http://localhost:7777/sabnzbd/api?mode=shutdown
                                        &apikey;=24be83f61210daad59aa0e90223ccd4f"
  exit $?
  ;;
  *)
        log_failure_msg "Usage: /etc/init.d/sabnzbd" \
                        "{start|stop}"
        exit 2
        ;;
esac

log_failure_msg "Unexpected failure, please file a bug."
exit 1

On active ce script sous Debian avec update-rc.d sabnzbd defaults. Finalement on configure Nginx comme proxy. Je me suis borné à un accès HTTP protégé par une authentification utilisateur / mot de passe mais HTTPS est recommandé.

server {
    listen 80;
    server_name www.yourserver.yourdomain;
    root /var/www/www;
    access_log /var/log/nginx/www.access.log;
    error_log /var/log/nginx/www.error.log;

    location /sabnzbd {
        auth_basic "Restricted area";
        auth_basic_user_file /var/www/htpasswd;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:7777/sabnzbd;
    }
}

Pour la création du fichier d'authentification htpasswd je vous renvoie à la [FAQ de Nginx](http://wiki.nginx.org/Faq#How_do_I_generate_an_htpasswd_file_w ithout_having_Apache_tools_installed.3F) car plusieurs méthodes sont possibles. Gare à sécuriser son accès et à le placer hors des répertoires servis par Nginx. A ce stade SABnzbd fonctionne à moitié :-) En effet SABnzbd ne va pas servir toutes les ressources (HTML / CSS) et il faut les lier statiquement à Nginx.

# on lie les ressources statiques du thème Plush
mkdir -p /var/www/www/sabnzbd
ln -s /srv/sabnzbd/interfaces/Plush/templates/static /var/www/www/sabnzbd/static
ln -s /srv/sabnzbd/interfaces/Config/templates/staticcfg /var/www/www/sabnzbd/staticcfg
Votre commentaire