Création d’une seedbox : ruTorrent et Plex sous Docker
Le changement de serveurs dédiés est une pratique devenue courante. Au fil du temps, nous nous adaptons aux offres du marché car elles évoluent et sont généralement plus intéressantes d’une année à l’autre. La tendance est de payer toujours moins cher tout en gardant une configuration matérielle de bonne facture. La seedbox se veut toujours moins chère pour plus de puissance.
Mais quand survient le moment de la première configuration, on se rend vite compte qu’elle est liée à son environnement et n’est pas facilement modifiable. Alors faut-il la recréer à chaque fois que l’on doit changer de serveur ? Le but de cet article est d’utiliser la puissance de Docker afin de résoudre cette problématique.
Rappelons que la configuration d’une seedbox contient généralement deux services :
- Le serveur de téléchargement d’un côté (exemple : ruTorrent, Deluge, Transmission…).
- Le serveur de streaming de l’autre (exemple : Plex, Kodi…).
Découvrez par vous-même :
- Docker avec : dockertorrent et pms-docker.
- La préparation de l’environnement sous Debian 8.
- L’exécution et la configuration de dockertorrent.
- L’exécution et la configuration de pms-docker.
Docker avec dockertorrent et pms-docker
Docker isole les processus dans des containers, il est de loin la meilleure solution pour déployer plus rapidement et facilement ses projets. Il garantit aussi une sécurité accrue ainsi qu’une stabilité et une évolution sans précédent. Il se base entièrement sur la puissance de Linux. Pour l’article suivant, je vais utiliser deux projets Docker existants :
- Le premier est nommé docktorrent de l’auteur kfei qui contient rTorrent avec ruTorrent.
- Le second est pms-docker de Plex lui même qui contient le serveur PMS (PlexMediaServer).
La préparation de l’environnement sous Debian 7
Avant de démarrer, l’installation des pré-requis est indispensable, il faudra disposer du dépôt wheezy-backports :
nano /etc/apt/sources.list
Ajoutez le dépôt suivant :
deb http://http.debian.net/debian wheezy-backports main
Mettez à jour les paquets puis installer l’image et redémarrez le serveur :
apt-get update && apt-get install -t wheezy-backports linux-image-amd64 && reboot
Après le redémarrage du système, préparez-vous à l’installation de docker :
apt-get install curl git && curl -sSL https://get.docker.com/ | sh
Créez deux répertoires afin d’accueillir l’emplacement des données de nos deux utilisateurs :
mkdir /home/seedbox/user1 && mkdir /home/seedbox/user2
L’exécution et la configuration de docktorrent
Cloner le projet docktorrent avec git :
git clone https://github.com/kfei/docktorrent
Rendez-vous dans l’archive :
cd docktorrent
A ce moment, modifiez le fichier de configuration de rtorrent :
nano config/rtorrent/.rtorrent.rc
Personnellement, je commente les lignes 23 et 24, car je ne souhaite pas déplacer mes fichiers après le téléchargement :
#system.method.insert = d.get_finished_dir,simple,"cat=/rtorrent/finished/,$d.get_custom1="
#system.method.set_key = event.download.finished,move_complete,"d.set_directory=$d.get_finished_dir=;execute=mkdir,-p,$d.get_finished_dir=;execute=mv,-u,$d.get_base_path=,$d.get_finished_dir="
Rendez-vous dans le fichier Dockerfile et modifions le couple d’identifiants :
RUN htpasswd -cb /usr/share/nginx/html/rutorrent/.htpasswd user1 passworduser1
Avant de lancer la compilation, une erreur apparaît depuis décembre 2016 lors la compilation du conteneur :
xmlrpc_libxml2.c: In function 'xml_init':
xmlrpc_libxml2.c:61:29: warning: unused parameter 'envP' [-Wunused-parameter]
xml_init(xmlrpc_env * const envP) {
^
xmlrpc_libxml2.c: At top level:
xmlrpc_libxml2.c:430:20: error: unknown type name 'xmlParserCtx'
removeDocSizeLimit(xmlParserCtx * const parserP ATTR_UNUSED) {
^
xmlrpc_libxml2.c:455:14: error: unknown type name 'xmlParserCtx'
xmlParserCtx ** const parserPP) {
^
xmlrpc_libxml2.c: In function 'xml_parse':
xmlrpc_libxml2.c:491:5: warning: implicit declaration of function 'createParser' [-Wimplicit-function-declaration]
createParser(envP, &context, &parserP);
^
make[1]: *** [xmlrpc_libxml2.o] Error 1
/usr/local/src/xmlrpc-c/common.mk:336: recipe for target 'xmlrpc_libxml2.o' failed
make[1]: Leaving directory '/usr/local/src/xmlrpc-c/src'
/usr/local/src/xmlrpc-c/common.mk:375: recipe for target 'src/all' failed
make: *** [src/all] Error 2
The command '/bin/sh -c build_deps="automake build-essential ca-certificates libc-ares-dev libcppunit-dev libtool"; build_deps="${build_deps} libssl-dev libxml2-dev libncurses5-dev pkg-config subversion wget"; set -x && apt-get update && apt-get install -q -y --no-install-recommends ${build_deps} && wget http://curl.haxx.se/download/curl-7.39.0.tar.gz && tar xzvfp curl-7.39.0.tar.gz && cd curl-7.39.0 && ./configure --enable-ares --enable-tls-srp --enable-gnu-tls --with-zlib --with-ssl && make && make install && cd .. && rm -rf curl-* && ldconfig && svn --trust-server-cert checkout https://svn.code.sf.net/p/xmlrpc-c/code/stable/ xmlrpc-c && cd xmlrpc-c && ./configure --enable-libxml2-backend --disable-abyss-server --disable-cgi-server && make && make install && cd .. && rm -rf xmlrpc-c && ldconfig && wget -O libtorrent-$VER_LIBTORRENT.tar.gz https://github.com/rakshasa/libtorrent/archive/$VER_LIBTORRENT.tar.gz && tar xzf libtorrent-$VER_LIBTORRENT.tar.gz && cd libtorrent-$VER_LIBTORRENT && ./autogen.sh && ./configure --with-posix-fallocate && make && make install && cd .. && rm -rf libtorrent-* && ldconfig && wget -O rtorrent-$VER_RTORRENT.tar.gz https://github.com/rakshasa/rtorrent/archive/$VER_RTORRENT.tar.gz && tar xzf rtorrent-$VER_RTORRENT.tar.gz && cd rtorrent-$VER_RTORRENT && ./autogen.sh && ./configure --with-xmlrpc-c --with-ncurses && make && make install && cd .. && rm -rf rtorrent-* && ldconfig && mkdir -p /usr/share/nginx/html && cd /usr/share/nginx/html && mkdir rutorrent && curl -L -O https://github.com/Novik/ruTorrent/archive/master.tar.gz && tar xzvf master.tar.gz -C rutorrent --strip-components 1 && rm -rf *.tar.gz && apt-get purge -y --auto-remove ${build_deps} && apt-get autoremove -y' returned a non-zero code: 2
Il suffit de remplacer dans le Dockerfile, l’URL svn de la ligne 24 :
svn --trust-server-cert checkout https://svn.code.sf.net/p/xmlrpc-c/code/super_stable/ xmlrpc-c &&
Lancez le build de docktorrent :
docker build -t docktorrentuser1 .
Après compilation, exécutez docktorrentuser1 :
docker run -it
-p 80:80 -p 45566:45566 -p 9527:9527/udp
--dns 8.8.8.8
-v /home/seedbox/user1:/rtorrent
-e UPLOAD_RATE=1024
--name docktorrentuser1
-d
docktorrentuser1
Pour ajoutez un autre utilisateur il faut reproduire la manipulation précédente pour nos utilisateurs :
nano config/rtorrent/.rtorrent.rc
Modifiez le couple d’identifiants pour le nouvel utilisateur2 :
RUN htpasswd -cb /usr/share/nginx/html/rutorrent/.htpasswd user2 passworduser2
Recréez le build avec un nouveau nom :
docker build -t docktorrentuser2 .
Lancez le docker pour user2 sur le port 81 de notre hôte en modifiant les ports :
docker run -it
-p 81:80 -p 45567:45566 -p 9528:9527/udp
--dns 8.8.8.8
-v /home/seedbox/user2:/rtorrent
-e UPLOAD_RATE=1024
--name docktorrentuser2
-d
docktorrentuser2
Dans mon cas, je monte le dossier downloads dans celui des utilisateurs avec la commande suivante :
mount --bind /home/seedbox/downloads/ /home/seedbox/user1/downloads
L’exécution et la configuration de pms-docker
Téléchargez l’image du projet (:latest par défaut)
docker pull plexinc/pms-docker
Dans mon cas, je suis Premium Plex Lifetime depuis 2013 j’utilise donc le tag : plexpass :
docker pull plexinc/pms-docker:plexpas
La différence réside dans le fait qu’à chaque redémarrage de mon conteneneur Plex (:plexpass) celui-ci se mettra à jour automatiquement si une version plus récente est disponible. Quant à la version « :latest », celle-ci ne se mettra pas à jour mais la version « :public » fait apparement la même chose.
Executer le Docker Plex de la façon suivante :
docker run --name plex -p 32400:32400/tcp -e TZ="Europe/Paris" -e PLEX_CLAIM="claim-veFRSmSwMgpQEV1USsjE"-e -h plex.kassianoff.fr -v /home/seedbox/plex_config/:/config -v /home/seedbox/downloads/:/data plexinc/pms-docker:plexpass
Rendez-vous à l’adresse suivante : https://plex.tv/claim car dans les paramètres il faut retenir qu’un token est nécessaire pour authentifier votre conteneur :
PLEX_CLAIM=« claim-veFRSmSwMgpQEV1USsjE »
Pour finaliser la configuration du Serveur Plex, connectez-vous en SSH au serveur exemple suivant : Accès « PMS » sans interface graphique ! Je vous invite désormais à vérifier que vos conteneurs docker fonctionnent comme ceci :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8afb950273f4 docktorrentuser1:latest "/usr/local/bin/dock 2 days ago Up 2 days 0.0.0.0:80->80/tcp, 0.0.0.0:9527->9527/udp, 9527/tcp, 0.0.0.0:45566->45566/tcp docktorrentuser1
b6d9446d42d1 docktorrentuser2:latest "/usr/local/bin/dock 2 days ago Up 2 days 9527/tcp, 0.0.0.0:81->80/tcp, 0.0.0.0:9528->9527/udp, 0.0.0.0:45567->45566/tcp docktorrentuser2
b94927f31cd4 plex:plexpass
"/start.sh" 2 days ago Up 2 days 0.0.0.0:32400->32400/tcp plexseedbox
Pour une meilleure sécurité, utilisez un reverse proxy vers vos dockers comme par exemple Pound.
Voici ma configuration pour deux sous-domaines user1 et user2 vers l’interface bridge de Docker :
ListenHTTPS
Address 62.XXX.XXX.XXX
Port 443
Cert "/etc/pound/ssl/www/user1.pem"
Cert "/etc/pound/ssl/www/user2.pem"
AddHeader "X-Forwarded-Proto: https"
## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
xHTTP 2
Service
HeadRequire "Host: .*user1.kassianoff.fr.*"
BackEnd
Address 172.17.42.1
Port 80
End
End
Service
HeadRequire "Host: .*user2.kassianoff.fr.*"
BackEnd
Address 172.17.42.1
Port 81
End
End
End
Pour générer un certificat SSL autosigné : http://doc.ubuntu-fr.org/tutoriel/comment_creer_un_certificat_ssl.