[{"data":1,"prerenderedAt":1705},["ShallowReactive",2],{"blog-\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker":3,"blog-\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker-surround":1643,"blog-\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker-certifications":1704},{"id":4,"title":5,"body":6,"categories":1631,"cover":1632,"cover_contain":1633,"credly_badge_id":1631,"date":1634,"description":1635,"extension":1636,"meta":1637,"navigation":1633,"path":1638,"related_certifications":1631,"seo":1639,"slug":1640,"stem":1641,"__hash__":1642},"blog\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker.md","Création d’une seedbox : ruTorrent et Plex sous Docker",{"type":7,"value":8,"toc":1620},"minimark",[9,14,18,29,32,35,38,41,51,59,64,79,83,86,94,101,105,108,131,134,153,156,192,195,228,231,252,256,267,282,285,299,305,317,320,337,340,351,354,739,742,767,773,794,797,891,894,904,907,916,919,937,940,1021,1024,1043,1047,1054,1069,1076,1079,1093,1100,1103,1174,1184,1190,1215,1227,1379,1402,1572,1579,1609,1613,1616],[10,11,13],"h2",{"id":12},"cas-dusage-concret","Cas d'usage concret",[15,16,17],"p",{},"Vous voulez une seedbox prête à l'emploi sans complexité : voici comment déployer ruTorrent et Plex ensemble sous Docker.",[15,19,20,24,25],{},[21,22,23],"strong",{},"Mise à jour de l’article le 5 mars 2017"," ",[26,27,28],"em",{},": modification script ruTorrent et modification du projet Plex Docker",[10,30,5],{"id":31},"création-dune-seedbox-rutorrent-et-plex-sous-docker",[15,33,34],{},"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.",[15,36,37],{},"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.",[15,39,40],{},"Rappelons que la configuration d’une seedbox contient généralement deux services :",[42,43,44,48],"ul",{},[45,46,47],"li",{},"Le serveur de téléchargement d’un côté (exemple : ruTorrent, Deluge, Transmission…).",[45,49,50],{},"Le serveur de streaming de l’autre (exemple : Plex, Kodi…).",[15,52,53,24,56],{},[21,54,55],{},"Info :",[26,57,58],{},"Un serveur SFTP ou bien FTPES peut aussi être mis en place, mais je ne l’évoquerai pas dans mon article.",[60,61,63],"h3",{"id":62},"découvrez-par-vous-même","Découvrez par vous-même :",[65,66,67,70,73,76],"ol",{},[45,68,69],{},"Docker avec : dockertorrent et pms-docker.",[45,71,72],{},"La préparation de l’environnement sous Debian 8.",[45,74,75],{},"L’exécution et la configuration de dockertorrent.",[45,77,78],{},"L’exécution et la configuration de pms-docker.",[10,80,82],{"id":81},"docker-avec-dockertorrent-et-pms-docker","Docker avec dockertorrent et pms-docker",[15,84,85],{},"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 :",[65,87,88,91],{},[45,89,90],{},"Le premier est nommé docktorrent de l’auteur kfei qui contient rTorrent avec ruTorrent.",[45,92,93],{},"Le second est pms-docker de Plex lui même qui contient le serveur PMS (PlexMediaServer).",[15,95,96,24,98],{},[21,97,55],{},[26,99,100],{},"Nous serons désormais capables de déployer une seedbox en 5 minutes après notre première compilation. L’article suivant est issu de projets ouverts sur le web, je décline toute responsabilité en cas de mauvaise usages.",[10,102,104],{"id":103},"la-préparation-de-lenvironnement-sous-debian-7","La préparation de l’environnement sous Debian 7",[15,106,107],{},"Avant de démarrer, l’installation des pré-requis est indispensable, il faudra disposer du dépôt wheezy-backports :",[109,110,115],"pre",{"className":111,"code":112,"language":113,"meta":114,"style":114},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","nano \u002Fetc\u002Fapt\u002Fsources.list\n","bash","",[116,117,118],"code",{"__ignoreMap":114},[119,120,123,127],"span",{"class":121,"line":122},"line",1,[119,124,126],{"class":125},"sBMFI","nano",[119,128,130],{"class":129},"sfazB"," \u002Fetc\u002Fapt\u002Fsources.list\n",[15,132,133],{},"Ajoutez  le dépôt suivant :",[109,135,137],{"className":111,"code":136,"language":113,"meta":114,"style":114},"deb http:\u002F\u002Fhttp.debian.net\u002Fdebian wheezy-backports main\n",[116,138,139],{"__ignoreMap":114},[119,140,141,144,147,150],{"class":121,"line":122},[119,142,143],{"class":125},"deb",[119,145,146],{"class":129}," http:\u002F\u002Fhttp.debian.net\u002Fdebian",[119,148,149],{"class":129}," wheezy-backports",[119,151,152],{"class":129}," main\n",[15,154,155],{},"Mettez à jour les paquets puis installer l’image et redémarrez le serveur :",[109,157,159],{"className":111,"code":158,"language":113,"meta":114,"style":114},"apt-get update && apt-get install -t wheezy-backports linux-image-amd64 && reboot\n",[116,160,161],{"__ignoreMap":114},[119,162,163,166,169,173,176,179,182,184,187,189],{"class":121,"line":122},[119,164,165],{"class":125},"apt-get",[119,167,168],{"class":129}," update",[119,170,172],{"class":171},"sMK4o"," &&",[119,174,175],{"class":125}," apt-get",[119,177,178],{"class":129}," install",[119,180,181],{"class":129}," -t",[119,183,149],{"class":129},[119,185,186],{"class":129}," linux-image-amd64",[119,188,172],{"class":171},[119,190,191],{"class":125}," reboot\n",[15,193,194],{},"Après le redémarrage du système, préparez-vous à l’installation de docker :",[109,196,198],{"className":111,"code":197,"language":113,"meta":114,"style":114},"apt-get install curl git && curl -sSL https:\u002F\u002Fget.docker.com\u002F | sh\n",[116,199,200],{"__ignoreMap":114},[119,201,202,204,206,209,212,214,216,219,222,225],{"class":121,"line":122},[119,203,165],{"class":125},[119,205,178],{"class":129},[119,207,208],{"class":129}," curl",[119,210,211],{"class":129}," git",[119,213,172],{"class":171},[119,215,208],{"class":125},[119,217,218],{"class":129}," -sSL",[119,220,221],{"class":129}," https:\u002F\u002Fget.docker.com\u002F",[119,223,224],{"class":171}," |",[119,226,227],{"class":125}," sh\n",[15,229,230],{},"Créez deux répertoires afin d’accueillir l’emplacement des données de nos deux utilisateurs :",[109,232,234],{"className":111,"code":233,"language":113,"meta":114,"style":114},"mkdir \u002Fhome\u002Fseedbox\u002Fuser1 && mkdir \u002Fhome\u002Fseedbox\u002Fuser2\n",[116,235,236],{"__ignoreMap":114},[119,237,238,241,244,246,249],{"class":121,"line":122},[119,239,240],{"class":125},"mkdir",[119,242,243],{"class":129}," \u002Fhome\u002Fseedbox\u002Fuser1",[119,245,172],{"class":171},[119,247,248],{"class":125}," mkdir",[119,250,251],{"class":129}," \u002Fhome\u002Fseedbox\u002Fuser2\n",[10,253,255],{"id":254},"lexécution-et-la-configuration-de-docktorrent","L’exécution et la configuration de docktorrent",[15,257,258,259,262,263,266],{},"Cloner le ",[21,260,261],{},"projet docktorrent"," avec ",[21,264,265],{},"git"," :",[109,268,270],{"className":111,"code":269,"language":113,"meta":114,"style":114},"git clone https:\u002F\u002Fgithub.com\u002Fkfei\u002Fdocktorrent\n",[116,271,272],{"__ignoreMap":114},[119,273,274,276,279],{"class":121,"line":122},[119,275,265],{"class":125},[119,277,278],{"class":129}," clone",[119,280,281],{"class":129}," https:\u002F\u002Fgithub.com\u002Fkfei\u002Fdocktorrent\n",[15,283,284],{},"Rendez-vous dans l’archive :",[109,286,288],{"className":111,"code":287,"language":113,"meta":114,"style":114},"cd docktorrent\n",[116,289,290],{"__ignoreMap":114},[119,291,292,296],{"class":121,"line":122},[119,293,295],{"class":294},"s2Zo4","cd",[119,297,298],{"class":129}," docktorrent\n",[15,300,301,302,266],{},"A ce moment, modifiez le fichier de ",[21,303,304],{},"configuration de rtorrent",[109,306,308],{"className":111,"code":307,"language":113,"meta":114,"style":114},"nano config\u002Frtorrent\u002F.rtorrent.rc\n",[116,309,310],{"__ignoreMap":114},[119,311,312,314],{"class":121,"line":122},[119,313,126],{"class":125},[119,315,316],{"class":129}," config\u002Frtorrent\u002F.rtorrent.rc\n",[15,318,319],{},"Personnellement, je commente les lignes 23 et 24, car je ne souhaite pas déplacer mes fichiers après le téléchargement :",[109,321,323],{"className":111,"code":322,"language":113,"meta":114,"style":114},"#system.method.insert = d.get_finished_dir,simple,\"cat=\u002Frtorrent\u002Ffinished\u002F,$d.get_custom1=\"\n#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=\"\n",[116,324,325,331],{"__ignoreMap":114},[119,326,327],{"class":121,"line":122},[119,328,330],{"class":329},"sHwdD","#system.method.insert = d.get_finished_dir,simple,\"cat=\u002Frtorrent\u002Ffinished\u002F,$d.get_custom1=\"\n",[119,332,334],{"class":121,"line":333},2,[119,335,336],{"class":329},"#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=\"\n",[15,338,339],{},"Rendez-vous dans le fichier Dockerfile et modifions le couple d’identifiants :",[109,341,345],{"className":342,"code":343,"language":344,"meta":114,"style":114},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","RUN htpasswd -cb \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Frutorrent\u002F.htpasswd user1 passworduser1\n","dockerfile",[116,346,347],{"__ignoreMap":114},[119,348,349],{"class":121,"line":122},[119,350,343],{},[15,352,353],{},"Avant de lancer la compilation, une erreur apparaît depuis décembre 2016 lors la compilation du conteneur :",[109,355,357],{"className":111,"code":356,"language":113,"meta":114,"style":114},"xmlrpc_libxml2.c: In function 'xml_init':\nxmlrpc_libxml2.c:61:29: warning: unused parameter 'envP' [-Wunused-parameter]\n xml_init(xmlrpc_env * const envP) {\n                             ^\nxmlrpc_libxml2.c: At top level:\nxmlrpc_libxml2.c:430:20: error: unknown type name 'xmlParserCtx'\n removeDocSizeLimit(xmlParserCtx * const parserP ATTR_UNUSED) {\n                    ^\nxmlrpc_libxml2.c:455:14: error: unknown type name 'xmlParserCtx'\n              xmlParserCtx ** const parserPP) {\n              ^\nxmlrpc_libxml2.c: In function 'xml_parse':\nxmlrpc_libxml2.c:491:5: warning: implicit declaration of function 'createParser' [-Wimplicit-function-declaration]\n     createParser(envP, &context, &parserP);\n     ^\nmake[1]: *** [xmlrpc_libxml2.o] Error 1\n\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:336: recipe for target 'xmlrpc_libxml2.o' failed\nmake[1]: Leaving directory '\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fsrc'\n\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:375: recipe for target 'src\u002Fall' failed\nmake: *** [src\u002Fall] Error 2\nThe command '\u002Fbin\u002Fsh -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:\u002F\u002Fcurl.haxx.se\u002Fdownload\u002Fcurl-7.39.0.tar.gz &&     tar xzvfp curl-7.39.0.tar.gz &&     cd curl-7.39.0 &&     .\u002Fconfigure --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:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fstable\u002F xmlrpc-c &&     cd xmlrpc-c &&     .\u002Fconfigure --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:\u002F\u002Fgithub.com\u002Frakshasa\u002Flibtorrent\u002Farchive\u002F$VER_LIBTORRENT.tar.gz &&     tar xzf libtorrent-$VER_LIBTORRENT.tar.gz &&     cd libtorrent-$VER_LIBTORRENT &&     .\u002Fautogen.sh &&     .\u002Fconfigure --with-posix-fallocate &&     make &&     make install &&     cd .. &&     rm -rf libtorrent-* &&     ldconfig &&     wget -O rtorrent-$VER_RTORRENT.tar.gz https:\u002F\u002Fgithub.com\u002Frakshasa\u002Frtorrent\u002Farchive\u002F$VER_RTORRENT.tar.gz &&     tar xzf rtorrent-$VER_RTORRENT.tar.gz &&     cd rtorrent-$VER_RTORRENT &&     .\u002Fautogen.sh &&     .\u002Fconfigure --with-xmlrpc-c --with-ncurses &&     make &&     make install &&     cd .. &&     rm -rf rtorrent-* &&     ldconfig &&     mkdir -p \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml &&     cd \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml &&     mkdir rutorrent &&     curl -L -O https:\u002F\u002Fgithub.com\u002FNovik\u002FruTorrent\u002Farchive\u002Fmaster.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\n",[116,358,359,382,407,428,434,448,474,494,500,520,538,544,562,591,614,620,632,657,675,696,707],{"__ignoreMap":114},[119,360,361,364,367,370,373,376,379],{"class":121,"line":122},[119,362,363],{"class":125},"xmlrpc_libxml2.c:",[119,365,366],{"class":129}," In",[119,368,369],{"class":129}," function",[119,371,372],{"class":171}," '",[119,374,375],{"class":129},"xml_init",[119,377,378],{"class":171},"'",[119,380,381],{"class":129},":\n",[119,383,384,387,390,393,396,398,401,403],{"class":121,"line":333},[119,385,386],{"class":125},"xmlrpc_libxml2.c:61:29:",[119,388,389],{"class":129}," warning:",[119,391,392],{"class":129}," unused",[119,394,395],{"class":129}," parameter",[119,397,372],{"class":171},[119,399,400],{"class":129},"envP",[119,402,378],{"class":171},[119,404,406],{"class":405},"sTEyZ"," [-Wunused-parameter]\n",[119,408,410,413,416,419,422,425],{"class":121,"line":409},3,[119,411,412],{"class":125}," xml_init(xmlrpc_env",[119,414,415],{"class":405}," *",[119,417,418],{"class":129}," const",[119,420,421],{"class":129}," envP",[119,423,424],{"class":405},") ",[119,426,427],{"class":171},"{\n",[119,429,431],{"class":121,"line":430},4,[119,432,433],{"class":125},"                             ^\n",[119,435,437,439,442,445],{"class":121,"line":436},5,[119,438,363],{"class":125},[119,440,441],{"class":129}," At",[119,443,444],{"class":129}," top",[119,446,447],{"class":129}," level:\n",[119,449,451,454,457,460,463,466,468,471],{"class":121,"line":450},6,[119,452,453],{"class":125},"xmlrpc_libxml2.c:430:20:",[119,455,456],{"class":129}," error:",[119,458,459],{"class":129}," unknown",[119,461,462],{"class":129}," type",[119,464,465],{"class":129}," name",[119,467,372],{"class":171},[119,469,470],{"class":129},"xmlParserCtx",[119,472,473],{"class":171},"'\n",[119,475,477,480,482,484,487,490,492],{"class":121,"line":476},7,[119,478,479],{"class":125}," removeDocSizeLimit(xmlParserCtx",[119,481,415],{"class":405},[119,483,418],{"class":129},[119,485,486],{"class":129}," parserP",[119,488,489],{"class":129}," ATTR_UNUSED",[119,491,424],{"class":405},[119,493,427],{"class":171},[119,495,497],{"class":121,"line":496},8,[119,498,499],{"class":125},"                    ^\n",[119,501,503,506,508,510,512,514,516,518],{"class":121,"line":502},9,[119,504,505],{"class":125},"xmlrpc_libxml2.c:455:14:",[119,507,456],{"class":129},[119,509,459],{"class":129},[119,511,462],{"class":129},[119,513,465],{"class":129},[119,515,372],{"class":171},[119,517,470],{"class":129},[119,519,473],{"class":171},[119,521,523,526,529,531,534,536],{"class":121,"line":522},10,[119,524,525],{"class":125},"              xmlParserCtx",[119,527,528],{"class":405}," **",[119,530,418],{"class":129},[119,532,533],{"class":129}," parserPP",[119,535,424],{"class":405},[119,537,427],{"class":171},[119,539,541],{"class":121,"line":540},11,[119,542,543],{"class":125},"              ^\n",[119,545,547,549,551,553,555,558,560],{"class":121,"line":546},12,[119,548,363],{"class":125},[119,550,366],{"class":129},[119,552,369],{"class":129},[119,554,372],{"class":171},[119,556,557],{"class":129},"xml_parse",[119,559,378],{"class":171},[119,561,381],{"class":129},[119,563,565,568,570,573,576,579,581,583,586,588],{"class":121,"line":564},13,[119,566,567],{"class":125},"xmlrpc_libxml2.c:491:5:",[119,569,389],{"class":129},[119,571,572],{"class":129}," implicit",[119,574,575],{"class":129}," declaration",[119,577,578],{"class":129}," of",[119,580,369],{"class":129},[119,582,372],{"class":171},[119,584,585],{"class":129},"createParser",[119,587,378],{"class":171},[119,589,590],{"class":405}," [-Wimplicit-function-declaration]\n",[119,592,594,597,600,603,605,608,611],{"class":121,"line":593},14,[119,595,596],{"class":125},"     createParser(envP,",[119,598,599],{"class":171}," &",[119,601,602],{"class":125},"context,",[119,604,599],{"class":171},[119,606,607],{"class":125},"parserP",[119,609,610],{"class":405},")",[119,612,613],{"class":171},";\n",[119,615,617],{"class":121,"line":616},15,[119,618,619],{"class":125},"     ^\n",[119,621,623,626,629],{"class":121,"line":622},16,[119,624,625],{"class":125},"make[1]:",[119,627,628],{"class":405}," ***",[119,630,631],{"class":405}," [xmlrpc_libxml2.o] Error 1\n",[119,633,635,638,641,644,647,649,652,654],{"class":121,"line":634},17,[119,636,637],{"class":125},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:336:",[119,639,640],{"class":129}," recipe",[119,642,643],{"class":129}," for",[119,645,646],{"class":129}," target",[119,648,372],{"class":171},[119,650,651],{"class":129},"xmlrpc_libxml2.o",[119,653,378],{"class":171},[119,655,656],{"class":129}," failed\n",[119,658,660,662,665,668,670,673],{"class":121,"line":659},18,[119,661,625],{"class":125},[119,663,664],{"class":129}," Leaving",[119,666,667],{"class":129}," directory",[119,669,372],{"class":171},[119,671,672],{"class":129},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fsrc",[119,674,473],{"class":171},[119,676,678,681,683,685,687,689,692,694],{"class":121,"line":677},19,[119,679,680],{"class":125},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:375:",[119,682,640],{"class":129},[119,684,643],{"class":129},[119,686,646],{"class":129},[119,688,372],{"class":171},[119,690,691],{"class":129},"src\u002Fall",[119,693,378],{"class":171},[119,695,656],{"class":129},[119,697,699,702,704],{"class":121,"line":698},20,[119,700,701],{"class":125},"make:",[119,703,628],{"class":405},[119,705,706],{"class":405}," [src\u002Fall] Error 2\n",[119,708,710,713,716,718,721,723,726,729,732,735],{"class":121,"line":709},21,[119,711,712],{"class":125},"The",[119,714,715],{"class":129}," command",[119,717,372],{"class":171},[119,719,720],{"class":129},"\u002Fbin\u002Fsh -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:\u002F\u002Fcurl.haxx.se\u002Fdownload\u002Fcurl-7.39.0.tar.gz &&     tar xzvfp curl-7.39.0.tar.gz &&     cd curl-7.39.0 &&     .\u002Fconfigure --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:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fstable\u002F xmlrpc-c &&     cd xmlrpc-c &&     .\u002Fconfigure --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:\u002F\u002Fgithub.com\u002Frakshasa\u002Flibtorrent\u002Farchive\u002F$VER_LIBTORRENT.tar.gz &&     tar xzf libtorrent-$VER_LIBTORRENT.tar.gz &&     cd libtorrent-$VER_LIBTORRENT &&     .\u002Fautogen.sh &&     .\u002Fconfigure --with-posix-fallocate &&     make &&     make install &&     cd .. &&     rm -rf libtorrent-* &&     ldconfig &&     wget -O rtorrent-$VER_RTORRENT.tar.gz https:\u002F\u002Fgithub.com\u002Frakshasa\u002Frtorrent\u002Farchive\u002F$VER_RTORRENT.tar.gz &&     tar xzf rtorrent-$VER_RTORRENT.tar.gz &&     cd rtorrent-$VER_RTORRENT &&     .\u002Fautogen.sh &&     .\u002Fconfigure --with-xmlrpc-c --with-ncurses &&     make &&     make install &&     cd .. &&     rm -rf rtorrent-* &&     ldconfig &&     mkdir -p \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml &&     cd \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml &&     mkdir rutorrent &&     curl -L -O https:\u002F\u002Fgithub.com\u002FNovik\u002FruTorrent\u002Farchive\u002Fmaster.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",[119,722,378],{"class":171},[119,724,725],{"class":129}," returned",[119,727,728],{"class":129}," a",[119,730,731],{"class":129}," non-zero",[119,733,734],{"class":129}," code:",[119,736,738],{"class":737},"sbssI"," 2\n",[15,740,741],{},"Il suffit de remplacer dans le Dockerfile, l’URL svn de la ligne 24   :",[109,743,745],{"className":111,"code":744,"language":113,"meta":114,"style":114},"svn --trust-server-cert checkout https:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fsuper_stable\u002F xmlrpc-c &&\n",[116,746,747],{"__ignoreMap":114},[119,748,749,752,755,758,761,764],{"class":121,"line":122},[119,750,751],{"class":125},"svn",[119,753,754],{"class":129}," --trust-server-cert",[119,756,757],{"class":129}," checkout",[119,759,760],{"class":129}," https:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fsuper_stable\u002F",[119,762,763],{"class":129}," xmlrpc-c",[119,765,766],{"class":171}," &&\n",[15,768,769,770,266],{},"Lancez le ",[21,771,772],{},"build de docktorrent",[109,774,776],{"className":111,"code":775,"language":113,"meta":114,"style":114},"docker build -t docktorrentuser1 .\n",[116,777,778],{"__ignoreMap":114},[119,779,780,783,786,788,791],{"class":121,"line":122},[119,781,782],{"class":125},"docker",[119,784,785],{"class":129}," build",[119,787,181],{"class":129},[119,789,790],{"class":129}," docktorrentuser1",[119,792,793],{"class":129}," .\n",[15,795,796],{},"Après compilation, exécutez docktorrentuser1 :",[109,798,800],{"className":111,"code":799,"language":113,"meta":114,"style":114},"    docker run -it \n    -p 80:80 -p 45566:45566 -p 9527:9527\u002Fudp \n    --dns 8.8.8.8 \n    -v \u002Fhome\u002Fseedbox\u002Fuser1:\u002Frtorrent \n    -e UPLOAD_RATE=1024 \n    --name docktorrentuser1 \n    -d \n    docktorrentuser1\n",[116,801,802,816,837,847,857,870,879,886],{"__ignoreMap":114},[119,803,804,807,810,813],{"class":121,"line":122},[119,805,806],{"class":125},"    docker",[119,808,809],{"class":129}," run",[119,811,812],{"class":129}," -it",[119,814,815],{"class":405}," \n",[119,817,818,821,824,827,830,832,835],{"class":121,"line":333},[119,819,820],{"class":125},"    -p",[119,822,823],{"class":129}," 80:80",[119,825,826],{"class":129}," -p",[119,828,829],{"class":129}," 45566:45566",[119,831,826],{"class":129},[119,833,834],{"class":129}," 9527:9527\u002Fudp",[119,836,815],{"class":405},[119,838,839,842,845],{"class":121,"line":409},[119,840,841],{"class":125},"    --dns",[119,843,844],{"class":737}," 8.8.8.8",[119,846,815],{"class":405},[119,848,849,852,855],{"class":121,"line":430},[119,850,851],{"class":125},"    -v",[119,853,854],{"class":129}," \u002Fhome\u002Fseedbox\u002Fuser1:\u002Frtorrent",[119,856,815],{"class":405},[119,858,859,862,865,868],{"class":121,"line":436},[119,860,861],{"class":125},"    -e",[119,863,864],{"class":129}," UPLOAD_RATE=",[119,866,867],{"class":737},"1024",[119,869,815],{"class":405},[119,871,872,875,877],{"class":121,"line":450},[119,873,874],{"class":125},"    --name",[119,876,790],{"class":129},[119,878,815],{"class":405},[119,880,881,884],{"class":121,"line":476},[119,882,883],{"class":125},"    -d",[119,885,815],{"class":405},[119,887,888],{"class":121,"line":496},[119,889,890],{"class":125},"    docktorrentuser1\n",[15,892,893],{},"Pour ajoutez un autre utilisateur il faut reproduire la manipulation précédente pour nos utilisateurs  :",[109,895,896],{"className":111,"code":307,"language":113,"meta":114,"style":114},[116,897,898],{"__ignoreMap":114},[119,899,900,902],{"class":121,"line":122},[119,901,126],{"class":125},[119,903,316],{"class":129},[15,905,906],{},"Modifiez le couple d’identifiants pour le nouvel utilisateur2 :",[109,908,910],{"className":342,"code":909,"language":344,"meta":114,"style":114},"RUN htpasswd -cb \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Frutorrent\u002F.htpasswd user2 passworduser2\n",[116,911,912],{"__ignoreMap":114},[119,913,914],{"class":121,"line":122},[119,915,909],{},[15,917,918],{},"Recréez le build avec un nouveau nom :",[109,920,922],{"className":111,"code":921,"language":113,"meta":114,"style":114},"docker build -t docktorrentuser2 .\n",[116,923,924],{"__ignoreMap":114},[119,925,926,928,930,932,935],{"class":121,"line":122},[119,927,782],{"class":125},[119,929,785],{"class":129},[119,931,181],{"class":129},[119,933,934],{"class":129}," docktorrentuser2",[119,936,793],{"class":129},[15,938,939],{},"Lancez le docker pour user2 sur le port 81 de notre hôte en modifiant les ports :",[109,941,943],{"className":111,"code":942,"language":113,"meta":114,"style":114}," docker run -it \n    -p 81:80 -p 45567:45566 -p 9528:9527\u002Fudp \n    --dns 8.8.8.8 \n    -v \u002Fhome\u002Fseedbox\u002Fuser2:\u002Frtorrent \n    -e UPLOAD_RATE=1024 \n    --name docktorrentuser2 \n    -d \n    docktorrentuser2\n",[116,944,945,956,975,983,992,1002,1010,1016],{"__ignoreMap":114},[119,946,947,950,952,954],{"class":121,"line":122},[119,948,949],{"class":125}," docker",[119,951,809],{"class":129},[119,953,812],{"class":129},[119,955,815],{"class":405},[119,957,958,960,963,965,968,970,973],{"class":121,"line":333},[119,959,820],{"class":125},[119,961,962],{"class":129}," 81:80",[119,964,826],{"class":129},[119,966,967],{"class":129}," 45567:45566",[119,969,826],{"class":129},[119,971,972],{"class":129}," 9528:9527\u002Fudp",[119,974,815],{"class":405},[119,976,977,979,981],{"class":121,"line":409},[119,978,841],{"class":125},[119,980,844],{"class":737},[119,982,815],{"class":405},[119,984,985,987,990],{"class":121,"line":430},[119,986,851],{"class":125},[119,988,989],{"class":129}," \u002Fhome\u002Fseedbox\u002Fuser2:\u002Frtorrent",[119,991,815],{"class":405},[119,993,994,996,998,1000],{"class":121,"line":436},[119,995,861],{"class":125},[119,997,864],{"class":129},[119,999,867],{"class":737},[119,1001,815],{"class":405},[119,1003,1004,1006,1008],{"class":121,"line":450},[119,1005,874],{"class":125},[119,1007,934],{"class":129},[119,1009,815],{"class":405},[119,1011,1012,1014],{"class":121,"line":476},[119,1013,883],{"class":125},[119,1015,815],{"class":405},[119,1017,1018],{"class":121,"line":496},[119,1019,1020],{"class":125},"    docktorrentuser2\n",[15,1022,1023],{},"Dans mon cas, je monte le dossier downloads dans celui des utilisateurs avec la commande suivante :",[109,1025,1027],{"className":111,"code":1026,"language":113,"meta":114,"style":114},"mount --bind \u002Fhome\u002Fseedbox\u002Fdownloads\u002F \u002Fhome\u002Fseedbox\u002Fuser1\u002Fdownloads\n",[116,1028,1029],{"__ignoreMap":114},[119,1030,1031,1034,1037,1040],{"class":121,"line":122},[119,1032,1033],{"class":125},"mount",[119,1035,1036],{"class":129}," --bind",[119,1038,1039],{"class":129}," \u002Fhome\u002Fseedbox\u002Fdownloads\u002F",[119,1041,1042],{"class":129}," \u002Fhome\u002Fseedbox\u002Fuser1\u002Fdownloads\n",[10,1044,1046],{"id":1045},"lexécution-et-la-configuration-de-pms-docker","L’exécution et la configuration de pms-docker",[15,1048,1049,1050,1053],{},"Téléchargez l’image du projet (",[1051,1052],"latest",{}," par défaut)",[109,1055,1057],{"className":111,"code":1056,"language":113,"meta":114,"style":114},"docker pull plexinc\u002Fpms-docker\n",[116,1058,1059],{"__ignoreMap":114},[119,1060,1061,1063,1066],{"class":121,"line":122},[119,1062,782],{"class":125},[119,1064,1065],{"class":129}," pull",[119,1067,1068],{"class":129}," plexinc\u002Fpms-docker\n",[15,1070,1071,24,1073],{},[21,1072,55],{},[26,1074,1075],{},"Il existe plusieurs TAG disponibles sur l’image Docker de Plex comme : latest, public, plexpass",[15,1077,1078],{},"Dans mon cas, je suis Premium Plex Lifetime depuis 2013 j’utilise donc le tag : plexpass :",[109,1080,1082],{"className":111,"code":1081,"language":113,"meta":114,"style":114},"docker pull plexinc\u002Fpms-docker:plexpas\n",[116,1083,1084],{"__ignoreMap":114},[119,1085,1086,1088,1090],{"class":121,"line":122},[119,1087,782],{"class":125},[119,1089,1065],{"class":129},[119,1091,1092],{"class":129}," plexinc\u002Fpms-docker:plexpas\n",[15,1094,1095,1096,1099],{},"La différence réside dans le fait qu’à chaque redémarrage de mon conteneneur Plex (",[1097,1098],"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.",[15,1101,1102],{},"Executer le Docker Plex de la façon suivante :",[109,1104,1106],{"className":111,"code":1105,"language":113,"meta":114,"style":114},"docker run --name plex -p 32400:32400\u002Ftcp -e TZ=\"Europe\u002FParis\" -e PLEX_CLAIM=\"claim-veFRSmSwMgpQEV1USsjE\"-e -h plex.kassianoff.fr -v \u002Fhome\u002Fseedbox\u002Fplex_config\u002F:\u002Fconfig -v \u002Fhome\u002Fseedbox\u002Fdownloads\u002F:\u002Fdata plexinc\u002Fpms-docker:plexpass\n",[116,1107,1108],{"__ignoreMap":114},[119,1109,1110,1112,1114,1117,1120,1122,1125,1128,1131,1134,1137,1139,1141,1144,1146,1149,1151,1154,1157,1160,1163,1166,1168,1171],{"class":121,"line":122},[119,1111,782],{"class":125},[119,1113,809],{"class":129},[119,1115,1116],{"class":129}," --name",[119,1118,1119],{"class":129}," plex",[119,1121,826],{"class":129},[119,1123,1124],{"class":129}," 32400:32400\u002Ftcp",[119,1126,1127],{"class":129}," -e",[119,1129,1130],{"class":129}," TZ=",[119,1132,1133],{"class":171},"\"",[119,1135,1136],{"class":129},"Europe\u002FParis",[119,1138,1133],{"class":171},[119,1140,1127],{"class":129},[119,1142,1143],{"class":129}," PLEX_CLAIM=",[119,1145,1133],{"class":171},[119,1147,1148],{"class":129},"claim-veFRSmSwMgpQEV1USsjE",[119,1150,1133],{"class":171},[119,1152,1153],{"class":129},"-e",[119,1155,1156],{"class":129}," -h",[119,1158,1159],{"class":129}," plex.kassianoff.fr",[119,1161,1162],{"class":129}," -v",[119,1164,1165],{"class":129}," \u002Fhome\u002Fseedbox\u002Fplex_config\u002F:\u002Fconfig",[119,1167,1162],{"class":129},[119,1169,1170],{"class":129}," \u002Fhome\u002Fseedbox\u002Fdownloads\u002F:\u002Fdata",[119,1172,1173],{"class":129}," plexinc\u002Fpms-docker:plexpass\n",[15,1175,1176,1177,1183],{},"Rendez-vous à l’adresse suivante : ",[1178,1179,1180],"a",{"href":1180,"rel":1181},"https:\u002F\u002Fplex.tv\u002Fclaim",[1182],"nofollow","car dans les paramètres il faut retenir qu’un token est nécessaire pour authentifier votre conteneur :",[15,1185,1186,1189],{},[21,1187,1188],{},"PLEX_CLAIM=","« claim-veFRSmSwMgpQEV1USsjE »",[15,1191,1192,1193,1196,1197,1200,1201,1206,1207,1210,1211,1214],{},"Pour finaliser la configuration du ",[21,1194,1195],{},"Serveur Plex",", connectez-vous en ",[21,1198,1199],{},"SSH"," au serveur ",[1178,1202,1205],{"href":1203,"rel":1204},"https:\u002F\u002Fwww.kassianoff.fr\u002Fblog\u002Ffr\u002Finstallation-plex-media-server-sur-debian",[1182],"exemple suivant"," : ",[26,1208,1209],{},"Accès « PMS » sans interface graphique !","  Je vous invite désormais à vérifier que vos ",[21,1212,1213],{},"conteneurs docker"," fonctionnent comme ceci :",[109,1216,1218],{"className":111,"code":1217,"language":113,"meta":114,"style":114},"docker ps\n",[116,1219,1220],{"__ignoreMap":114},[119,1221,1222,1224],{"class":121,"line":122},[119,1223,782],{"class":125},[119,1225,1226],{"class":129}," ps\n",[109,1228,1230],{"className":111,"code":1229,"language":113,"meta":114,"style":114},"CONTAINER ID        IMAGE                          COMMAND                CREATED             STATUS              PORTS                                                                            NAMES\n8afb950273f4        docktorrentuser1:latest   \"\u002Fusr\u002Flocal\u002Fbin\u002Fdock   2 days ago         Up 2 days          0.0.0.0:80->80\u002Ftcp, 0.0.0.0:9527->9527\u002Fudp, 9527\u002Ftcp, 0.0.0.0:45566->45566\u002Ftcp   docktorrentuser1\nb6d9446d42d1        docktorrentuser2:latest   \"\u002Fusr\u002Flocal\u002Fbin\u002Fdock   2 days ago         Up 2 days          9527\u002Ftcp, 0.0.0.0:81->80\u002Ftcp, 0.0.0.0:9528->9527\u002Fudp, 0.0.0.0:45567->45566\u002Ftcp   docktorrentuser2\nb94927f31cd4        plex:plexpass \"\u002Fstart.sh\" 2 days ago Up 2 days 0.0.0.0:32400->32400\u002Ftcp plexseedbox\n",[116,1231,1232,1258,1272,1337],{"__ignoreMap":114},[119,1233,1234,1237,1240,1243,1246,1249,1252,1255],{"class":121,"line":122},[119,1235,1236],{"class":125},"CONTAINER",[119,1238,1239],{"class":129}," ID",[119,1241,1242],{"class":129},"        IMAGE",[119,1244,1245],{"class":129},"                          COMMAND",[119,1247,1248],{"class":129},"                CREATED",[119,1250,1251],{"class":129},"             STATUS",[119,1253,1254],{"class":129},"              PORTS",[119,1256,1257],{"class":129},"                                                                            NAMES\n",[119,1259,1260,1263,1266,1269],{"class":121,"line":333},[119,1261,1262],{"class":125},"8afb950273f4",[119,1264,1265],{"class":129},"        docktorrentuser1:latest",[119,1267,1268],{"class":171},"   \"",[119,1270,1271],{"class":129},"\u002Fusr\u002Flocal\u002Fbin\u002Fdock   2 days ago         Up 2 days          0.0.0.0:80->80\u002Ftcp, 0.0.0.0:9527->9527\u002Fudp, 9527\u002Ftcp, 0.0.0.0:45566->45566\u002Ftcp   docktorrentuser1\n",[119,1273,1274,1277,1279,1282,1285,1288,1291,1294,1297,1299,1302,1305,1308,1311,1314,1317,1319,1321,1324,1327,1329,1331,1334],{"class":121,"line":409},[119,1275,1276],{"class":129},"b6d9446d42d1        docktorrentuser2:latest   ",[119,1278,1133],{"class":171},[119,1280,1281],{"class":129},"\u002Fusr\u002Flocal\u002Fbin\u002Fdock",[119,1283,1284],{"class":737},"   2",[119,1286,1287],{"class":129}," days",[119,1289,1290],{"class":129}," ago",[119,1292,1293],{"class":129},"         Up",[119,1295,1296],{"class":737}," 2",[119,1298,1287],{"class":129},[119,1300,1301],{"class":129},"          9527\u002Ftcp,",[119,1303,1304],{"class":129}," 0.0.0.0:81",[119,1306,1307],{"class":405},"-",[119,1309,1310],{"class":171},">",[119,1312,1313],{"class":129},"80\u002Ftcp,",[119,1315,1316],{"class":129}," 0.0.0.0:9528",[119,1318,1307],{"class":405},[119,1320,1310],{"class":171},[119,1322,1323],{"class":129},"9527\u002Fudp,",[119,1325,1326],{"class":129}," 0.0.0.0:45567",[119,1328,1307],{"class":405},[119,1330,1310],{"class":171},[119,1332,1333],{"class":129},"45566\u002Ftcp",[119,1335,1336],{"class":129},"   docktorrentuser2\n",[119,1338,1339,1342,1345,1348,1351,1353,1355,1357,1359,1362,1364,1366,1369,1371,1373,1376],{"class":121,"line":430},[119,1340,1341],{"class":125},"b94927f31cd4",[119,1343,1344],{"class":129},"        plex:plexpass",[119,1346,1347],{"class":171}," \"",[119,1349,1350],{"class":129},"\u002Fstart.sh",[119,1352,1133],{"class":171},[119,1354,1296],{"class":737},[119,1356,1287],{"class":129},[119,1358,1290],{"class":129},[119,1360,1361],{"class":129}," Up",[119,1363,1296],{"class":737},[119,1365,1287],{"class":129},[119,1367,1368],{"class":129}," 0.0.0.0:32400",[119,1370,1307],{"class":405},[119,1372,1310],{"class":171},[119,1374,1375],{"class":129},"32400\u002Ftcp",[119,1377,1378],{"class":129}," plexseedbox\n",[15,1380,1381,1382,1385,1386,1389,1390,1393,1394,1397,1398,1401],{},"Pour une meilleure ",[21,1383,1384],{},"sécurité",", utilisez un ",[21,1387,1388],{},"reverse proxy"," vers vos ",[21,1391,1392],{},"dockers"," comme par exemple ",[21,1395,1396],{},"Pound",".",[1399,1400],"br",{},"\nVoici ma configuration pour deux sous-domaines user1 et user2 vers l’interface bridge de Docker :",[109,1403,1405],{"className":111,"code":1404,"language":113,"meta":114,"style":114},"ListenHTTPS\n        Address 62.XXX.XXX.XXX\n        Port 443\n        Cert \"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser1.pem\"\n        Cert \"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser2.pem\"\n        AddHeader \"X-Forwarded-Proto: https\"\n        ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:\n        xHTTP           2\n        Service\n                HeadRequire \"Host: .*user1.kassianoff.fr.*\"\n                BackEnd\n                        Address 172.17.42.1\n                        Port    80\n                End\n        End\n        Service\n                HeadRequire \"Host: .*user2.kassianoff.fr.*\"\n                BackEnd\n                        Address 172.17.42.1\n                        Port 81\n                End\n        End\nEnd\n",[116,1406,1407,1412,1420,1428,1441,1452,1464,1469,1477,1482,1494,1499,1507,1515,1520,1525,1529,1540,1544,1550,1557,1561,1566],{"__ignoreMap":114},[119,1408,1409],{"class":121,"line":122},[119,1410,1411],{"class":125},"ListenHTTPS\n",[119,1413,1414,1417],{"class":121,"line":333},[119,1415,1416],{"class":125},"        Address",[119,1418,1419],{"class":129}," 62.XXX.XXX.XXX\n",[119,1421,1422,1425],{"class":121,"line":409},[119,1423,1424],{"class":125},"        Port",[119,1426,1427],{"class":737}," 443\n",[119,1429,1430,1433,1435,1438],{"class":121,"line":430},[119,1431,1432],{"class":125},"        Cert",[119,1434,1347],{"class":171},[119,1436,1437],{"class":129},"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser1.pem",[119,1439,1440],{"class":171},"\"\n",[119,1442,1443,1445,1447,1450],{"class":121,"line":436},[119,1444,1432],{"class":125},[119,1446,1347],{"class":171},[119,1448,1449],{"class":129},"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser2.pem",[119,1451,1440],{"class":171},[119,1453,1454,1457,1459,1462],{"class":121,"line":450},[119,1455,1456],{"class":125},"        AddHeader",[119,1458,1347],{"class":171},[119,1460,1461],{"class":129},"X-Forwarded-Proto: https",[119,1463,1440],{"class":171},[119,1465,1466],{"class":121,"line":476},[119,1467,1468],{"class":329},"        ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:\n",[119,1470,1471,1474],{"class":121,"line":496},[119,1472,1473],{"class":125},"        xHTTP",[119,1475,1476],{"class":737},"           2\n",[119,1478,1479],{"class":121,"line":502},[119,1480,1481],{"class":125},"        Service\n",[119,1483,1484,1487,1489,1492],{"class":121,"line":522},[119,1485,1486],{"class":125},"                HeadRequire",[119,1488,1347],{"class":171},[119,1490,1491],{"class":129},"Host: .*user1.kassianoff.fr.*",[119,1493,1440],{"class":171},[119,1495,1496],{"class":121,"line":540},[119,1497,1498],{"class":125},"                BackEnd\n",[119,1500,1501,1504],{"class":121,"line":546},[119,1502,1503],{"class":125},"                        Address",[119,1505,1506],{"class":737}," 172.17.42.1\n",[119,1508,1509,1512],{"class":121,"line":564},[119,1510,1511],{"class":125},"                        Port",[119,1513,1514],{"class":737},"    80\n",[119,1516,1517],{"class":121,"line":593},[119,1518,1519],{"class":125},"                End\n",[119,1521,1522],{"class":121,"line":616},[119,1523,1524],{"class":125},"        End\n",[119,1526,1527],{"class":121,"line":622},[119,1528,1481],{"class":125},[119,1530,1531,1533,1535,1538],{"class":121,"line":634},[119,1532,1486],{"class":125},[119,1534,1347],{"class":171},[119,1536,1537],{"class":129},"Host: .*user2.kassianoff.fr.*",[119,1539,1440],{"class":171},[119,1541,1542],{"class":121,"line":659},[119,1543,1498],{"class":125},[119,1545,1546,1548],{"class":121,"line":677},[119,1547,1503],{"class":125},[119,1549,1506],{"class":737},[119,1551,1552,1554],{"class":121,"line":698},[119,1553,1511],{"class":125},[119,1555,1556],{"class":737}," 81\n",[119,1558,1559],{"class":121,"line":709},[119,1560,1519],{"class":125},[119,1562,1564],{"class":121,"line":1563},22,[119,1565,1524],{"class":125},[119,1567,1569],{"class":121,"line":1568},23,[119,1570,1571],{"class":125},"End\n",[15,1573,1574,1575,1397],{},"Pour générer un certificat SSL autosigné  : ",[1178,1576,1577],{"href":1577,"rel":1578},"http:\u002F\u002Fdoc.ubuntu-fr.org\u002Ftutoriel\u002Fcomment_creer_un_certificat_ssl",[1182],[15,1580,1581,24,1584,24,1587,24,1592,24,1595,24,1600,24,1603,1608],{},[21,1582,1583],{},"Success !",[26,1585,1586],{},"Vous êtes désormais prêt à partager toutes les",[26,1588,1589],{},[21,1590,1591],{},"distributions Linux",[26,1593,1594],{},"du moment avec votre",[26,1596,1597],{},[21,1598,1599],{},"superbe seedbox",[26,1601,1602],{},"et à diffuser vos vidéos de famille sur",[26,1604,1605],{},[21,1606,1607],{},"Plex","*. Amusez-vous bien !*",[10,1610,1612],{"id":1611},"conclusion","Conclusion",[15,1614,1615],{},"Docker permet ici de déployer rapidement une seedbox complète en combinant les projets docktorrent (rTorrent\u002FruTorrent) et pms-docker (Plex Media Server), sans passer par une installation manuelle longue et fastidieuse. Cette approche facilite grandement la migration d'un serveur dédié à un autre, puisqu'il suffit de reconstruire les images et de remonter les volumes de données. Pour la sécurité, l'ajout d'un reverse proxy comme Pound devant les conteneurs est recommandé, notamment pour gérer le HTTPS et le multi-utilisateur.",[1617,1618,1619],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":114,"searchDepth":333,"depth":333,"links":1621},[1622,1623,1626,1627,1628,1629,1630],{"id":12,"depth":333,"text":13},{"id":31,"depth":333,"text":5,"children":1624},[1625],{"id":62,"depth":409,"text":63},{"id":81,"depth":333,"text":82},{"id":103,"depth":333,"text":104},{"id":254,"depth":333,"text":255},{"id":1045,"depth":333,"text":1046},{"id":1611,"depth":333,"text":1612},null,"\u002Fimages\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker\u002Fa7be954aab.png",true,"2015-05-09","Une seedbox peut-être long et pénible à mettre en place. Découvrez un moyen plus facile et plus souple avec Docker.","md",{},"\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker",{"title":5,"description":1635},"creation-une-seedbox-rutorrent-plex-sous-docker","blog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker","WSF0dhq5vYB8TrrfM6XZnDcogOEZ0Z2I6bufCHgbXp4",[1644,1652,1660,1667,1673,1681,1689,1696],{"title":1645,"path":1646,"stem":1647,"date":1648,"cover":1649,"categories":1650,"children":-1},"Configuration d’un serveur Counter-Strike GO sous Linux","\u002Fblog\u002Fconfiguration-serveur-counter-strike-sous-linux","blog\u002Fconfiguration-serveur-counter-strike-sous-linux","2016-01-27","\u002Fimages\u002Fblog\u002Fconfiguration-serveur-counter-strike-sous-linux\u002F25d3c9f715.png",[1651],"Linux",{"title":1653,"path":1654,"stem":1655,"date":1656,"cover":1657,"categories":1658,"children":-1},"Le choix d’une infrastructure domestique","\u002Fblog\u002Fchoix-une-infrastructure-domestique","blog\u002Fchoix-une-infrastructure-domestique","2015-12-24","\u002Fimages\u002Fblog\u002Fchoix-une-infrastructure-domestique\u002Fedf65eed4e.png",[1659],"Réseau",{"title":1661,"path":1662,"stem":1663,"date":1664,"cover":1665,"categories":1666,"children":-1},"Configuration de Debian 8 en mode desktop","\u002Fblog\u002Fconfiguration-debian-mode-desktop","blog\u002Fconfiguration-debian-mode-desktop","2015-08-29","\u002Fimages\u002Fblog\u002Fconfiguration-debian-mode-desktop\u002F463de156f7.png",[1651],{"title":1668,"path":1669,"stem":1670,"date":1671,"cover":1672,"categories":1631,"children":-1},"Hack In Paris 2015 : une belle backdoor X11","\u002Fblog\u002Fhack-paris-2015-une-belle-backdoor-x11","blog\u002Fhack-paris-2015-une-belle-backdoor-x11","2015-07-26","\u002Fimages\u002Fblog\u002Fhack-paris-2015-une-belle-backdoor-x11\u002Fd1aaf6a60c.jpg",{"title":1674,"path":1675,"stem":1676,"date":1677,"cover":1678,"categories":1679,"children":-1},"Hack In Paris et Nuit du Hack du 15 au 21 Juin 2015","\u002Fblog\u002Fhack-paris-nuit-hack-juin-2015","blog\u002Fhack-paris-nuit-hack-juin-2015","2015-05-05","\u002Fimages\u002Fblog\u002Fhack-paris-nuit-hack-juin-2015\u002Fb9dd3c5969.png",[1680],"Évènement",{"title":1682,"path":1683,"stem":1684,"date":1685,"cover":1686,"categories":1687,"children":-1},"Onda tablet : modifier la langue par défaut","\u002Fblog\u002Fonda-tablet-modifier-langue-par-defaut","blog\u002Fonda-tablet-modifier-langue-par-defaut","2015-04-16","\u002Fimages\u002Fblog\u002Fonda-tablet-modifier-langue-par-defaut\u002F3e9eb9200b.jpg",[1688],"Microsoft",{"title":1690,"path":1691,"stem":1692,"date":1693,"cover":1694,"categories":1695,"children":-1},"Le témoignage de ma formation au Greta-Viva5 de Valence : mes projets d’études en BTS SIO","\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-mes-projets-etudes-bts-sio","blog\u002Ftemoignage-formation-greta-viva5-valence-mes-projets-etudes-bts-sio","2015-04-15","\u002Fimages\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-mes-projets-etudes-bts-sio\u002F45668231fd.jpg",[1680],{"title":1697,"path":1698,"stem":1699,"date":1700,"cover":1701,"categories":1702,"children":-1},"Documentation numéro 1","\u002Fblog\u002Fbts-documentation-numero-1","blog\u002Fbts-documentation-numero-1","2015-04-13","\u002Fimages\u002Fblog\u002Fbts-documentation-numero-1\u002Fc5b263af8b.jpg",[1703],"BTS",[],1786644877078]