Créer sa Seedbox avec Plex et Flood


8 min read
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.

Avant de commencer :

apt-get update
apt-get upgrade

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 :

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

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

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

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

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

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

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

Configurer rTorrent

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

adduser --disabled-password rtorrent

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

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

mkdir /home/rtorrent/rtorrent
mkdir /home/rtorrent/rtorrent/{downloads,.session}

On ajoute les permissions aux dossiers :

chmod 775 -R /home/rtorrent/rtorrent
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 :

su rtorrent
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 :

wget https://archive.org/nomdufichier.torrent

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

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 :

rm *.torrent

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

ls downloads

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.

su root
cd ~/

Lancer rTorrent au démarrage du serveur :

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 :

systemctl daemon-reload
systemctl enable rtorrent.service

Puis on démarre le service :

systemctl start rtorrent.service

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

systemctl stop rtorrent
systemctl start rtorrent
systemctl restart rtorrent

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.

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

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

Installer Flood

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

npm install -g node-gyp

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

adduser --disabled-password flood

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

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

On active la configuration de Flood :

cp config.template.js config.js
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

npm install 
npm run build
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 :

chown flood:flood-R /home/flood

On lance flood dans un screen

screen -R flood

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

su 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émarré. (systemctl start rtorrent)

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

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 :

cd ~/
wget https://downloads.plex.tv/plex-media-server/1.12.0.4829-6de959918/plexmediaserver_1.12.0.4829-6de959918_amd64.deb
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 :

systemctl stop plexmediaserver
systemctl start plexmediaserver
systemctl restart plexmediaserver

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 :

Si tout est ok vous devez pouvoir accéder à Plex via votre.adresse.ip:32400/web !
Si  votre but ultime est d'avoir une seedbox fonctionnelle vous pouvez vous  arrêter là ! Sinon si vous avez encore 15 minutes à m'accorder et qui  vous souhaitez avoir un minimum de classe en y accédant par tv.mondomaine.fr et seedbox.mondomaine.fr, je vous invite à lire la suite !

Installer Nginx

Si vous utilisez déjà Apache vous allez devoir re-créer vos VirtualHost sur Nginx ! Ou abandonner ...
Pour désinstaller apache2 :

apt-get remove –purge apache2

Vous pouvez vérifier que plus rien ne tourne sur le port 80 :

netstat -an

On peut maintenant installer Nginx :

apt install nginx

Créer les VirtualHost

Création des virtualhost :

nano /etc/nginx/sites-available/default

En bas de ce fichier ajoutez vos 2 virtualhost :

server {
    listen 80;
    server_name tv.votredomaine.xyz;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:32400;
    }
}
server {
    listen 80;
    server_name seedbox.votredomaine.xyz;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:3000;
    }
}

J'ai  mon premier VirtualHost qui me permet d'accéder à Plex via  tv.votredomaine.xyz et le second permet d'accéder à Flood via  seedbox.votredomaine.xyz.
C'est tout simplement une "redirection" vers un port.

Pour que Nginx prenne en compte la configuration vous pouvez le redémarrer :

systemctl restart nginx

Au passage, si vous n'avez pas de message c'est que tout est ok !

Maintenant que vos VirtualHost sont créer il ne vous reste plus qu'à configurer votre zone DNS !

Ajout des entrées DNS

Ici c'est selon votre registrar... Vous devez ajouter 2 entrées de type A pointant vers votre ip. Quelques exemples ci-dessous :

Chez CloudFlare :

Chez OVH :

Plex et Flood sont maintenant accessibles via tv.votredomaine.xyz et seedbox.votredomaine.xyz !

Regarder sa série

Voilà, c'est terminé ! Il ne reste plus qu'a profiter légalement de votre seedbox !

Si vous rencontrez des difficultés pour réaliser votre seedbox laissez un commentaire.

Merci d'avoir suivi cet article jusqu'au bout ! ❤️

GO TOP

🎉 You've successfully subscribed to FrenchCode!
OK