J’ai enfin pensé à continuer ma série de mémo expliquant comment installer une seedbox. Mieux vaut tard que jamais 😀
Un petit lien vers les deux premiers billets que j’avais rédigé, ils datent un peu mais sont toujours valables :
Installer une seedbox : Pré-requis
Ici je pars du principe que vous avez déjà installé un système d’exploitation sur votre serveur. Ici nous utilisons Debian 8
Installer une seedbox : Configuration des dépôts
Avant tout il va falloir commencer par configurer nos dépôts, les sources depuis lesquelles nous téléchargeons nos paquets, commençons donc par modifier les dépôts de base de notre distribution.
nano /etc/apt/sources.list
Par défaut il est configuré de la manière suivante
deb http://mirror.mephi.ru/debian/ jessie main deb-src http://mirror.mephi.ru/debian/ jessie main deb http://security.debian.org/ jessie/updates main deb-src http://security.debian.org/ jessie/updates main # jessie-updates, previously known as 'volatile' deb http://mirror.mephi.ru/debian/ jessie-updates main deb-src http://mirror.mephi.ru/debian/ jessie-updates main
Ajoutons donc les dépôts contrib et non-free
deb http://mirror.mephi.ru/debian/ jessie main contrib non-free deb-src http://mirror.mephi.ru/debian/ jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # jessie-updates, previously known as 'volatile' deb http://mirror.mephi.ru/debian/ jessie-updates main contrib non-free deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib non-free
Maintenant nous pouvons ajouter de nouveaux dépôts, mais pour le faire nous aurons besoin de leur clé afin de pouvoir authentifier les paquets disponibles
wget --no-check-certificate https://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg wget http://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2016.3.7_all.deb && dpkg -i deb-multimedia-keyring_2016.3.7_all.deb
Créons un fichier de configuration pour le dépot dotdeb
echo "#Dotdeb deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list.d/dotdeb.list
Meme chose pour le dépôt multimédia
echo "#Deb-Multimedia deb http://www.deb-multimedia.org jessie main non-free" >> /etc/apt/sources.list.d/deb-multimedia.list
Maintenant vous pouvez mettre la lise de vos paquets à jour
apt-get update
Installer une seedbox : Installation des dépendances
Ici rien de bien compliqué, nous allons installer pas mal de paquets qui seront nécessaires pour compiler rtorrent et faire tourner notre seedbox
apt-get install automake libcppunit-dev libtool build-essential pkg-config libssl-dev libcurl4-openssl-dev libsigc++-2.0-dev libncurses5-dev screen subversion apache2-utils curl php7.0 php7.0-fpm php7.0-cli php7.0-curl php7.0-geoip git unzip unrar rar zip ffmpeg buildtorrent mediainfo
Installer une seedbox : Compilation de rTorrent
Sous Debian, rTorrent est déjà disponible depuis les dépôts officiel, il est fourni avec l’interface XML-RPC nécessaire pour fonctionner avec rutorrent. Vous n’êtes donc en rien obligé de suivre les étapes de compilation sauf si comme moi vous préférez utiliser une version mise à jour de rTorrent
Pour utiliser rTorrent via une interface web, rutorrent, nous avons besoin d’utiliser XMLRPC
cd /tmp svn checkout http://svn.code.sf.net/p/xmlrpc-c/code/stable xmlrpc-c cd xmlrpc-c/ ./configure make -j $(nproc) make install
Occupons nous maintenant de libtorrent (dernière version stable 0.13.6)
cd /tmp
git clone https://github.com/rakshasa/libtorrent.git
cd libtorrent
git checkout `git tag | tail -1`
./autogen.sh
./configure
make -j $(nproc)
make install
Et enfin de rTorrent (dernière version stable 0.9.6)
cd /tmp
git clone https://github.com/rakshasa/rtorrent.git
cd rtorrent
git checkout `git tag | tail -1`
./autogen.sh
./configure --with-xmlrpc-c
make -j $(nproc)
make install
N’oubliez pas de générer des liens symboliques pour les librairies récemment installées
ldconfig
Installer une seedbox : Installation et configuration de rutorrent
rutorrent c’est l’interface web qui nous permettra de controler rTorrent, commençons donc par le télécharger
mkdir -p /var/www/html cd /var/www/html git clone https://github.com/Novik/ruTorrent.git rutorrent
Pour rendre ruTorrent utilisable avec un mobile ou une tablette, installons un plugin
cd /var/www/html/rutorrent/plugins/ git clone https://github.com/xombiemp/rutorrentMobile.git mobile chown -R www-data:www-data /var/www/html/rutorrent
Configurons maintenant le rutorrent pour qu’il utilise le paquet buildtorrent lors de la création d’un fichier torrent
nano /var/www/html/rutorrent/plugins/create/conf.php
Que nous configurons de la manière suivante
$useExternal = 'buildtorrent'; $pathToCreatetorrent = '/usr/bin/buildtorrent';
Installer une seedbox : Configuration de PHP
Ouvrons la configuration de PHP7
nano /etc/php/7.0/fpm/php.ini
Dans ce fichier, vérifiez que les variables suivantes soient configurées correctement
expose_php = Off
file_uploads = On
post_max_size = 15M
upload_max_filesize = 15M
; En fonction de votre location
date.timezone = Europe/Paris
Maintenant redémarrons le service php7.0-fpm afin d’appliquer les modifications
service php7.0-fpm restart
Installer une seedbox : Installation et configuration du serveur WEB
Vous vous en doutez, une seedbox nécessite l’utilisation d’un serveur WEB – NGinx ou Apache2
Installer une seedbox : Installation et configuration de NGinx
Installer une seedbox : installation de NGinx
Ici nous allons installer la dernière version de NGinx (mainline). Commencons donc par ajouter la clé de signature des paquets
wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key && rm nginx_signing.key
Maintenant configurons le dépot
echo "#NGinx Mainline deb http://nginx.org/packages/debian/ jessie nginx deb-src http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list.d/nginx-mainline.list
Puis installons le paquet
apt-get update && apt-get install nginx
Installer une seedbox : Configuration de NGinx
Optimisons maintenant un peu la configuration de NGinx
mkdir /etc/nginx/auth
rm /etc/nginx/nginx.conf && nano /etc/nginx/nginx.conf
Voici la configuration que je vous conseille
user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; multi_accept on; use epoll; } http { charset UTF-8; ## # Basic Settings ## server_names_hash_bucket_size 64; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Installer une seedbox : Configuration du virtualhost
Supprimons la configuration du virtualhost par défaut et créons un virtual host pour rutorrent
rm /etc/nginx/conf.d/*.conf && mkdir /etc/nginx/sites-enabled nano /etc/nginx/sites-enabled/seedbox
Avec la configuration suivante :
- nous n’utilisons pas de domaine, vous pouvez très bien le faire en modifiant la variable
server_name
- nous redigeons les requêtes http vers https
- dans cet exemple nous utilisons un certificat ssl auto-signé, si vous disposez de votre propre domaine, vous pouvez obtenir un certificat via let’s encrypt
- Pour se connecter à rutorrent chaque utilisateur devra utiliser un login et un mot de passe
server { listen 80; listen [::]:80; # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. return 301 https://$host$request_uri; } #------------------------------------------------------------------------ # BLOCK SERVEUR HTTPS # server { listen 443 ssl http2; server_name seedbox; root /var/www/html/rutorrent; index index.php index.html index.htm; #------------------------------------------------------------------------ # SSL # ssl_certificate /etc/nginx/ssl/seedbox.crt; ssl_certificate_key /etc/nginx/ssl/seedbox.key; ssl_protocols TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; # ssl optimizations ssl_session_timeout 5m; ssl_session_cache shared:SSL:20m; ssl_session_tickets on; #------------------------------------------------------------------------ # SECURITY add_header X-XSS-Protection "1; mode=block"; auth_basic "Restricted Area"; auth_basic_user_file "/etc/nginx/auth/seedbox_auth"; #------------------------------------------------------------------------ # PHP # location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ^~ /conf/ { deny all; } location ^~ /share/ { deny all; } }
Installer une seedbox : Configuration SSL
Créons un répertoire qui contiendra notre certificat auto-signé
mkdir /etc/nginx/ssl
Dans ce répertoire, générons un certificat auto-signé
cd /etc/nginx/ssl openssl ecparam -genkey -name secp384r1 -out seedbox.key openssl req -new -key seedbox.key -sha256 -out seedbox.csr openssl req -x509 -days 3650 -sha256 -key seedbox.key -in seedbox.csr -out seedbox.crt
Modifions les droits des fichiers
chmod 644 /etc/nginx/ssl/*.crt chmod 640 /etc/nginx/ssl/*.key
Installer une seedbox : Installation et configuration d’Apache2
Installation d’Apache2
Installons apache2 ainsi que les modules nécessaires
apt-get install apache2 libapache2-mod-php7.0 libapache2-mod-scgi
Activons les modules nécessaires
a2enmod auth_digest ssl scgi
Configuration d’Apache2
Créons les répertoires nécessaires et désactivons la configuration par défaut
mkdir /etc/apache2/auth && a2dissite 000-default
Configurons notre virtualhost
nano /etc/apache2/sites-available/seedbox.conf
Comme pour NGinx nous
- nous n’utilisons pas de domaine, vous pouvez très bien le faire en modifiant la variable
ServerName
- nous redigeons les requêtes http vers https
- dans cet exemple nous utilisons un certificat ssl auto-signé, si vous disposez de votre propre domaine, vous pouvez obtenir un certificat via let’s encrypt
- Pour se connecter à rutorrent chaque utilisateur devra utiliser un login et un mot de passe
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin votre-email ServerName IP.DU.SERVEUR redirect / https://IP.DU.SERVEUR </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin votre-email ServerName IP.DU.SERVEUR DocumentRoot /var/www/html/rutorrent SSLEngine On SSLCipherSuite EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES SSLHonorCipherOrder on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCompression off SSLCertificateFile /etc/apache2/ssl/seedbox.crt SSLCertificateKeyFile /etc/apache2/ssl/seedbox.key <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/html/rutorrent> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/rutorrent-error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/rutorrent-access.log combined <Location /> AuthType Digest AuthName "seedbox" AuthDigestDomain /var/www/html/rutorrent/ AuthDigestProvider file AuthUserFile /etc/apache2/auth/seedbox_auth Require valid-user SetEnv R_ENV "/var/www/html/rutorrent" </Location> </VirtualHost> </IfModule>
Activez ce vhost via la commande
a2ensite seedbox
Installer une seedbox : Configuration SSL
Créons un répertoire qui contiendra notre certificat auto-signé
mkdir /etc/apache2/ssl
Dans ce répertoire, générons un certificat auto-signé
cd /etc/apache2/ssl openssl ecparam -genkey -name secp384r1 -out seedbox.key openssl req -new -key seedbox.key -sha256 -out seedbox.csr openssl req -x509 -days 3650 -sha256 -key seedbox.key -in seedbox.csr -out seedbox.crt
Modifions les droits des fichiers
chmod 644 /etc/apache2/ssl/*.crt chmod 640 /etc/apache2/ssl/*.key
Installer une seedbox : Ajout d’un utilisateur
Faites bien attention. Lorsque le nom d’utilisateur noobunbox est écrit en majuscules, vous devez faire de même
Ici nous allons ajoutez l’utilisateur : noobunbox
useradd --shell /bin/bash --create-home noobunbox passwd noobunbox
Maintenant créons pour cet utilisateur les répertoires nécessaires au fonctionnement de rtorrent
mkdir -p /home/noobunbox/{torrents,watch,.session}
Créons un fichier de configuration rtorrent pour noobunbox
nano /home/noobunbox/.rtorrent.rc
Collez la configuration suivante
scgi_port = 127.0.0.1:5001 encoding_list = UTF-8 port_range = 45000-65000 port_random = no check_hash = no directory = /home/noobunbox/torrents session = /home/noobunbox/.session encryption = allow_incoming, try_outgoing, enable_retry schedule = watch_directory,1,1,"load_start=/home/noobunbox/watch/*.torrent" schedule = untied_directory,5,5,"stop_untied=/home/noobunbox/watch/*.torrent" use_udp_trackers = yes dht = off peer_exchange = no min_peers = 40 max_peers = 100 min_peers_seed = 10 max_peers_seed = 50 max_uploads = 15 execute = {sh,-c,/usr/bin/php /var/www/html/rutorrent/php/initplugins.php noobunbox &} schedule = espace_disque_insuffisant,1,30,close_low_diskspace=500M
Puisque je suppose que vous n’avez pas crée d’utilisateur nommé noobunbox, voici une petite commande pour remplacer mon nom d’utilisateur par le votre (ici votre-utilisateur)
sed -i -e 's/noobunbox/votre-utilisateur/g' /home/votre-utilisateur/.rtorrent.rc
Maintenant appliquons les permissions nécessaires
chown --recursive noobunbox:noobunbox /home/noobunbox chown root:root /home/noobunbox chmod 755 /home/noobunbox
L’etape suivante dépend du programme utilisé comme serveur web, NGinx ou apache2. Vous trouverez ci-dessous les manipulations à effectuer
Sous NGinx
nano /etc/nginx/sites-enabled/seedbox
Et ajoutez le bloc suivant (le port de la variable scgi_pass
pour l’utilisateur doit être le même que celui indiqué dans le fichier .rtorrent.rc
)
location /NOOBUNBOX { include scgi_params; scgi_pass 127.0.0.1:5001; auth_basic "Restricted Area"; auth_basic_user_file "/etc/nginx/auth/seedbox_auth noobunbox"; }
Puisque nous avons configuré NGinx pour demander un mot de passe lors de l’accès a rutorrent pour l’utilisateur noobunbox, configurons un mot de passe pour cet utilisateur.
htpasswd -c -B /etc/nginx/auth/seedbox_auth noobunbox
Protégeons un minimum ce fichier
chmod 600 /etc/nginx/auth/seedbox_auth chown www-data:www-data /etc/nginx/auth/*
Créons maintenant un fichier de configuration rutorrent pour l’utilisateur noobunbox
mkdir /var/www/html/rutorrent/conf/users/noobunbox nano /var/www/html/rutorrent/conf/users/noobunbox/config.php
Que nous configurons comme ci-dessous (encore une fois, le port scgi doit être le même que celui indiqué dans le fichier .rtorrent.rc et dans la configuration du vhost NGinx)
<?php $pathToExternals['curl'] = '/usr/bin/curl'; $topDirectory = '/home/noobunbox'; $scgi_port = 5001; $scgi_host = '127.0.0.1'; $XMLRPCMountPoint = '/NOOBUNBOX';
Corrigeons les permissions et redémarrons NGinx
chown -R www-data:www-data /var/www/html service nginx restart
Sous Apache2
Commençons par éditer le fichier principal de la configuration d’apache2
nano /etc/apache2/apache2.conf
Ajoutez à la fin du fichier la configuration suivante (le port SCGIMount doit correspondre à celui de votre utilisateur)
ServerName localhost SCGIMount /RPC1 127.0.0.1:5001
Puisque nous avons configuré Apache2 pour demander un mot de passe lors de l’accès a rutorrent, configurons un mot de passe pour notre utilisateur noobunbox. (seedbox correspond à la variable AuthName
utilisé dans notre virtualhost)
htdigest -c /etc/apache2/auth/seedbox_auth seedbox noobunbox
Créons maintenant un fichier de configuration rutorrent pour l’utilisateur noobunbox
mkdir /var/www/html/rutorrent/conf/users/noobunbox nano /var/www/html/rutorrent/conf/users/noobunbox/config.php
Que nous configurons comme ci-dessous (encore une fois, le port scgi doit être le même que celui indiqué dans le fichier .rtorrent.rc et dans la configuration générale d’Apache2)
<?php $pathToExternals['curl'] = '/usr/bin/curl'; $topDirectory = '/home/noobunbox'; $scgi_port = 5001; $scgi_host = '127.0.0.1'; $XMLRPCMountPoint = '/RPC1';
Corrigeons les permissions et redémarrons Apache2
chown -R www-data:www-data /var/www/html service apache2 restart
Installer une seedbox : Configuration du Service rTorrent
Nous allons maintenant créer et configurer un script afin que rtorrent soit lancé par cet utilisateur
cd /etc/init.d/ touch noobunbox-rtorrent chmod +x noobunbox-rtorrent
Configurons le script
nano noobunbox-rtorrent
Remplacez noobunbox par votre nom d’utilisateur
#!/usr/bin/env bash # Dépendance : screen, killall et rtorrent ### BEGIN INIT INFO # Provides: <username>-rtorrent # Required-Start: $syslog $network # Required-Stop: $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Start-Stop rtorrent user session ### END INIT INFO ## Début configuration ## user="noobunbox" ## Fin configuration ## rt_start() { su --command="screen -dmS ${user}-rtorrent rtorrent" "${user}" } rt_stop() { killall --user "${user}" screen } case "$1" in start) echo "Starting rtorrent..."; rt_start ;; stop) echo "Stopping rtorrent..."; rt_stop ;; restart) echo "Restart rtorrent..."; rt_stop; sleep 1; rt_start ;; *) echo "Usage: $0 {start|stop|restart}"; exit 1 ;; esac exit 0
Nous souhaitons que ce script soit exécuté au démarrage du serveur
update-rc.d noobunbox-rtorrent defaults
La configuration de votre premier utilisateur est terminée. Si vous souhaitez ajouter un second utilisateur vous devrez répéter cette manipulation. N’oubliez pas que chaque utilisateur doit avoir un port scgi différent !
Il ne vous reste plus qu’à lancer votre seedbox via la commande suivante
service noobunbox-rtorrent start
Maintenant connectez-vous sur l’ip de votre seedbox (en HTTPS). Tout devrait fonctionner.
Merci à Francois pour la relecture 🙂