Créer sa Seedbox avec Plex et Flood

Ce post explique comment créer une seedbox sur un serveur Debian et y accéder (optionnellement) avec un reverse proxy Nginx.

Une seedbox est un serveur dédié à la réception et au partage de torrents. Les serveurs ont généralement un meilleur débit que le réseau domestique. La seedbox vous permet de bénéficier d'une meilleure vitesse de téléchargement et d'une quantité d'envoi importante car elle ne s'arrête jamais.

Une seedbox fonctionne de la manière suivante : je télécharge un torrent sur le serveur, puis je regarde en streaming le torrent téléchargé sur le serveur.

Pour la partie "je télécharge un torrent sur le serveur", il existe de nombreux clients permettant de télécharger des torrents : Transmission et Rutorrent pour ne citer que les plus moches. Aujourd'hui nous allons utiliser Flood.
Flood est une interface web Node.js qui communique avec l'API de rTorrent.

Pour regarder en streaming des fichiers video nous allons utiliser Plex qui est un serveur de lecture de multimédias.

Seedbox Plex et Flood avec Docker pas à pas

Retrouvez le tuto d'installation avec Docker, beaucoup plus simple et rapide à installer ! Voir

I. Le client torrent
    a. Installer rTorrent
    b. Configurer rTorrent
    c. Installer NodeJS
    d. Installer Flood
II. Le serveur multimédia
    a. Installer Plex
    b. Configurer Plex
III. Le reverse proxy Nginx (optionnel)
    a. Installer Nginx
    b. Créer les VirtualHost
    c. Ajout des entrées DNS
IV. Regarder sa série

Avant de commencer :

[email protected]:~# apt-get update && apt-get upgrade

I. Le client

    a. Installer rTorrent

Pour fonctionner rTorrent a besoin de libTorrent ainsi que de xmlrpc-c (pour flood).

On commence par installer les dépendances nécessaires :

[email protected]:~# apt install git curl build-essential automake pkg-config libtool libcppunit-dev zlib1g-dev libncursesw5-dev libncurses5-dev libssl-dev libcurl4-openssl-dev subversion 

Téléchargement et installation de xmlrpc-c :
Plus d'infos sur GitHub ici

[email protected]:~# git clone https://github.com/mirror/xmlrpc-c.git
[email protected]:~# cd xmlrpc-c/stable
[email protected]:~/xmlrpc-c/stable# ./configure
[email protected]:~/xmlrpc-c/stable# make
[email protected]:~/xmlrpc-c/stable# make install
[email protected]:~/xmlrpc-c/stable# cd ~/

Téléchargement et installation de libTorrent :
Lien disponible sur le wiki GitHub ici

[email protected]:~# wget http://rtorrent.net/downloads/libtorrent-0.13.6.tar.gz
[email protected]:~# tar xzvf libtorrent-0.13.6.tar.gz
[email protected]:~# cd libtorrent-0.13.6
[email protected]:~/libtorrent-0.13.6# ./autogen.sh
[email protected]:~/libtorrent-0.13.6# ./configure
[email protected]:~/libtorrent-0.13.6# make
[email protected]:~/libtorrent-0.13.6# make install
[email protected]:~/libtorrent-0.13.6# cd ~/

Téléchargement et installation de rTorrent :
Lien disponible sur le wiki GitHub ici

[email protected]:~# wget http://rtorrent.net/downloads/rtorrent-0.9.6.tar.gz
[email protected]:~# tar xzvf rtorrent-0.9.6.tar.gz
[email protected]:~# cd rtorrent-0.9.6
[email protected]:~/rtorrent-0.9.6# ./configure --with-xmlrpc-c
[email protected]:~/rtorrent-0.9.6# make
[email protected]:~/rtorrent-0.9.6# make install
[email protected]:~/rtorrent-0.9.6# cd ~/
[email protected]:~# ldconfig

ldconfig permet de mettre à jour le cache ld (plus d'infos ici)

    b. Configurer rTorrent

On créer l'utilisateur rtorrent pour ne pas avoir besoin de le démarrer en root :

[email protected]:~# adduser --disabled-password rtorrent

On créer la template de configuration (plus d'infos ici)

[email protected]:~# nano /home/rtorrent/.rtorrent.rc

Collez cette config dans le fichier .rtorrent.rc :

# Contenu de /home/rtorrent/.rtorrent.rc
download_rate = 0
upload_rate = 10000
max_downloads_global = 10
max_peers = 100
max_uploads = 20
directory = /home/rtorrent/rtorrent/downloads
session = /home/rtorrent/rtorrent/.session
port_range = 49999-49999
port_random = no
check_hash = yes
dht = auto
dht_port = 6881
peer_exchange = yes
encryption = allow_incoming,try_outgoing,enable_retry
use_udp_trackers = yes
# Port SCGI pour communiquer avec Flood
scgi_port = 127.0.0.1:5000

Création des dossiers de réception des torrents.
- Un dossier downloads qui contient nos téléchargements (il peut être divisé en sous dossiers séries, filmes, musiques ...)
- Un dossier .session qui contient l'êtat de téléchargement des torrents

[email protected]:~# mkdir /home/rtorrent/rtorrent
[email protected]:~# mkdir /home/rtorrent/rtorrent/{downloads,.session}

On ajoute les permissions aux dossiers :

[email protected]:~# chmod 775 -R /home/rtorrent/rtorrent
[email protected]:~# chown rtorrent:rtorrent -R /home/rtorrent


Test du bon fonctionnement de rTorrent :
On se log avec l'utilisateur rtorrent préalablement crée sans mot de passe :

[email protected]:~# su rtorrent
[email protected]:~# cd ~/

Récupérez ensuite le lien de téléchargement d'un fichier .torrent
Pour ma part j'ai récupérer légalement le lien d'un torrent au hasard sur archive.org.
On télécharge le torrent :

[email protected]:~# wget https://archive.org/nomdufichier.torrent

Une fois téléchargé lancez la commande rtorrent :

[email protected]:~# rtorrent

Une interface s'ouvre. Faites ENTRER pour pouvoir taper une commande. Vous pouvez utiliser TAB pour trouver votre fichier.

load.normal> ~/nomdufichier.torrent

Après avoir fait ENTRER le torrent que vous venez d'ajouter apparait en haut. Par défaut il se peut que le téléchargement soit en pause.
Dans se cas faites CTRL+X et tapez :

command> d.multicall2=,d.start=

Cette commande a pour effet de démarer le téléchargement de tous les torrents de la liste.
Vous pouvez augmenter la vitesse de download en appuyant sur S (en majuscule)
Si vous n'avez pas fait de bêtise, le téléchargement commence. Une fois terminé faites CTRL+Q pour quitter l'interface de rtorrent.

On nettoie le dossier ~/rtorrent :

[email protected]:~/rtorrent$ rm *.torrent

On vérifie que notre fichier a été téléchargé :

[email protected]:~/rtorrent$ cd downloads/
[email protected]:~/rtorrent/downloads$ ls

Votre fichier doit se trouver ici.

Si vous êtes ici, c'est que l'installation de rTorrent s'est bien passé ! Bravo

Pour la suite on peut retourner sur notre utilisateur root.

[email protected]:~/rtorrent/downloads$ su root
[email protected]:/home/rtorrent/rtorrent# cd ~/

Lancer rTorrent au démarrage du serveur :

[email protected]:~# nano /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

On active rtorrent au démarrage de la machine :

[email protected]:~# systemctl daemon-reload
[email protected]:~# systemctl enable rtorrent.service

Puis on démarre le service :

[email protected]:~# systemctl start rtorrent.service

Pour arrêter, démarer et redémarer rTorrent :

[email protected]:~# systemctl stop rtorrent
[email protected]:~# systemctl start rtorrent
[email protected]:~# systemctl restart rtorrent

    c. Installer NodeJS

Au moment de la rédaction de cet article Flood nécessite une version de NodeJS à 7.0.0 ou supérieure. On va donc télécharger la version 8 de NodeJS. Vous pouvez retrouver la dernière version ici.
[email protected]:~# curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
[email protected]:~# sudo apt-get install -y nodejs
[email protected]:~# nodejs -v

Cette dernière commande doit vous donner une version de NodeJS en v8.x.x.

    c. Installer Flood

Pour fonctionner Flood a besoin du package node-gyp disponible via npm :

[email protected]:~# npm install -g node-gyp

On créer l'utilisateur flood pour ne pas démarrer Flood en root :

[email protected]:~# adduser --disabled-password flood

On clone le dépôt git de Flood :

[email protected]:~# cd /home/flood
[email protected]:/home/flood# git clone https://github.com/jfurrow/flood.git
[email protected]:/home/flood# cd flood

On active la configuration de Flood :

[email protected]:/home/flood/flood# cp config.template.js config.js
[email protected]:/home/flood/flood# nano config.js

Pour que Flood soit accessible de l'extérieur via le port 3000, modifiez la ligne floodServerHost: '127.0.0.1' de la configuration par floodServerHost: '0.0.0.0'

Maintenant on installe Flood

[email protected]:/home/flood/flood# npm install 
[email protected]:/home/flood/flood# npm run build
[email protected]:/home/flood/flood# npm start

Note : Si vous souhaitez mettre à jour Flood faites un git pull puis les 3 commandes ci-dessus.

On donne les permissions nécessaires à l'utilisateur flood :

[email protected]:~# chown flood:flood-R /home/flood

On lance flood dans un screen

[email protected]:/home/flood/flood# screen -R flood

-R sert a créer ou reprendre un screen existant nommé flood. Dans le screen :

[email protected]:/home/flood/flood# su flood
[email protected]:~/flood$ npm start

Si tout va bien, à l'issu de la dernière commande vous devez obtenir : Flood server starting on http://0.0.0.0:3000.

Vous pouvez maintenant quitter le screen avec CTRL+A puis D.

Flood est maintenant accessible via http://xxx.xxx.xxx.xxx:3000 !
Vous n'avez plus qu'à créer un compte et télécharger un torrent pour vérifier que tout est ok.

Tip : Si l'écran reste bloqué sur "Flood settings" c'est que rTorrent n'est pas démaré. (systemctl start rtorrent)

Courage on y est presque ! Dans 10 min vous serez devant un bon (mais trop court) épisode de Silicon Valley ...

II. Le serveur multimédia

    a. Installer Plex

Pour installer Plex rien de plus simple. Rendez-vous sur le site de Plex dans l'onglet Téléchargements.
Cliquez sur le gros bouton orange "Téléchargement".
Choisissez la plateforme : Linux.
Cliquez sur "Choose distribution" et fautez clique droit sur "Ubuntu 64-bits" > Copier l'adresse du lien.
Pour moi ce sera la version 1.12.0.4829 : https://downloads.plex.tv/plex-media-server/1.12.0.4829-6de959918/plexmediaserver_1.12.0.4829-6de959918_amd64.deb.

On peut maintenant télécharger Plex sur notre machine :

[email protected]:/home/flood# cd ~/
[email protected]:~# wget https://downloads.plex.tv/plex-media-server/1.12.0.4829-6de959918/plexmediaserver_1.12.0.4829-6de959918_amd64.deb
[email protected]:~# dpkg -i plexmediaserver_1.12.0.4829-6de959918_amd64.deb

Si vous souhaitez mettre à jour Plex dans le futur, il vous suffit de re-executer ces 2 dernières commandes avec le lien à jour.

Plex est maintenant installé. Utilisez ces commandes pour arrêter, démarrer et redémarrer Plex :

[email protected]:~# systemctl stop plexmediaserver
[email protected]:~# systemctl start plexmediaserver
[email protected]:~# systemctl restart plexmediaserver

    a. Configurer Plex

Par défaut Plex est disponible sur le port 32400 mais n'est pas configurer pour un accès distant.
Il faut se connecter via un tunnel SSH à votre machine pour activer l'accès distant.

Sur linux :

ssh votre.adresse.ip -L 8888:localhost:32400

Sur windows (via putty) :

  

Commencez par charger la connexion à votre machine (ici seedbox) puis dans l'onglet Connection > SSH > Tunnels entrez la règle ci-dessus.

Vous avez maintenant accès à Plex via http://localhost:8888/web.
Connectez-vous ou créez vous un compte. Ensuite Plex vous demande de donnez un nom à votre serveur, faites.
Ajoutez vos bibliothèques qui doivent pointer vers /home/rtorrent/rtorrent/downloads vous pouvez éventuellement créer des dossiers pour séparer vos films et séries et ensuite faire la distinction de vos bibliothèques dans Plex.

Vous devriez avoir le torrent que vous avez télécharger précédemment.

Enfin, vérifiez que l'accès distant est activé en allant dans Réglages > Serveur > Accès distant :