Seedbox : installer l’interface web Flood sous rtorrent

 

C’est une interface web en nodejs pour rTorrent, un client en lignes de commandes qui est stable et plutôt léger, et qui est souvent utilisé avec Rutorrent, une interface web qui elle est en PHP.

 

Une Seedbox ?

Une seedbox est un serveur dédié au téléchargement et au partage de fichiers torrents. Flood est une interface web qui nous permet de télécharger ces fichiers.

Pourquoi avoir une seedbox ? Le fait que ce soit un serveur signifie que :

  • vous avez beaucoup de stockage
  • vous avez un surplus de bande passante
  • vous pouvez regarder vos films ou séries en streaming depuis votre serveur

 

Installation de rTorrent et libTorrent

Flood n’étant qu’une interface web pour rTorrent, nous allons d’abord devoir l’installer.

 

Depuis les dépôts

rTorrent est disponible dans les dépôts de Debian tout comme libTorrent, profitons en :

apt install rtorrent

 

Depuis les sources

Ainsi pour avoir les dernières versions, on peut compiler rTorrent et libTorrent directement depuis les sources.

On installe les dépendances :

apt install build-essential subversion autoconf g++ gcc curl comerr-dev pkg-config cfv libtool libssl-dev libncurses5-dev ncurses-term libsigc++-2.0-dev libcppunit-dev libcurl3 libcurl4-openssl-dev

XML-RPC permet à rTorrent de communiquer avec Flood.

On le télécharge :

svn co -q https://svn.code.sf.net/p/xmlrpc-c/code/stable /tmp/xmlrpc-c

On le compile :

cd /tmp/xmlrpc-c

./configure

make -j $(nproc)

On l’installe :

make install

On télécharge libTorrent :

cd /tmp

curl http://rtorrent.net/downloads/libtorrent-0.13.6.tar.gz | tar xz

On le compile :

cd libtorrent-0.13.6

./autogen.sh

./configure

make -j $(nproc)

Et on l’installe :

make install

On télécharge rTorrent :

cd /tmp

curl http://rtorrent.net/downloads/rtorrent-0.9.6.tar.gz | tar xz

On le compile :

cd rtorrent-0.9.6

./autogen.sh

./configure –with-xmlrpc-c

make -j $(nproc)

Et on l’installe :

make install

ldconfig

 

Configuration de rTorrent

On ajoute un utilisateur pour éviter de lancer rTorrent en root :

adduser –disabled-password rtorrent

On édite la configuration de rTorrent :

vim /home/rtorrent/.rtorrent.rc

Et on ajoute ceci :

# Vitesse de téléchargement max up/down, en KiB. « 0 » équivaut à aucune limite.
download_rate = 0
upload_rate = 10000

# Nombre maximal de téléchargements simultanés
max_downloads_global = 10

# Nombre maximal de peers par torrent
max_peers = 100

# Nombre maximal de peers à upload par torrent
max_uploads = 20

# Répertoire qui contient les fichiers téléchargés.
directory = /srv/seedbox/downloads

# Répertoire où rtorrent stocke l’état de téléchargement des torrents.
session = /srv/seedbox/.session

# Ports utilisables par rTorrent. 2x la même valeur = 1 port
port_range = 49999-49999
port_random = no

# Vérification des données à la fin du téléchargement
check_hash = yes

# Activation de DHT pour les torrents sans trackers.
# À désactiver si vous utilisez des trackers privés
dht = auto
dht_port = 6881
peer_exchange = yes

# On préfère les échanges avec chiffrement
encryption = allow_incoming,try_outgoing,enable_retry

# On autorise les trackers UDP
use_udp_trackers = yes

# Port SCGI, on en a besoin pour communiquer avec Flood
scgi_port = 127.0.0.1:5000

On n’oublie pas de créer les répertoires :

mkdir /srv/seedbox

mkdir /srv/seedbox/downloads

mkdir /srv/seedbox/.session

Et on applique les bonnes permissions :

chmod 775 -R /srv/seedbox

chown rtorrent:rtorrent -R /srv/seedbox

chown rtorrent:rtorrent /home/rtorrent/.rtorrent.rc

Ensuite on ajoute un script d’init pour Systemd, pour pouvoir démarrer ou arrêter rtorrent à notre guise et le démarrer au boot automatiquement.

vim /etc/systemd/system/rtorrent.service

On ajoute :

[Unit]
Description=rTorrent
After=network.target
[Service]
User=rtorrent
Type=forking
KillMode=none
ExecStart=/usr/bin/screen -d -m -fa -S rtorrent/usr/local/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/local/bin/rtorrent
WorkingDirectory=%h
[Install]
WantedBy=default.target

(/usr/local/bin/rtorrent est à remplacer par /usr/bin/rtorrent si vous avez installé rTorrent depuis les dépôts)

On active rtorrent au boot :

systemctl daemon-reload

systemctl enable rtorrent.service

Puis le démarre :

sudo systemctl start rtorrent.service

Si vous souhaitez vérifier que le service est entrain de tourner :

ps -aux | grep rtorrent

Pour arrêter rTorrent :

systemctl stop rtorrent

Pour le démarrer :

systemctl start rtorrent

Pour le redémarrer :

systemctl restart rtorrent

Installation de Flood

On passe au morceau qui nous intéresse : l’interface web. C’est du nodejs, donc il va falloir installer ce dernier :

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –
sudo apt-get install -y nodejs

Ensuite, on installe git :

apt install git

Puis on va récupérer le code source de flood :

cd /srv/seedbox

git clone https://github.com/jfurrow/flood.git

On ajoute la conf de flood :

cd flood

cp config.template.js config.js

On l’installe :

npm install –production

Ici, pas de script d’init, flood est apparemment bancal … Le dev lui même conseille d’utiliser screen, faisons comme ça…

 

On ajoute un utilisateur pour éviter de lancer flood en root par la suite :

adduser –disabled-password flood

On applique les bonnes permissions :

chown -R flood:flood /srv/seedbox/flood/

 

Lancement de Flood en screen

On crée un screen :

screen -S flood

On change d’utilisateur :

su – flood

Puis on lance flood :

cd /srv/seedbox/flood

npm start

Vous pouvez arrêter Flood avec ctrl + c sortir du screen avec ctrl + a puis d et revenir avec screen -r flood

Flood est désormais accessible via http://IP_DU_SERVEUR:3000

À votre première connexion il vous sera demandé de créer un compte.

Mettre à jour Flood

Il suffit de récupérer le nouveau code et de relancer flood.

screen -r flood

ctrl + c pour l’arrêter puis ctrl + a et d pour sortir de flood

cd /srv/seedbox/flood

git pull

Vous devriez vérifier au cas où il y ait des changements dans config.sample.js.

On met à jour flood :

npm install –production

Et on le relance :

screen -r flood

npm run start:production

 

 

Reverse proxy Nginx avec SSL/TLS

Tant qu’on y est, autant faire les choses proprement : accéder à Flood via un domaine, le tout en SSL/TLS (HTTPS)

Pré-requis : avoir un domaine/sous domaine qui pointe vers l’IP du serveur.

Ici je prends comme exemple seedbox.mondomaine.fr.

 

Installation de Nginx

Suivre simplement ces commandes :

wget -O – https://nginx.org/keys/nginx_signing.key | apt-key add –
echo « deb http://nginx.org/packages/debian/ $(lsb_release -sc) nginx » > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx

 

Génération d’un certificat avec Let’s Encrypt

On installe Let’s Encrypt depuis les backports de Debian :

echo « deb http://httpredir.debian.org/debian jessie-backports main » >> /etc/apt/sources.list

apt update

apt install -t jessie-backports letsencrypt

On arrête Nginx pour laisser le port 80 libre :

service nginx stop

On génère le certificat :

letsencrypt certonly -d seedbox.mondomaine.fr –agree-tos -m contact@hadopi.fr –rsa-key-size 4096 –standalone

On configure nginx :

vim /etc/nginx/conf.d/seedbox.conf

Et hop (à adapter bien sûr) :

server {
listen 80;
server_name seedbox.mondomaine.fr;
return 301 https://seedbox.mondomaine.fr$request_uri;

access_log /dev/null;
error_log /dev/null;
}

server {
listen 443 ssl http2;
server_name seedbox.mondomaine.fr;
access_log /var/log/nginx/flood-access.log;
error_log /var/log/nginx/flood-error.log;
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Connection «  »;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header X-Transmission-Session-Id;
}
ssl_certificate /etc/letsencrypt/live/seedbox.mondomaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seedbox.mondomaine.fr/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/seedbox.mondomaine.fr/chain.pem;
ssl_protocols TLSv1.2;
ssl_ecdh_curve secp384r1;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_prefer_server_ciphers on;
resolver 80.67.169.12 80.67.169.40 valid=300s;
resolver_timeout 5s;
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_session_tickets off;
}

Et peut démarrer Nginx :

service nginx start

 

Quelques captures d’écran du résultat

On remarque qu’il y a même une traduction française intégrée.

 

Sources :

  • https://github.com/jfurrow/flood
  • https://doc.ubuntu-fr.org/rtorrent
  • https://jes.sc/kb/rTorrent+ruTorrent-Seedbox-Guide.php#Install-Dependencies
  • https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions
  • https://wiki.archlinux.org/index.php/RTorrent
  • https://gist.github.com/bryanjswift/1525912