• Archive
  • [Tuto] Installer ruTorrent sur Debian 9 {nginx & php-fpm}

Veuillez rapporter les bugs dans ce topic merci.

TODOLIST :

CHANGELOG :

  • Adaptation pour ruTorrent 3.9 le 11/04/2019
  • PHP 7.3 le 12/02/19
  • rTorrent 0.9.7 & libTorrent 0.13.7 le 18/07/18

image rutorrent

Introduction


Fonctionne pour Debian 9.x version 64bits.

Afin de vous assurez que vous êtes sous Debian 9, voici les étapes à suivre:

  • Tout d'abord, assurez-vous de la présence du fichier debian_version dans /etc/debian_version, s'il n'y est pas, vous n'êtes pas sous Debian.
  • Si vous avez ce fichier, faites cat /etc/debian_version. Si vous voyez affichez quelque chose comme 9.x ou plus, vous êtes éligibles à ce tutoriel.

Ce tuto est basé sur le serveur web nginx, plus léger que son confrère apache2. Il vous expliquera également comment bien protéger son interface ruTorrent avec une authentification. Étant optimisé pour les novices, il vous suffira de copier/coller les commandes. Il est cependant recommander de prêter suffisamment d'attention, voire de se renseigner sur le fondement de ces commandes, pour vous permettre de gagner en autonomie en cas de problème futur ou pour le cas où vous souhaiteriez intervenir vous-même ultérieurement sur votre serveur.

Un générateur de mot de passe en ligne : Générateur

N’essayez pas d’accéder à ruTorrent avant d’arriver à la conclusion, ça ne marchera pas si tout n’est pas correctement fait.

Partie I : Premier contact avec SSH


Pour se connecter à un serveur dédié distant, le protocole SSH est le plus souvent utilisé. Les logiciels compatibles sont nombreux, mais le plus utilisé reste PuTTy avec sa variante portable : KiTTy.

Télécharger KITTY

2 choses importantes à savoir avec les terminaux SSH :

  1. Les mots de passe n’apparaissent pas à l’écran quand on les tape (pas de * non plus)
  2. Pas de CTRL+C/CTRL+V pour copier/coller, pour copier : on fait une sélection et cette dernière est automatiquement copier; pour coller : bouton droit. Simple comme bonjour non ?

Maintenant, connectons-nous:

  • Host Name (or IP adress) : Adresse IP du serveur
  • Port : On laisse à 22 et Connexion type SSH (Port 22 : port par défaut pour le protocole SSH)

Pour ne pas avoir à retaper ces informations, on peut enregistrer notre session. Pour cela, on clique sur ‘Saved Sessions’, puis on tape le nom de la session (ex: "Ma Seedbox") et on clique sur Save.
Bien mettre le format de caractère en UTF-8 pour ne pas avoir des soucis de copier/coller

img

Il ne nous reste plus qu’à cliquer sur Open pour ouvrir la session.

login as: root
root@XX.XX.XX.XX’s password: (…)

Et voilà, vous êtes loggés dans votre serveur via SSH.

Sous mac et linux

Ouvrir un terminal puis lancer cette commande :

ssh root@XX.XX.XX.XX -p 22

Partie II : Installation des essentielles


On ajoute les dépôts :

apt-get install -y apt-transport-https
echo "#Depot sury-php
deb https://packages.sury.org/php/ stretch main" >> /etc/apt/sources.list.d/sury-php.list

echo "#Depot paquets proprietaires
deb http://ftp2.fr.debian.org/debian/ stretch main non-free
deb-src http://ftp2.fr.debian.org/debian/ stretch main non-free" >> /etc/apt/sources.list.d/non-free.list

echo "#Depot multimedia
deb http://www.deb-multimedia.org stretch main non-free" >> /etc/apt/sources.list.d/multimedia.list

echo "#Depot nginx
deb http://nginx.org/packages/debian/ stretch nginx
deb-src http://nginx.org/packages/debian/ stretch nginx" >> /etc/apt/sources.list.d/nginx.list

echo "#Depot mediainfo
deb http://mediaarea.net/repo/deb/debian/ stretch main" >> /etc/apt/sources.list.d/mediainfo.list

Ajout de la clé du deb-multimedia, nginx et mediainfo (l'erreur affiché pendant l'update est normal, pas de panique)

cd /tmp
wget https://packages.sury.org/php/apt.gpg -O sury.gpg && apt-key add sury.gpg
wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
wget http://mediaarea.net/repo/deb/debian/pubkey.gpg -O mediainfo.gpg && apt-key add mediainfo.gpg
apt-get update
apt-get install -y --allow-unauthenticated deb-multimedia-keyring

Puis on remet à jour le système :

apt-get update

Installation des paquets nécessaires

apt-get install -y \
  htop \
  automake \
  libcppunit-dev \
  libtool \
  build-essential \
  pkg-config \
  libssl-dev \
  libcurl4-openssl-dev \
  libsigc++-2.0-dev \
  libncurses5-dev \
  nginx \
  vim \
  screen \
  subversion \
  apache2-utils \
  curl \
  php7.3 \
  php7.3-cli \
  php7.3-fpm \
  php7.3-cli \
  php7.3-curl \
  php7.3-geoip \
  php7.3-xml \
  php7.3-mbstring \
  php-geoip \
  php7.3-readline \
  php7.3-opcache \
  php7.3-json \
  php7.3-common \
  php-geoip \
  git \
  unzip \
  unrar \
  rar \
  zip \
  ffmpeg \
  mktorrent \
  mediainfo \
  zlib1g-dev \
  sox \
  libsox-fmt-mp3 \
  libsox-fmt-all \
  gawk \
  psmisc \
  python-pip

Installation de xmlrpc via le dépôt svn (note : xmlrpc sera utilisé afin de commander rTorrent via sa WebUI, ruTorrent)

cd /tmp
git clone https://github.com/mirror/xmlrpc-c.git
cd xmlrpc-c/stable/
./configure
make
make install

Installation de libtorrent 0.13.7

Avant d’installer libtorrent/rtorrent, vérifiez le numéro de la dernière version stable ici.

cd /tmp
git clone https://github.com/rakshasa/libtorrent.git
cd libtorrent
git checkout v0.13.7
git cherry-pick 7b29b6b
./autogen.sh
./configure --disable-debug
make
make install

Installation de rTorrent 0.9.7

cd /tmp
git clone https://github.com/rakshasa/rtorrent.git
cd rtorrent
git checkout v0.9.7
./autogen.sh
./configure --with-xmlrpc-c --with-ncurses --disable-debug
make
make install

Actualisation des liens symboliques pour rtorrent :

ldconfig

Installation de rutorrent

mkdir /var/www
cd /var/www
git clone https://github.com/Novik/ruTorrent.git rutorrent

Installation cloudscraper pour plugin _cloudflare

pip install cloudscraper

Installation du plugin rutorrent Chat (inutile si tout seul sur la box)

cd /var/www/rutorrent/plugins/
git clone https://github.com/Micdu70/plugin-chat-ruTorrent.git chat

Installation du plugin rutorrent Logoff

cd /var/www/rutorrent/plugins/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-logoff/logoff-1.3.tar.gz
tar xzfv  logoff-1.3.tar.gz
rm logoff-1.3.tar.gz

Installation du plugin rutorrent pausewebui

cd /var/www/rutorrent/plugins/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-pausewebui/pausewebui.1.2.zip
unzip pausewebui.1.2.zip
rm -R  __MACOSX pausewebui.1.2.zip

Installation du plugin rutorrent filemanager (gestionnaire de fichiers en ligne)

cd /tmp
git clone https://github.com/Micdu70/rutorrent-thirdparty-plugins.git
cd rutorrent-thirdparty-plugins
mv filemanager /var/www/rutorrent/plugins/filemanager
# Changement de propriétaire des fichiers web :
chown -R www-data:www-data /var/www/rutorrent

Partie III : Configuration générale


Configuration du plugin create

nano /var/www/rutorrent/plugins/create/conf.php

et replacer les valeurs ci-dessous :

$useExternal = 'mktorrent';
$pathToCreatetorrent = '/usr/bin/mktorrent';

Configuration du plugin filemanager

nano /var/www/rutorrent/plugins/filemanager/conf.php

et remplacer :

$pathToExternals['rar'] = '';
$pathToExternals['zip'] = '';
$pathToExternals['unzip'] = '';
$pathToExternals['tar'] = '';
$pathToExternals['gzip'] = '';
$pathToExternals['bzip2'] = '';

par :

$pathToExternals['rar'] = '/usr/bin/rar';
$pathToExternals['zip'] = '/usr/bin/zip';
$pathToExternals['unzip'] = '/usr/bin/unzip';
$pathToExternals['tar'] = '/bin/tar';
$pathToExternals['gzip'] = '/bin/gzip';
$pathToExternals['bzip2'] = '/bin/bzip2';

Configuration de php 7.3

modification du php.ini ( correction de la date, et suppression de X-Powered-By dans l'entête http)

nano /etc/php/7.3/fpm/php.ini

Trouver les lignes suivante et remplacer par ces valeurs

upload_max_filesize = 8M
date.timezone = Europe/Paris

et on redémarre php-fpm

service php7.3-fpm restart

Configuration du serveur web nginx

mkdir /etc/nginx/passwd
mkdir /etc/nginx/ssl
touch /etc/nginx/passwd/rutorrent_passwd

Modification du fichier nginx.conf

rm /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf

et copier/coller le nouveau fichier de configuration

user www-data;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll; # gestionnaire d'évènements epoll (kernel 2.6+)
}

http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /var/log/nginx/access.log combined;
    error_log /var/log/nginx/error.log error;

    sendfile on;
    keepalive_timeout 15;
    keepalive_disable msie6;
    keepalive_requests 100;
    tcp_nopush on;
    tcp_nodelay off;
    server_tokens off;

    gzip on;
    gzip_comp_level 5;
    gzip_min_length 512;
    gzip_buffers 4 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_disable "msie6";
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/vnd.ms-fontobject
        font/truetype
        font/opentype
        image/svg+xml;

    include /etc/nginx/sites-enabled/*.conf;
}

Configuration du vhost rutorrent

Création du vhost pour rutorrent dans le fichier seedbox.conf

mkdir /etc/nginx/sites-enabled
nano /etc/nginx/sites-enabled/seedbox.conf
server {
    listen 80 default_server;
    server_name _;

    charset utf-8;
    index index.html index.php;
    client_max_body_size 10M;

    access_log /var/log/nginx/rutorrent-access.log combined;
    error_log /var/log/nginx/rutorrent-error.log error;

    error_page 500 502 503 504 /50x.html;

    auth_basic "seedbox";
    auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd";

    root /var/www;

    location = /50x.html {
        root /usr/share/nginx/html;
    }
    
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location /rutorrent {
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/rutorrent/(conf|share)/(.+)$ {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    location ~* \.(jpg|jpeg|gif|css|png|js|map|woff|woff2|ttf|svg|eot)$ {
        expires 30d;
        access_log off;
    }
}

on redémarre nginx

service nginx restart

Configuration de SSH

Editer le fichier de config ssh :

nano /etc/ssh/sshd_config

commenter les lignes suivantes (placer un # devant comme ceci) :

#Subsystem sftp /usr/lib/openssh/sftp-server
#UsePAM yes

Puis ajouter en dessous :

Subsystem sftp internal-sftp

Partie IV : Ajout d’un utilisateur

Pour uniformiser votre installation, on va convenir d’un format d’écrire des utilisateurs :

1 – Le nom d’utilisateur => <username>
2 - Le nom d’utilisateur en majuscule => <USERNAME>

Par exemple, pour l’utilisateur magicalex : <username> = magicalex et <USERNAME> = MAGICALEX

!!! ATTENTION !!! Pour être valide, le nom d’utilisateur doit être entièrement en minuscules et sans caractères accentués

On créé quelques répertoires pour votre utilisateur :

mkdir --parents /home/<username>/{torrents,watch,.session}

On créé l’utilisateur de rTorrent :

useradd --shell /bin/bash --home /home/<username> <username>
passwd <username>

On bloque l’utilisateur dans son home en SFTP :

nano /etc/ssh/sshd_config

Et coller vers la fin :

Match user <username>,<username2>,<username3> # etc... note : pas d'espace entre les virgules
ChrootDirectory %h

On redémarre le serveur SSH pour valider les modifications :

service ssh restart

A noter que cette manipulation aura pour effet de bloquer l’accès au SSH à cet utilisateur. Il convient donc d’ignorer ce paragraphe si ce dernier remplace l'utilisateur root pour la connexion SSH.

On créé le fichier de configuration de rTorrent :

nano /home/<username>/.rtorrent.rc

Copier/coller ceci :

network.scgi.open_port = 127.0.0.1:500x
encoding.add = UTF-8
network.port_range.set = 45000-65000
network.port_random.set = no
pieces.hash.on_completion.set = no
directory.default.set = /home/<username>/torrents
session.path.set = /home/<username>/.session
protocol.encryption.set = allow_incoming, try_outgoing, enable_retry
schedule2 = watch_directory,1,1,load.start=/home/<username>/watch/*.torrent
schedule2 = untied_directory,5,5,stop_untied=/home/<username>/watch/*.torrent
schedule2 = espace_disque_insuffisant,1,30,close_low_diskspace=500M
trackers.use_udp.set = yes
dht.mode.set = off
protocol.pex.set = no
throttle.min_peers.normal.set = 40
throttle.max_peers.normal.set = 100
throttle.min_peers.seed.set = 10
throttle.max_peers.seed.set = 50
throttle.max_uploads.set = 15
execute2 = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php <username> &}

Attention !!! remplacez 500x par 5001 ou 5002 mais chaque utilisateur doit avoir un port différent

Exemple de commande pour remplacer par le port 5001

sed -i 's/127.0.0.1:500x/127.0.0.1:5001/g' /home/<username>/.rtorrent.rc

Exemple de commande pour remplacer <username> par le pseudo magicalex

sed -i 's/<username>/magicalex/g' /home/<username>/.rtorrent.rc

Rendez-vous sur le site de l'auteur pour personnaliser votre .rtorrent.rc

On applique les bonnes permissions :

chown --recursive <username>:<username> /home/<username>
chown root:root /home/<username>
chmod 755 /home/<username>

On configure le serveur web :

nano /etc/nginx/sites-enabled/seedbox.conf

et ajouter entre ceci : 1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x

    location = /<USERNAME> {
        include scgi_params;
        scgi_pass 127.0.0.1:500x;
        auth_basic "seedbox";
        auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_<username>";
    }

faire cette étape pour chaque utilisateur

On spécifie le mot de passe pour le serveur web et on indique le mot de passe pour cette utilisateur :
note : l'option -B utilise bcrypt pour chiffrer les mots de passe.
1 <username> à remplacer

htpasswd -s /etc/nginx/passwd/rutorrent_passwd <username>

Vous devez taper deux fois de suite le mot de passe pour le vérifier, ensuite :
2 <username> à remplacer

sed --regexp-extended --quiet '/<username>:/p' /etc/nginx/passwd/rutorrent_passwd > /etc/nginx/passwd/rutorrent_passwd_<username>

On applique les bonnes permissions aux fichiers mots de passe :

chmod 640 /etc/nginx/passwd/*
chown --changes www-data:www-data /etc/nginx/passwd/*

Redémarrer le serveur web à chaque modification de ce fichier :

service nginx restart

On créé le répertoire de configuration de ruTorrent : 1 <username> à remplacer

mkdir /var/www/rutorrent/conf/users/<username>

On édite le fichier de configuration : 1 <username> à remplacer

nano /var/www/rutorrent/conf/users/<username>/config.php

On colle les valeurs : 1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x

<?php

$pathToExternals = array(
    "curl"  => '/usr/bin/curl',
    "stat"  => '/usr/bin/stat',
    "php"    => '/usr/bin/php7.3',
    "pgrep"  => '/usr/bin/pgrep',
    "python" => '/usr/bin/python2.7'
    );
    
$topDirectory = '/home/<username>';
$scgi_port = 500x;
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/<USERNAME>';

Désactivation de certain plugin inutile :

touch /var/www/rutorrent/conf/users/<username>/plugins.ini
nano /var/www/rutorrent/conf/users/<username>/plugins.ini

Copier/coller ceci :

[default]
enabled = user-defined
canChangeToolbar = yes
canChangeMenu = yes
canChangeOptions = yes
canChangeTabs = yes
canChangeColumns = yes
canChangeStatusBar = yes
canChangeCategory = yes
canBeShutdowned = yes

[ipad]
enabled = no

[httprpc]
enabled = no

[retrackers]
enabled = no

[rpc]
enabled = no

[rutracker_check]
enabled = no

[geoip]
enabled = no

Vous pouvez désactiver les plugins de votre choix, il y a aussi le fichier acccess.ini qui permet de désactiver certaine option de rutorrent

Création d’un script de démarrage de rTorrent : 2 <username> à remplacer

cd /etc/init.d/
wget --output-document=<username>-rtorrent https://gist.githubusercontent.com/Magicalex/8850ac8539d89af2f21f/raw/923ee22f9300bd3a186704b17e3b88a7583756d9/gistfile1.sh
chmod +x <username>-rtorrent

2 <username> à remplacer

nano /etc/init.d/<username>-rtorrent

Vous pouvez proposer vos améliorations ici. Le script est très très light.

On rend le script exécutable : 1 <username> à remplacer

chmod +x /etc/init.d/<username>-rtorrent

On fait en sorte que le script s'exécute au démarrage du serveur.
A chaque redémarrage rtorrent sera exécuté automatiquement.
1 <username> à remplacer

update-rc.d <username>-rtorrent defaults

Reboot du serveur obligatoire à ce niveau avant de pouvoir vous connecter sur la box
Vous devriez pouvoir maintenant vous connecter à rutorrent.


Conclusion : les accès

ruTorrent Webui
URL : XXX.XXX.XXX.XXX/rutorrent

SFTP
IP : XXX.XXX.XXX.XXX
Port : 22

Détails des dossiers :

  • /watch = Dossier scanné régulièrement par rTorrent afin d'ajouter des torrents sans devoir se connecter via ruTorrent.
  • /torrents = Dossier contenant nos torrents.
  • /.session = Dossier enregistrant les sessions rtorrent.

Pour aller plus loin

Les commandes à savoir pour mettre à jour sa seedbox

Pour redémarrer rTorrent :

service <username>-rtorrent restart

Pour mettre à jour rutorrent via le dépôt github : Attention des conflits peuvent apparaître

cd /var/www/rutorrent/
git pull origin master

Pour mettre à jour les paquets (à faire de temps en temps)

apt-get update
apt-get upgrade

Sources : Tutoriel inspiré par celui de nicobubulle, complété par différentes informations des documentations officielles.

Discussion/Support : https://mondedie.fr/d/9656-discussion-beta-installer-rutorrent-sur-debian-9-nginx-php-fpm

ex_rat a verrouillé la discussion.
3 mois plus tard
23 jours plus tard
ex_rat a renommé le titre en [Tuto] Installer ruTorrent sur Debian 9 {nginx & php-fpm}.
2 ans plus tard
un an plus tard
Répondre…