Installer sa propre SeedBox

Installer sa propre SeedBox

Une SeedBox est un serveur dédié sur lequel vous allez pouvoir envoyer/télécharger des fichiers en tout genre (vidéos/documents/images…). Votre serveur va se charger de récupérer le fichier via torrent et ensuite, vous venez le récupérer quand ça vous arrange en téléchargement direct (FTP/HTTP…).

Il existe des SeedBox clé en main que vous pouvez louer. Ici nous allons voir comment installer sa propre SeedBox sur son serveur dédié. Nous utiliserons RuTorrent sous Debian 10.

Pour pouvoir installer notre SeedBox, nous aurons besoin d’un serveur Debian à jour et d’un nom de domaine. Vous pouvez aller voir mon tutoriel sur comment installer Debian en cliquant ici. N’hésitez pas à prendre la dernière version de Debian, pour ce tutoriel j’ai utilisé la version 10.8.

Ensuite pensez à mettre à jour votre serveur, voici les dépôts que j’ai utilisés dans mon fichier « sources.list » :

deb http://deb.debian.org/debian buster main contrib non-free
deb-src http://deb.debian.org/debian buster main contrib non-free

deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free

deb http://deb.debian.org/debian buster-updates main contrib non-free
deb-src http://deb.debian.org/debian buster-updates main contrib non-free

Il va falloir installer toutes les dépendances nécessaires pour que RuTorrent fonctionne. Pour commencer, RuTorrent a besoin de PHP pour fonctionner.

1- Installation de PHP

Nous allons récupérer la dernière version de PHP qui est à l’heure de ce tutoriel la version 7.4. Pour ce faire, nous devons récupérer les « sources list » de sury. Téléchargeons les clés GPG via les deux commandes suivantes :

apt-get -y install lsb-release apt-transport-https ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Ensuite, nous pouvons ajouter les « sources list » contenant php7.4 avec la commande :

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

On met à jour la liste des dépôts disponibles via la commande :

apt-get update

On installe php7.4 et toutes les dépendances nécessaires au bon fonctionnement de RuTorrent :

apt-get -y install php7.4 php7.4-fpm php7.4-xml php7.4-cli php7.4-json php7.4-common php7.4-mbstring php7.4-opcache php7.4-curl php7.4-readline php7-geoip

L’installation de php a été réalisé, il nous faut le configurer. On commence en modifiant le fichier php.ini :

nano /etc/php/7.4/fpm/php.ini

Trouvez les lignes ci-dessous et modifiez les avec les mêmes valeurs que moi :

upload_max_filesize = 500M
date.timezone = Europe/Paris

Notre PHP 7.4 est installé et configuré, passons maintenant à l’installation de paquets nécessaires au bon fonctionnement de RuTorrent.

2- Installation des paquets

Il faut installer un certain nombre de paquet pour le bon fonctionnement de RuTorrent, je ne rentrerai pas dans le détail. Pour ceux qui le souhaite, je vous laisse faire vos recherches si vous avez besoin :

apt-get install -y apache2-utils automake htop build-essential curl ffmpeg gawk git libcppunit-dev libcurl4-openssl-dev libncurses5-dev libsigc++-2.0-dev libsox-fmt-all libsox-fmt-mp3 libssl-dev libtool mediainfo mktorrent net-tools pkg-config psmisc python-pip rar screen subversion unrar unzip sox vim zip zlib1g-dev

Nous accèderons à RuTorrent via une interface WEB. Pour pouvoir gérer RuTorrent depuis celle-ci via des requêtes XML nous avons besoin de xmlrpc. Commencez par vous déplacer dans vote répertoire « tmp » :

cd /tmp/

On récupère le paquet :

git clone https://github.com/mirror/xmlrpc-c.git

On se déplace dans le dossier téléchargé :

cd xmlrpc-c/stable/

On lance le script de configuration :

./configure

On compile avec « make » :

make
make install

 

Pour RuTorrent, nous avons besoin de libtorrent qui va nous permettre d’utiliser les bittorrent. On se remets dans /tmp/ :

cd /tmp/

On récupère le paquet :

git clone https://github.com/rakshasa/libtorrent.git

On se déplace dans le dossier téléchargé :

cd libtorrent

On regarde quel est la dernière version de libtorrent ici puis on la récupère :

git checkout v0.13.8

On lance le script de configuration :

./autogen.sh
./configure --disable-debug

On compile avec make :

make
make install

 

On installe RTorrent et on se remets dans /tmp/ :

cd /tmp/

On récupère le paquet :

git clone https://github.com/rakshasa/rtorrent.git

On se déplace dans le dossier téléchargé :

cd rtorrent

On regarde quel est la dernière version de rtorrent ici puis on la récupère :

git checkout v0.9.8

On lance le script de configuration :

./autogen.sh
./configure --with-xmlrpc-c --with-ncurses --disable-debug

On compile avec make :

make
make install

On mets à jour nos liens symboliques pour rtorrent :

ldconfig

3- Installation de RuTorrent

On commence par créer le dossier qui recevra RuTorrent (c’est le dossier recevant les sites Internet de votre serveur) :

mkdir /var/www/

On se déplace dans le dossier que nous venons de créer :

cd /var/www/

On récupère RuTorrent via un lien github :

git clone https://github.com/Novik/ruTorrent.git rutorrent

On installe cloudscraper utile pour le plugin cloudflare :

pip install cloudscraper

On installe le plugin ratiocolor directement dans le dossier de RuTorrent :

cd rutorrent/plugins/
git clone https://github.com/Micdu70/rutorrent-ratiocolor.git ratiocolor

On télécharge le plugin Logoff pour nous permettre gérer nos utilisateurs :

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-logoff/logoff-1.3.tar.gz

On extrait le plugin de son archive et on supprime l’archive qui ne nous sert plus à rien :

tar xzfv logoff-1.3.tar.gz
rm logoff-1.3.tar.gz

On installe le plugin GeoIP pour avoir l’information des provenances des peer :

git clone https://github.com/Micdu70/geoip2-rutorrent.git geoip2

On installe le plugin pausewebui pour pouvoir mettre en pause l’actualisation de la page :

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-pausewebui/pausewebui.1.2.zip

On extrait le plugin de son archive et on supprime l’archive qui ne nous sert plus à rien :

unzip pausewebui.1.2.zip
rm -R __MACOSX pausewebui.1.2.zip

On installe le plugin filemanager pour la gestion de nos fichiers en ligne. Pour ce faire retournons dans /tmp/ :

cd /tmp/

On télécharge le plugin :

git clone https://github.com/Micdu70/rutorrent-thirdparty-plugins.git

On se déplace dans le dossier tout juste téléchargé :

cd rutorrent-thirdparty-plugins

On déplace le plugin dans le dossier de RuTorrent :

mv filemanager /var/www/rutorrent/plugins/filemanager

4- Configuration des plugins

Il faut configurer 2 des plugins pour le bon fonctionnement de RuTorrent. Tout d’abord modifions le fichier de configuration du plugins « create » :

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

Votre fichier doit être identique à celui ci-dessous en modifiant les 2 premières variables pour le connecter à mktorrent :

Fichier configuration plugin create

Maintenant modifions le fichier de configuration du plugins « filemanager » :

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

Votre fichier doit être identique à celui ci-dessous en modifiant les chemin des différents format rar/unzip… :

Fichier configuration plugin filemanager

5- Installation de nginx / certificat

Pour commencer, nous installons nginx ainsi que letsencrypt :

apt-get install nginx letsencrypt

Nous arrêtons le service de nginx pour pouvoir installer et configurer notre certificat :

/etc/init.d/nginx stop

Nous devons créer le certificat avec « letsencrypt » afin de sécuriser notre NextCloud en HTTPS :

certbot certonly --standalone -d maseedbox.mondomaine.com --rsa-key-size 4096

Vous devriez voir ceci, il faudra rentrer votre adresse mail puis accepter les conditions et enfin refuser ou accepter de recevoir des mails pour suivre les nouveautés de letsencrypt :

Requête letsencrypt

Une fois validé, vous devriez avoir un message vous indiquant que votre certificat a bien été créé :

Letsencrypt certificat validé

Vous pouvez retrouver tous les fichiers de votre certificat dans le dossier suivant :

ls /etc/letsencrypt/live/maseedbox.mondomaine.com/

Pour finaliser la configuration de notre serveur web, nous devons modifier le fichier de configuration de nginx :

nano /etc/nginx/sites-available/default

Voici ce que j’ai configuré dans mon fichier pour le bon fonctionnement de RuTorrent:

server {
listen 80;
server_name maseedbox.mondomaine.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name maseedbox.mondomaine.com;

charset utf-8;
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/pass/rutorrent_pass";

ssl_certificate /etc/letsencrypt/live/maseedbox.mondomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/maseedbox.mondomaine.com/privkey.pem;

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
add_header Strict-Transport-security "max-age=31536000; includeSubDomains" always;

root /var/www/rutorrent;

index index.php index.html index.htm index.nginx-debian.html;

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.4-fpm.sock; 
} 
location ~* \.(jpg|jpeg|gif|css|png|js|map|woff|woff2|ttf|svg|eot)$ {
     expires 30d;
     access_log off; 
}
}

Le fichier de configuration est terminé, nous pouvons démarrer nginx :

/etc/init.d/nginx start

6- Configuration utilisateurs

On arrive au bout de ce tutoriel et de l’installation de notre serveur RuTorrent. Nous allons maintenant créer un utilisateur, sachez qu’il faudra recommencer cette partie autant de fois que vous souhaitez avoir d’utilisateur.

Notez qu’il faudra bien suivre la façon d’écrire le nom de votre utilisateur, en minuscule ou en majuscule !

 

Créons notre utilisateur via la commande :

useradd --shell /bin/bash --create-home nomutilisateur

On configure un mot de passe pour l’utilisateur :

passwd nomutilisateur

On créer les dossiers qui seront utilisés par RuTorrent pour cet utilisateur :

mkdir -p /home/nomutilisateur/{torrent,watch,.session}

On mets en place le fichier de configuration pour rtorrent pour cet utilisateur :

nano /home/nomutilisateur/.rtorrent.rc

Le fichier de configuration doit être comme celui-ci où le scgi_port doit être différent pour chaque utilisateur (5001, 5002, 5003 …) :

scgi_port = 127.0.0.1:5001
encoding_list = UTF-8
port_range = 20000-40000
port_random = no
check_hash = no
directory = /home/nomutilisateur/torrents
session = /home/nomutilisateur/.session
encryption = allow_incoming, try_outgoing, enable_retry
schedule = watch_directory,1,1,"load_start=/home/nomutilisateur/watch/.torrent"
schedule = untied_directory,5,5,"stop_untied=/home/nomutilisateur/watch/.torrent"
trackers.use_udp.set = yes
dht = off
max_peers = 100
max_peers_seed = 50
max_uploads = 15
execute = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php nomutilisateur &}
schedule = espace_disque_insuffisant,1,30,close_low_diskspace=500M

On positionne les bons droits sur le dossier et les fichiers de notre utilisateur :

chown --recursive nomutilisateur:nomutilisateur /home/nomutilisateur
chown root:root /home/nomutilisateur
chmod 755 /home/nomutilisateur

Ensuite nous devons ajouter la configuration de notre utilisateur dans la configuration de nginx. Modifiez le fichier de configuration :

nano /etc/nginx/sites-available/default

Dans le fichier ajoutez à la fin les lignes suivantes :

location /NOMUTILISATEUR {
include scgi_params;
scgi_pass 127.0.0.1:5001;
auth_basic "Seedbox";
auth_basic_user_file "/etc/nginx/pass/rutorrent_pass nomutilisateur";

On créer le dossier en question qui va recevoir le fichier avec les mots de passe de nos utilisateurs :

mkdir /etc/nginx/pass/

On créer le mot de passe pour notre utilisateur de façon chiffré (on est jamais trop prudent 😉 ). Il vous sera demandé de taper 2 fois votre mot de passe :

htpasswd -c -B "/etc/nginx/pass/rutorrent_pass nomutilisateur"

On ajoute encore un peu de sécurité en modifiant les droits sur le fichier fraichement créé et on ajoute l’utilisateur www-data comme propriétaire de celui-ci :

chmod 600 /etc/nginx/pass/rutorrent_pass
chown www-data:www-data /etc/nginx/pass/rutorrent_pass

Maintenant que rtorrent est géré, il faut créer un fichier utilisateur pour RuTorrent, on commence par créer le dossier qui va recevoir les fichiers de configuration de vos utilisateurs :

mkdir /var/www/rutorrent/conf/users/nomutilisateur

On créé le fichier de configuration :

nano /var/www/rutorrent/conf/users/nomutilisateur/config.php

Mettez ceci dans le fichier :

<?php 
$pathToExternals =array (
 "curl" => '/usr/bin/curl',
 "stat" => '/usr/bin/stat',
 "php" => '/usr/bin/php7.4',
 "pgrep" => '/usr/bin/pgrep',
 "python" => '/usr/bin/python2.7'
);
$topDirectory = '/home/nomutilisateur';
$scgi_port = 5001;
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/NOMUTILISATEUR';

On modifie les droits du dossier complet de RuTorrent pour que le propriétaire soit www-data:

chown -R www-data:www-data /var/www/rutorrent

On redémarre nginx :

/etc/init.d/nginx restart

7- Création script démarrage

Pour que votre rtorrent démarre avec votre système, il nous faut créer un script de démarrage pour chaque utilisateur de notre système :

nano /etc/init.d/nomutilisateur-rtorrent

Mettez ceci dans votre fichier :

!/usr/bin/env bash
user="nomutilisateur"

rt_start() {
  su --command="screen -dmS ${user}-rtorrent rtorrent" "${user}"
}

rt_stop() {
  killall --user "${user}" screen
}

case "$1" in
start) echo "Démarrage de rtorrent…"; rt_start
 ;;
stop) echo "Arrêt de rtorrent…"; rt_stop
 ;;
restart) echo "Redémarrage de rtorrent…"; rt_stop; sleep 1; rt_start
 ;;
*) echo "Usage: $0 {start|stop|restart}"; exit 1
 ;;
esac
exit 0

Pour finir on rend le fichier exécutable au démarrage du serveur :

update-rc.d nomutilisateur-rtorrent defaults

Vous pouvez dès à présent lancer votre script :

/etc/init.d/nomutilisateur-rtorrent start

Félicitation, vous avez fini d’installer RuTorrent et vous pouvez désormais vous connecter à l’interface web via l’url que vous avez positionné dans nginx. L’interface ressemble à celle-ci :

Interface RuTorrent

Hop avant de partir, allez me suivre sur les réseaux pour me soutenir :

À propos de l’auteur

Vincent Krahenbuhl administrator

Passionné d’informatique, ma motivation et ma curiosité m’ont permis de réaliser des études en alternance. J’ai dans un premier temps exercé le poste de technicien informatique au sein du groupe Edscha. J’ai ensuite occupé un poste d’administrateur réseau puis je suis devenu ingénieur réseau et sécurité au sein de l’entreprise FM Logistic. Fort de ces expériences dans deux entreprises internationales, j’ai décidé de devenir Formateur Indépendant en Informatique.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.