[{"data":1,"prerenderedAt":1710},["ShallowReactive",2],{"blog-\u002Fen\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker":3,"blog-\u002Fen\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker-surround":1648,"blog-\u002Fen\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker-certifications":1709},{"id":4,"title":5,"body":6,"categories":1636,"cover":1637,"cover_contain":1638,"credly_badge_id":1636,"date":1639,"description":1640,"extension":1641,"meta":1642,"navigation":1638,"path":1643,"related_certifications":1636,"seo":1644,"slug":1645,"stem":1646,"__hash__":1647},"blog\u002Fen\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker.md","Creating a Seedbox: ruTorrent and Plex under Docker",{"type":7,"value":8,"toc":1625},"minimark",[9,14,18,29,33,36,39,42,52,60,65,80,84,87,95,102,106,109,132,135,154,157,193,196,229,232,253,257,268,283,286,300,307,319,322,339,342,353,356,741,744,769,775,796,799,893,896,906,909,918,921,939,942,1023,1026,1045,1049,1056,1071,1078,1081,1095,1102,1105,1176,1186,1192,1217,1229,1381,1404,1574,1581,1614,1618,1621],[10,11,13],"h2",{"id":12},"real-world-use-case","Real-world use case",[15,16,17],"p",{},"You want a ready-to-use seedbox without the complexity: here's how to deploy ruTorrent and Plex together under Docker.",[15,19,20,24,25],{},[21,22,23],"strong",{},"Article updated on March 5, 2017"," ",[26,27,28],"em",{},": ruTorrent script update and Plex Docker project update",[10,30,32],{"id":31},"creating-a-seedbox-rutorrent-and-plex-under-docker","Creating a seedbox: ruTorrent and Plex under Docker",[15,34,35],{},"Switching dedicated servers has become a common practice. Over time, we adapt to what's on the market, since offers evolve and are generally more appealing from one year to the next. The trend is to always pay less while keeping decent hardware specs. A seedbox is always meant to be cheaper for more power.",[15,37,38],{},"But when it comes time for the initial configuration, you quickly realize it's tied to its environment and isn't easily changeable. So do you need to recreate it every time you switch servers? The goal of this article is to use Docker's power to solve this problem.",[15,40,41],{},"Let's remember that a seedbox's configuration generally includes two services:",[43,44,45,49],"ul",{},[46,47,48],"li",{},"The download server on one side (example: ruTorrent, Deluge, Transmission…).",[46,50,51],{},"The streaming server on the other (example: Plex, Kodi…).",[15,53,54,24,57],{},[21,55,56],{},"Info:",[26,58,59],{},"An SFTP or FTPES server could also be set up, but I won't cover that in this article.",[61,62,64],"h3",{"id":63},"discover-for-yourself","Discover for yourself:",[66,67,68,71,74,77],"ol",{},[46,69,70],{},"Docker with: dockertorrent and pms-docker.",[46,72,73],{},"Preparing the environment on Debian 8.",[46,75,76],{},"Running and configuring dockertorrent.",[46,78,79],{},"Running and configuring pms-docker.",[10,81,83],{"id":82},"docker-with-dockertorrent-and-pms-docker","Docker with dockertorrent and pms-docker",[15,85,86],{},"Docker isolates processes in containers, it's by far the best solution for deploying your projects faster and more easily. It also guarantees increased security as well as unprecedented stability and scalability. It's entirely based on Linux's power. For the following article, I'm going to use two existing Docker projects:",[66,88,89,92],{},[46,90,91],{},"The first is named docktorrent, by author kfei, which contains rTorrent with ruTorrent.",[46,93,94],{},"The second is pms-docker, from Plex itself, which contains the PMS (PlexMediaServer) server.",[15,96,97,24,99],{},[21,98,56],{},[26,100,101],{},"We'll now be able to deploy a seedbox in 5 minutes after our first build. The following article is based on projects that are open on the web, I take no responsibility in case of misuse.",[10,103,105],{"id":104},"preparing-the-environment-on-debian-7","Preparing the environment on Debian 7",[15,107,108],{},"Before starting, installing the prerequisites is essential, you'll need the wheezy-backports repository:",[110,111,116],"pre",{"className":112,"code":113,"language":114,"meta":115,"style":115},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","nano \u002Fetc\u002Fapt\u002Fsources.list\n","bash","",[117,118,119],"code",{"__ignoreMap":115},[120,121,124,128],"span",{"class":122,"line":123},"line",1,[120,125,127],{"class":126},"sBMFI","nano",[120,129,131],{"class":130},"sfazB"," \u002Fetc\u002Fapt\u002Fsources.list\n",[15,133,134],{},"Add the following repository:",[110,136,138],{"className":112,"code":137,"language":114,"meta":115,"style":115},"deb http:\u002F\u002Fhttp.debian.net\u002Fdebian wheezy-backports main\n",[117,139,140],{"__ignoreMap":115},[120,141,142,145,148,151],{"class":122,"line":123},[120,143,144],{"class":126},"deb",[120,146,147],{"class":130}," http:\u002F\u002Fhttp.debian.net\u002Fdebian",[120,149,150],{"class":130}," wheezy-backports",[120,152,153],{"class":130}," main\n",[15,155,156],{},"Update the packages, then install the image, and reboot the server:",[110,158,160],{"className":112,"code":159,"language":114,"meta":115,"style":115},"apt-get update && apt-get install -t wheezy-backports linux-image-amd64 && reboot\n",[117,161,162],{"__ignoreMap":115},[120,163,164,167,170,174,177,180,183,185,188,190],{"class":122,"line":123},[120,165,166],{"class":126},"apt-get",[120,168,169],{"class":130}," update",[120,171,173],{"class":172},"sMK4o"," &&",[120,175,176],{"class":126}," apt-get",[120,178,179],{"class":130}," install",[120,181,182],{"class":130}," -t",[120,184,150],{"class":130},[120,186,187],{"class":130}," linux-image-amd64",[120,189,173],{"class":172},[120,191,192],{"class":126}," reboot\n",[15,194,195],{},"After the system reboot, get ready to install docker:",[110,197,199],{"className":112,"code":198,"language":114,"meta":115,"style":115},"apt-get install curl git && curl -sSL https:\u002F\u002Fget.docker.com\u002F | sh\n",[117,200,201],{"__ignoreMap":115},[120,202,203,205,207,210,213,215,217,220,223,226],{"class":122,"line":123},[120,204,166],{"class":126},[120,206,179],{"class":130},[120,208,209],{"class":130}," curl",[120,211,212],{"class":130}," git",[120,214,173],{"class":172},[120,216,209],{"class":126},[120,218,219],{"class":130}," -sSL",[120,221,222],{"class":130}," https:\u002F\u002Fget.docker.com\u002F",[120,224,225],{"class":172}," |",[120,227,228],{"class":126}," sh\n",[15,230,231],{},"Create two directories to hold the data location for our two users:",[110,233,235],{"className":112,"code":234,"language":114,"meta":115,"style":115},"mkdir \u002Fhome\u002Fseedbox\u002Fuser1 && mkdir \u002Fhome\u002Fseedbox\u002Fuser2\n",[117,236,237],{"__ignoreMap":115},[120,238,239,242,245,247,250],{"class":122,"line":123},[120,240,241],{"class":126},"mkdir",[120,243,244],{"class":130}," \u002Fhome\u002Fseedbox\u002Fuser1",[120,246,173],{"class":172},[120,248,249],{"class":126}," mkdir",[120,251,252],{"class":130}," \u002Fhome\u002Fseedbox\u002Fuser2\n",[10,254,256],{"id":255},"running-and-configuring-docktorrent","Running and configuring docktorrent",[15,258,259,260,263,264,267],{},"Cloning the ",[21,261,262],{},"docktorrent project"," with ",[21,265,266],{},"git",":",[110,269,271],{"className":112,"code":270,"language":114,"meta":115,"style":115},"git clone https:\u002F\u002Fgithub.com\u002Fkfei\u002Fdocktorrent\n",[117,272,273],{"__ignoreMap":115},[120,274,275,277,280],{"class":122,"line":123},[120,276,266],{"class":126},[120,278,279],{"class":130}," clone",[120,281,282],{"class":130}," https:\u002F\u002Fgithub.com\u002Fkfei\u002Fdocktorrent\n",[15,284,285],{},"Move into the archive:",[110,287,289],{"className":112,"code":288,"language":114,"meta":115,"style":115},"cd docktorrent\n",[117,290,291],{"__ignoreMap":115},[120,292,293,297],{"class":122,"line":123},[120,294,296],{"class":295},"s2Zo4","cd",[120,298,299],{"class":130}," docktorrent\n",[15,301,302,303,306],{},"At this point, edit ",[21,304,305],{},"rtorrent's configuration"," file:",[110,308,310],{"className":112,"code":309,"language":114,"meta":115,"style":115},"nano config\u002Frtorrent\u002F.rtorrent.rc\n",[117,311,312],{"__ignoreMap":115},[120,313,314,316],{"class":122,"line":123},[120,315,127],{"class":126},[120,317,318],{"class":130}," config\u002Frtorrent\u002F.rtorrent.rc\n",[15,320,321],{},"Personally, I comment out lines 23 and 24, since I don't want to move my files after downloading:",[110,323,325],{"className":112,"code":324,"language":114,"meta":115,"style":115},"#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",[117,326,327,333],{"__ignoreMap":115},[120,328,329],{"class":122,"line":123},[120,330,332],{"class":331},"sHwdD","#system.method.insert = d.get_finished_dir,simple,\"cat=\u002Frtorrent\u002Ffinished\u002F,$d.get_custom1=\"\n",[120,334,336],{"class":122,"line":335},2,[120,337,338],{"class":331},"#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,340,341],{},"Go to the Dockerfile and change the credential pair:",[110,343,347],{"className":344,"code":345,"language":346,"meta":115,"style":115},"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",[117,348,349],{"__ignoreMap":115},[120,350,351],{"class":122,"line":123},[120,352,345],{},[15,354,355],{},"Before starting the build, an error has appeared since December 2016 when building the container:",[110,357,359],{"className":112,"code":358,"language":114,"meta":115,"style":115},"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",[117,360,361,384,409,430,436,450,476,496,502,522,540,546,564,593,616,622,634,659,677,698,709],{"__ignoreMap":115},[120,362,363,366,369,372,375,378,381],{"class":122,"line":123},[120,364,365],{"class":126},"xmlrpc_libxml2.c:",[120,367,368],{"class":130}," In",[120,370,371],{"class":130}," function",[120,373,374],{"class":172}," '",[120,376,377],{"class":130},"xml_init",[120,379,380],{"class":172},"'",[120,382,383],{"class":130},":\n",[120,385,386,389,392,395,398,400,403,405],{"class":122,"line":335},[120,387,388],{"class":126},"xmlrpc_libxml2.c:61:29:",[120,390,391],{"class":130}," warning:",[120,393,394],{"class":130}," unused",[120,396,397],{"class":130}," parameter",[120,399,374],{"class":172},[120,401,402],{"class":130},"envP",[120,404,380],{"class":172},[120,406,408],{"class":407},"sTEyZ"," [-Wunused-parameter]\n",[120,410,412,415,418,421,424,427],{"class":122,"line":411},3,[120,413,414],{"class":126}," xml_init(xmlrpc_env",[120,416,417],{"class":407}," *",[120,419,420],{"class":130}," const",[120,422,423],{"class":130}," envP",[120,425,426],{"class":407},") ",[120,428,429],{"class":172},"{\n",[120,431,433],{"class":122,"line":432},4,[120,434,435],{"class":126},"                             ^\n",[120,437,439,441,444,447],{"class":122,"line":438},5,[120,440,365],{"class":126},[120,442,443],{"class":130}," At",[120,445,446],{"class":130}," top",[120,448,449],{"class":130}," level:\n",[120,451,453,456,459,462,465,468,470,473],{"class":122,"line":452},6,[120,454,455],{"class":126},"xmlrpc_libxml2.c:430:20:",[120,457,458],{"class":130}," error:",[120,460,461],{"class":130}," unknown",[120,463,464],{"class":130}," type",[120,466,467],{"class":130}," name",[120,469,374],{"class":172},[120,471,472],{"class":130},"xmlParserCtx",[120,474,475],{"class":172},"'\n",[120,477,479,482,484,486,489,492,494],{"class":122,"line":478},7,[120,480,481],{"class":126}," removeDocSizeLimit(xmlParserCtx",[120,483,417],{"class":407},[120,485,420],{"class":130},[120,487,488],{"class":130}," parserP",[120,490,491],{"class":130}," ATTR_UNUSED",[120,493,426],{"class":407},[120,495,429],{"class":172},[120,497,499],{"class":122,"line":498},8,[120,500,501],{"class":126},"                    ^\n",[120,503,505,508,510,512,514,516,518,520],{"class":122,"line":504},9,[120,506,507],{"class":126},"xmlrpc_libxml2.c:455:14:",[120,509,458],{"class":130},[120,511,461],{"class":130},[120,513,464],{"class":130},[120,515,467],{"class":130},[120,517,374],{"class":172},[120,519,472],{"class":130},[120,521,475],{"class":172},[120,523,525,528,531,533,536,538],{"class":122,"line":524},10,[120,526,527],{"class":126},"              xmlParserCtx",[120,529,530],{"class":407}," **",[120,532,420],{"class":130},[120,534,535],{"class":130}," parserPP",[120,537,426],{"class":407},[120,539,429],{"class":172},[120,541,543],{"class":122,"line":542},11,[120,544,545],{"class":126},"              ^\n",[120,547,549,551,553,555,557,560,562],{"class":122,"line":548},12,[120,550,365],{"class":126},[120,552,368],{"class":130},[120,554,371],{"class":130},[120,556,374],{"class":172},[120,558,559],{"class":130},"xml_parse",[120,561,380],{"class":172},[120,563,383],{"class":130},[120,565,567,570,572,575,578,581,583,585,588,590],{"class":122,"line":566},13,[120,568,569],{"class":126},"xmlrpc_libxml2.c:491:5:",[120,571,391],{"class":130},[120,573,574],{"class":130}," implicit",[120,576,577],{"class":130}," declaration",[120,579,580],{"class":130}," of",[120,582,371],{"class":130},[120,584,374],{"class":172},[120,586,587],{"class":130},"createParser",[120,589,380],{"class":172},[120,591,592],{"class":407}," [-Wimplicit-function-declaration]\n",[120,594,596,599,602,605,607,610,613],{"class":122,"line":595},14,[120,597,598],{"class":126},"     createParser(envP,",[120,600,601],{"class":172}," &",[120,603,604],{"class":126},"context,",[120,606,601],{"class":172},[120,608,609],{"class":126},"parserP",[120,611,612],{"class":407},")",[120,614,615],{"class":172},";\n",[120,617,619],{"class":122,"line":618},15,[120,620,621],{"class":126},"     ^\n",[120,623,625,628,631],{"class":122,"line":624},16,[120,626,627],{"class":126},"make[1]:",[120,629,630],{"class":407}," ***",[120,632,633],{"class":407}," [xmlrpc_libxml2.o] Error 1\n",[120,635,637,640,643,646,649,651,654,656],{"class":122,"line":636},17,[120,638,639],{"class":126},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:336:",[120,641,642],{"class":130}," recipe",[120,644,645],{"class":130}," for",[120,647,648],{"class":130}," target",[120,650,374],{"class":172},[120,652,653],{"class":130},"xmlrpc_libxml2.o",[120,655,380],{"class":172},[120,657,658],{"class":130}," failed\n",[120,660,662,664,667,670,672,675],{"class":122,"line":661},18,[120,663,627],{"class":126},[120,665,666],{"class":130}," Leaving",[120,668,669],{"class":130}," directory",[120,671,374],{"class":172},[120,673,674],{"class":130},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fsrc",[120,676,475],{"class":172},[120,678,680,683,685,687,689,691,694,696],{"class":122,"line":679},19,[120,681,682],{"class":126},"\u002Fusr\u002Flocal\u002Fsrc\u002Fxmlrpc-c\u002Fcommon.mk:375:",[120,684,642],{"class":130},[120,686,645],{"class":130},[120,688,648],{"class":130},[120,690,374],{"class":172},[120,692,693],{"class":130},"src\u002Fall",[120,695,380],{"class":172},[120,697,658],{"class":130},[120,699,701,704,706],{"class":122,"line":700},20,[120,702,703],{"class":126},"make:",[120,705,630],{"class":407},[120,707,708],{"class":407}," [src\u002Fall] Error 2\n",[120,710,712,715,718,720,723,725,728,731,734,737],{"class":122,"line":711},21,[120,713,714],{"class":126},"The",[120,716,717],{"class":130}," command",[120,719,374],{"class":172},[120,721,722],{"class":130},"\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",[120,724,380],{"class":172},[120,726,727],{"class":130}," returned",[120,729,730],{"class":130}," a",[120,732,733],{"class":130}," non-zero",[120,735,736],{"class":130}," code:",[120,738,740],{"class":739},"sbssI"," 2\n",[15,742,743],{},"Just replace the svn URL on line 24 in the Dockerfile:",[110,745,747],{"className":112,"code":746,"language":114,"meta":115,"style":115},"svn --trust-server-cert checkout https:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fsuper_stable\u002F xmlrpc-c &&\n",[117,748,749],{"__ignoreMap":115},[120,750,751,754,757,760,763,766],{"class":122,"line":123},[120,752,753],{"class":126},"svn",[120,755,756],{"class":130}," --trust-server-cert",[120,758,759],{"class":130}," checkout",[120,761,762],{"class":130}," https:\u002F\u002Fsvn.code.sf.net\u002Fp\u002Fxmlrpc-c\u002Fcode\u002Fsuper_stable\u002F",[120,764,765],{"class":130}," xmlrpc-c",[120,767,768],{"class":172}," &&\n",[15,770,771,772,267],{},"Run the ",[21,773,774],{},"docktorrent build",[110,776,778],{"className":112,"code":777,"language":114,"meta":115,"style":115},"docker build -t docktorrentuser1 .\n",[117,779,780],{"__ignoreMap":115},[120,781,782,785,788,790,793],{"class":122,"line":123},[120,783,784],{"class":126},"docker",[120,786,787],{"class":130}," build",[120,789,182],{"class":130},[120,791,792],{"class":130}," docktorrentuser1",[120,794,795],{"class":130}," .\n",[15,797,798],{},"After compiling, run docktorrentuser1:",[110,800,802],{"className":112,"code":801,"language":114,"meta":115,"style":115},"    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",[117,803,804,818,839,849,859,872,881,888],{"__ignoreMap":115},[120,805,806,809,812,815],{"class":122,"line":123},[120,807,808],{"class":126},"    docker",[120,810,811],{"class":130}," run",[120,813,814],{"class":130}," -it",[120,816,817],{"class":407}," \n",[120,819,820,823,826,829,832,834,837],{"class":122,"line":335},[120,821,822],{"class":126},"    -p",[120,824,825],{"class":130}," 80:80",[120,827,828],{"class":130}," -p",[120,830,831],{"class":130}," 45566:45566",[120,833,828],{"class":130},[120,835,836],{"class":130}," 9527:9527\u002Fudp",[120,838,817],{"class":407},[120,840,841,844,847],{"class":122,"line":411},[120,842,843],{"class":126},"    --dns",[120,845,846],{"class":739}," 8.8.8.8",[120,848,817],{"class":407},[120,850,851,854,857],{"class":122,"line":432},[120,852,853],{"class":126},"    -v",[120,855,856],{"class":130}," \u002Fhome\u002Fseedbox\u002Fuser1:\u002Frtorrent",[120,858,817],{"class":407},[120,860,861,864,867,870],{"class":122,"line":438},[120,862,863],{"class":126},"    -e",[120,865,866],{"class":130}," UPLOAD_RATE=",[120,868,869],{"class":739},"1024",[120,871,817],{"class":407},[120,873,874,877,879],{"class":122,"line":452},[120,875,876],{"class":126},"    --name",[120,878,792],{"class":130},[120,880,817],{"class":407},[120,882,883,886],{"class":122,"line":478},[120,884,885],{"class":126},"    -d",[120,887,817],{"class":407},[120,889,890],{"class":122,"line":498},[120,891,892],{"class":126},"    docktorrentuser1\n",[15,894,895],{},"To add another user, you need to repeat the previous steps for our users:",[110,897,898],{"className":112,"code":309,"language":114,"meta":115,"style":115},[117,899,900],{"__ignoreMap":115},[120,901,902,904],{"class":122,"line":123},[120,903,127],{"class":126},[120,905,318],{"class":130},[15,907,908],{},"Change the credential pair for the new user2:",[110,910,912],{"className":344,"code":911,"language":346,"meta":115,"style":115},"RUN htpasswd -cb \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Frutorrent\u002F.htpasswd user2 passworduser2\n",[117,913,914],{"__ignoreMap":115},[120,915,916],{"class":122,"line":123},[120,917,911],{},[15,919,920],{},"Rebuild with a new name:",[110,922,924],{"className":112,"code":923,"language":114,"meta":115,"style":115},"docker build -t docktorrentuser2 .\n",[117,925,926],{"__ignoreMap":115},[120,927,928,930,932,934,937],{"class":122,"line":123},[120,929,784],{"class":126},[120,931,787],{"class":130},[120,933,182],{"class":130},[120,935,936],{"class":130}," docktorrentuser2",[120,938,795],{"class":130},[15,940,941],{},"Run the docker for user2 on port 81 of our host by changing the ports:",[110,943,945],{"className":112,"code":944,"language":114,"meta":115,"style":115}," 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",[117,946,947,958,977,985,994,1004,1012,1018],{"__ignoreMap":115},[120,948,949,952,954,956],{"class":122,"line":123},[120,950,951],{"class":126}," docker",[120,953,811],{"class":130},[120,955,814],{"class":130},[120,957,817],{"class":407},[120,959,960,962,965,967,970,972,975],{"class":122,"line":335},[120,961,822],{"class":126},[120,963,964],{"class":130}," 81:80",[120,966,828],{"class":130},[120,968,969],{"class":130}," 45567:45566",[120,971,828],{"class":130},[120,973,974],{"class":130}," 9528:9527\u002Fudp",[120,976,817],{"class":407},[120,978,979,981,983],{"class":122,"line":411},[120,980,843],{"class":126},[120,982,846],{"class":739},[120,984,817],{"class":407},[120,986,987,989,992],{"class":122,"line":432},[120,988,853],{"class":126},[120,990,991],{"class":130}," \u002Fhome\u002Fseedbox\u002Fuser2:\u002Frtorrent",[120,993,817],{"class":407},[120,995,996,998,1000,1002],{"class":122,"line":438},[120,997,863],{"class":126},[120,999,866],{"class":130},[120,1001,869],{"class":739},[120,1003,817],{"class":407},[120,1005,1006,1008,1010],{"class":122,"line":452},[120,1007,876],{"class":126},[120,1009,936],{"class":130},[120,1011,817],{"class":407},[120,1013,1014,1016],{"class":122,"line":478},[120,1015,885],{"class":126},[120,1017,817],{"class":407},[120,1019,1020],{"class":122,"line":498},[120,1021,1022],{"class":126},"    docktorrentuser2\n",[15,1024,1025],{},"In my case, I mount the downloads folder into that of the users with the following command:",[110,1027,1029],{"className":112,"code":1028,"language":114,"meta":115,"style":115},"mount --bind \u002Fhome\u002Fseedbox\u002Fdownloads\u002F \u002Fhome\u002Fseedbox\u002Fuser1\u002Fdownloads\n",[117,1030,1031],{"__ignoreMap":115},[120,1032,1033,1036,1039,1042],{"class":122,"line":123},[120,1034,1035],{"class":126},"mount",[120,1037,1038],{"class":130}," --bind",[120,1040,1041],{"class":130}," \u002Fhome\u002Fseedbox\u002Fdownloads\u002F",[120,1043,1044],{"class":130}," \u002Fhome\u002Fseedbox\u002Fuser1\u002Fdownloads\n",[10,1046,1048],{"id":1047},"running-and-configuring-pms-docker","Running and configuring pms-docker",[15,1050,1051,1052,1055],{},"Download the project's image (",[1053,1054],"latest",{}," by default)",[110,1057,1059],{"className":112,"code":1058,"language":114,"meta":115,"style":115},"docker pull plexinc\u002Fpms-docker\n",[117,1060,1061],{"__ignoreMap":115},[120,1062,1063,1065,1068],{"class":122,"line":123},[120,1064,784],{"class":126},[120,1066,1067],{"class":130}," pull",[120,1069,1070],{"class":130}," plexinc\u002Fpms-docker\n",[15,1072,1073,24,1075],{},[21,1074,56],{},[26,1076,1077],{},"There are several TAGs available on Plex's Docker image, such as: latest, public, plexpass",[15,1079,1080],{},"In my case, I've been a Plex Lifetime Premium member since 2013, so I use the tag: plexpass:",[110,1082,1084],{"className":112,"code":1083,"language":114,"meta":115,"style":115},"docker pull plexinc\u002Fpms-docker:plexpas\n",[117,1085,1086],{"__ignoreMap":115},[120,1087,1088,1090,1092],{"class":122,"line":123},[120,1089,784],{"class":126},[120,1091,1067],{"class":130},[120,1093,1094],{"class":130}," plexinc\u002Fpms-docker:plexpas\n",[15,1096,1097,1098,1101],{},"The difference is that every time my Plex (",[1099,1100],"plexpass",{},") container restarts, it will automatically update if a newer version is available. As for the \"latest\" version, it won't update, but the \"public\" version apparently does the same thing.",[15,1103,1104],{},"Run the Plex Docker as follows:",[110,1106,1108],{"className":112,"code":1107,"language":114,"meta":115,"style":115},"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",[117,1109,1110],{"__ignoreMap":115},[120,1111,1112,1114,1116,1119,1122,1124,1127,1130,1133,1136,1139,1141,1143,1146,1148,1151,1153,1156,1159,1162,1165,1168,1170,1173],{"class":122,"line":123},[120,1113,784],{"class":126},[120,1115,811],{"class":130},[120,1117,1118],{"class":130}," --name",[120,1120,1121],{"class":130}," plex",[120,1123,828],{"class":130},[120,1125,1126],{"class":130}," 32400:32400\u002Ftcp",[120,1128,1129],{"class":130}," -e",[120,1131,1132],{"class":130}," TZ=",[120,1134,1135],{"class":172},"\"",[120,1137,1138],{"class":130},"Europe\u002FParis",[120,1140,1135],{"class":172},[120,1142,1129],{"class":130},[120,1144,1145],{"class":130}," PLEX_CLAIM=",[120,1147,1135],{"class":172},[120,1149,1150],{"class":130},"claim-veFRSmSwMgpQEV1USsjE",[120,1152,1135],{"class":172},[120,1154,1155],{"class":130},"-e",[120,1157,1158],{"class":130}," -h",[120,1160,1161],{"class":130}," plex.kassianoff.fr",[120,1163,1164],{"class":130}," -v",[120,1166,1167],{"class":130}," \u002Fhome\u002Fseedbox\u002Fplex_config\u002F:\u002Fconfig",[120,1169,1164],{"class":130},[120,1171,1172],{"class":130}," \u002Fhome\u002Fseedbox\u002Fdownloads\u002F:\u002Fdata",[120,1174,1175],{"class":130}," plexinc\u002Fpms-docker:plexpass\n",[15,1177,1178,1179,1185],{},"Head to the following address: ",[1180,1181,1182],"a",{"href":1182,"rel":1183},"https:\u002F\u002Fplex.tv\u002Fclaim",[1184],"nofollow",", since in the settings you need to remember that a token is required to authenticate your container:",[15,1187,1188,1191],{},[21,1189,1190],{},"PLEX_CLAIM=","\"claim-veFRSmSwMgpQEV1USsjE\"",[15,1193,1194,1195,1198,1199,1202,1203,1208,1209,1212,1213,1216],{},"To finalize the ",[21,1196,1197],{},"Plex Server's"," configuration, connect via ",[21,1200,1201],{},"SSH"," to the server ",[1180,1204,1207],{"href":1205,"rel":1206},"https:\u002F\u002Fwww.kassianoff.fr\u002Fblog\u002Ffr\u002Finstallation-plex-media-server-sur-debian",[1184],"following this example",": ",[26,1210,1211],{},"\"PMS\" access without a graphical interface!"," I now invite you to check that your ",[21,1214,1215],{},"docker containers"," are working, like this:",[110,1218,1220],{"className":112,"code":1219,"language":114,"meta":115,"style":115},"docker ps\n",[117,1221,1222],{"__ignoreMap":115},[120,1223,1224,1226],{"class":122,"line":123},[120,1225,784],{"class":126},[120,1227,1228],{"class":130}," ps\n",[110,1230,1232],{"className":112,"code":1231,"language":114,"meta":115,"style":115},"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",[117,1233,1234,1260,1274,1339],{"__ignoreMap":115},[120,1235,1236,1239,1242,1245,1248,1251,1254,1257],{"class":122,"line":123},[120,1237,1238],{"class":126},"CONTAINER",[120,1240,1241],{"class":130}," ID",[120,1243,1244],{"class":130},"        IMAGE",[120,1246,1247],{"class":130},"                          COMMAND",[120,1249,1250],{"class":130},"                CREATED",[120,1252,1253],{"class":130},"             STATUS",[120,1255,1256],{"class":130},"              PORTS",[120,1258,1259],{"class":130},"                                                                            NAMES\n",[120,1261,1262,1265,1268,1271],{"class":122,"line":335},[120,1263,1264],{"class":126},"8afb950273f4",[120,1266,1267],{"class":130},"        docktorrentuser1:latest",[120,1269,1270],{"class":172},"   \"",[120,1272,1273],{"class":130},"\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",[120,1275,1276,1279,1281,1284,1287,1290,1293,1296,1299,1301,1304,1307,1310,1313,1316,1319,1321,1323,1326,1329,1331,1333,1336],{"class":122,"line":411},[120,1277,1278],{"class":130},"b6d9446d42d1        docktorrentuser2:latest   ",[120,1280,1135],{"class":172},[120,1282,1283],{"class":130},"\u002Fusr\u002Flocal\u002Fbin\u002Fdock",[120,1285,1286],{"class":739},"   2",[120,1288,1289],{"class":130}," days",[120,1291,1292],{"class":130}," ago",[120,1294,1295],{"class":130},"         Up",[120,1297,1298],{"class":739}," 2",[120,1300,1289],{"class":130},[120,1302,1303],{"class":130},"          9527\u002Ftcp,",[120,1305,1306],{"class":130}," 0.0.0.0:81",[120,1308,1309],{"class":407},"-",[120,1311,1312],{"class":172},">",[120,1314,1315],{"class":130},"80\u002Ftcp,",[120,1317,1318],{"class":130}," 0.0.0.0:9528",[120,1320,1309],{"class":407},[120,1322,1312],{"class":172},[120,1324,1325],{"class":130},"9527\u002Fudp,",[120,1327,1328],{"class":130}," 0.0.0.0:45567",[120,1330,1309],{"class":407},[120,1332,1312],{"class":172},[120,1334,1335],{"class":130},"45566\u002Ftcp",[120,1337,1338],{"class":130},"   docktorrentuser2\n",[120,1340,1341,1344,1347,1350,1353,1355,1357,1359,1361,1364,1366,1368,1371,1373,1375,1378],{"class":122,"line":432},[120,1342,1343],{"class":126},"b94927f31cd4",[120,1345,1346],{"class":130},"        plex:plexpass",[120,1348,1349],{"class":172}," \"",[120,1351,1352],{"class":130},"\u002Fstart.sh",[120,1354,1135],{"class":172},[120,1356,1298],{"class":739},[120,1358,1289],{"class":130},[120,1360,1292],{"class":130},[120,1362,1363],{"class":130}," Up",[120,1365,1298],{"class":739},[120,1367,1289],{"class":130},[120,1369,1370],{"class":130}," 0.0.0.0:32400",[120,1372,1309],{"class":407},[120,1374,1312],{"class":172},[120,1376,1377],{"class":130},"32400\u002Ftcp",[120,1379,1380],{"class":130}," plexseedbox\n",[15,1382,1383,1384,1387,1388,1391,1392,1395,1396,1399,1400,1403],{},"For better ",[21,1385,1386],{},"security",", use a ",[21,1389,1390],{},"reverse proxy"," in front of your ",[21,1393,1394],{},"dockers",", for example ",[21,1397,1398],{},"Pound",".",[1401,1402],"br",{},"\nHere's my configuration for two subdomains, user1 and user2, toward Docker's bridge interface:",[110,1405,1407],{"className":112,"code":1406,"language":114,"meta":115,"style":115},"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",[117,1408,1409,1414,1422,1430,1443,1454,1466,1471,1479,1484,1496,1501,1509,1517,1522,1527,1531,1542,1546,1552,1559,1563,1568],{"__ignoreMap":115},[120,1410,1411],{"class":122,"line":123},[120,1412,1413],{"class":126},"ListenHTTPS\n",[120,1415,1416,1419],{"class":122,"line":335},[120,1417,1418],{"class":126},"        Address",[120,1420,1421],{"class":130}," 62.XXX.XXX.XXX\n",[120,1423,1424,1427],{"class":122,"line":411},[120,1425,1426],{"class":126},"        Port",[120,1428,1429],{"class":739}," 443\n",[120,1431,1432,1435,1437,1440],{"class":122,"line":432},[120,1433,1434],{"class":126},"        Cert",[120,1436,1349],{"class":172},[120,1438,1439],{"class":130},"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser1.pem",[120,1441,1442],{"class":172},"\"\n",[120,1444,1445,1447,1449,1452],{"class":122,"line":438},[120,1446,1434],{"class":126},[120,1448,1349],{"class":172},[120,1450,1451],{"class":130},"\u002Fetc\u002Fpound\u002Fssl\u002Fwww\u002Fuser2.pem",[120,1453,1442],{"class":172},[120,1455,1456,1459,1461,1464],{"class":122,"line":452},[120,1457,1458],{"class":126},"        AddHeader",[120,1460,1349],{"class":172},[120,1462,1463],{"class":130},"X-Forwarded-Proto: https",[120,1465,1442],{"class":172},[120,1467,1468],{"class":122,"line":478},[120,1469,1470],{"class":331},"        ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:\n",[120,1472,1473,1476],{"class":122,"line":498},[120,1474,1475],{"class":126},"        xHTTP",[120,1477,1478],{"class":739},"           2\n",[120,1480,1481],{"class":122,"line":504},[120,1482,1483],{"class":126},"        Service\n",[120,1485,1486,1489,1491,1494],{"class":122,"line":524},[120,1487,1488],{"class":126},"                HeadRequire",[120,1490,1349],{"class":172},[120,1492,1493],{"class":130},"Host: .*user1.kassianoff.fr.*",[120,1495,1442],{"class":172},[120,1497,1498],{"class":122,"line":542},[120,1499,1500],{"class":126},"                BackEnd\n",[120,1502,1503,1506],{"class":122,"line":548},[120,1504,1505],{"class":126},"                        Address",[120,1507,1508],{"class":739}," 172.17.42.1\n",[120,1510,1511,1514],{"class":122,"line":566},[120,1512,1513],{"class":126},"                        Port",[120,1515,1516],{"class":739},"    80\n",[120,1518,1519],{"class":122,"line":595},[120,1520,1521],{"class":126},"                End\n",[120,1523,1524],{"class":122,"line":618},[120,1525,1526],{"class":126},"        End\n",[120,1528,1529],{"class":122,"line":624},[120,1530,1483],{"class":126},[120,1532,1533,1535,1537,1540],{"class":122,"line":636},[120,1534,1488],{"class":126},[120,1536,1349],{"class":172},[120,1538,1539],{"class":130},"Host: .*user2.kassianoff.fr.*",[120,1541,1442],{"class":172},[120,1543,1544],{"class":122,"line":661},[120,1545,1500],{"class":126},[120,1547,1548,1550],{"class":122,"line":679},[120,1549,1505],{"class":126},[120,1551,1508],{"class":739},[120,1553,1554,1556],{"class":122,"line":700},[120,1555,1513],{"class":126},[120,1557,1558],{"class":739}," 81\n",[120,1560,1561],{"class":122,"line":711},[120,1562,1521],{"class":126},[120,1564,1566],{"class":122,"line":1565},22,[120,1567,1526],{"class":126},[120,1569,1571],{"class":122,"line":1570},23,[120,1572,1573],{"class":126},"End\n",[15,1575,1576,1577,1399],{},"To generate a self-signed SSL certificate: ",[1180,1578,1579],{"href":1579,"rel":1580},"http:\u002F\u002Fdoc.ubuntu-fr.org\u002Ftutoriel\u002Fcomment_creer_un_certificat_ssl",[1184],[15,1582,1583,24,1586,24,1589,24,1594,24,1597,24,1602,24,1605,1610,1611],{},[21,1584,1585],{},"Success!",[26,1587,1588],{},"You're now ready to share all of the moment's",[26,1590,1591],{},[21,1592,1593],{},"Linux distributions",[26,1595,1596],{},"with your",[26,1598,1599],{},[21,1600,1601],{},"great seedbox",[26,1603,1604],{},"and stream your family videos on",[26,1606,1607],{},[21,1608,1609],{},"Plex",". ",[26,1612,1613],{},"Enjoy!",[10,1615,1617],{"id":1616},"conclusion","Conclusion",[15,1619,1620],{},"Docker here lets you quickly deploy a complete seedbox by combining the docktorrent (rTorrent\u002FruTorrent) and pms-docker (Plex Media Server) projects, without going through a long, tedious manual installation. This approach greatly simplifies migrating from one dedicated server to another, since all you need to do is rebuild the images and remount the data volumes. For security, adding a reverse proxy like Pound in front of the containers is recommended, especially to handle HTTPS and multi-user setups.",[1622,1623,1624],"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":115,"searchDepth":335,"depth":335,"links":1626},[1627,1628,1631,1632,1633,1634,1635],{"id":12,"depth":335,"text":13},{"id":31,"depth":335,"text":32,"children":1629},[1630],{"id":63,"depth":411,"text":64},{"id":82,"depth":335,"text":83},{"id":104,"depth":335,"text":105},{"id":255,"depth":335,"text":256},{"id":1047,"depth":335,"text":1048},{"id":1616,"depth":335,"text":1617},null,"\u002Fimages\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker\u002Fa7be954aab.png",true,"2015-05-09","A seedbox can be long and tedious to set up. Discover an easier, more flexible way with Docker.","md",{},"\u002Fen\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker",{"title":5,"description":1640},"creation-une-seedbox-rutorrent-plex-sous-docker","en\u002Fblog\u002Fcreation-une-seedbox-rutorrent-plex-sous-docker","-GyhiLydV6Mvq3WTdGEL7StmePHtZGUGBT8m45cVemY",[1649,1657,1665,1672,1678,1686,1694,1701],{"title":1650,"path":1651,"stem":1652,"date":1653,"cover":1654,"categories":1655,"children":-1},"Configuring a Counter-Strike GO Server on Linux","\u002Fen\u002Fblog\u002Fconfiguration-serveur-counter-strike-sous-linux","en\u002Fblog\u002Fconfiguration-serveur-counter-strike-sous-linux","2016-01-27","\u002Fimages\u002Fblog\u002Fconfiguration-serveur-counter-strike-sous-linux\u002F25d3c9f715.png",[1656],"Linux",{"title":1658,"path":1659,"stem":1660,"date":1661,"cover":1662,"categories":1663,"children":-1},"Choosing a Home Infrastructure","\u002Fen\u002Fblog\u002Fchoix-une-infrastructure-domestique","en\u002Fblog\u002Fchoix-une-infrastructure-domestique","2015-12-24","\u002Fimages\u002Fblog\u002Fchoix-une-infrastructure-domestique\u002Fedf65eed4e.png",[1664],"Réseau",{"title":1666,"path":1667,"stem":1668,"date":1669,"cover":1670,"categories":1671,"children":-1},"Configuring Debian 8 in Desktop Mode","\u002Fen\u002Fblog\u002Fconfiguration-debian-mode-desktop","en\u002Fblog\u002Fconfiguration-debian-mode-desktop","2015-08-29","\u002Fimages\u002Fblog\u002Fconfiguration-debian-mode-desktop\u002F463de156f7.png",[1656],{"title":1673,"path":1674,"stem":1675,"date":1676,"cover":1677,"categories":1636,"children":-1},"Hack In Paris 2015: a Nice X11 Backdoor","\u002Fen\u002Fblog\u002Fhack-paris-2015-une-belle-backdoor-x11","en\u002Fblog\u002Fhack-paris-2015-une-belle-backdoor-x11","2015-07-26","\u002Fimages\u002Fblog\u002Fhack-paris-2015-une-belle-backdoor-x11\u002Fd1aaf6a60c.jpg",{"title":1679,"path":1680,"stem":1681,"date":1682,"cover":1683,"categories":1684,"children":-1},"Hack In Paris and Nuit du Hack, June 15-21, 2015","\u002Fen\u002Fblog\u002Fhack-paris-nuit-hack-juin-2015","en\u002Fblog\u002Fhack-paris-nuit-hack-juin-2015","2015-05-05","\u002Fimages\u002Fblog\u002Fhack-paris-nuit-hack-juin-2015\u002Fb9dd3c5969.png",[1685],"Évènement",{"title":1687,"path":1688,"stem":1689,"date":1690,"cover":1691,"categories":1692,"children":-1},"Onda Tablet: Changing the Default Language","\u002Fen\u002Fblog\u002Fonda-tablet-modifier-langue-par-defaut","en\u002Fblog\u002Fonda-tablet-modifier-langue-par-defaut","2015-04-16","\u002Fimages\u002Fblog\u002Fonda-tablet-modifier-langue-par-defaut\u002F3e9eb9200b.jpg",[1693],"Microsoft",{"title":1695,"path":1696,"stem":1697,"date":1698,"cover":1699,"categories":1700,"children":-1},"My Feedback on Training at Greta-Viva5 in Valence: My BTS SIO Study Projects","\u002Fen\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-mes-projets-etudes-bts-sio","en\u002Fblog\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",[1685],{"title":1702,"path":1703,"stem":1704,"date":1705,"cover":1706,"categories":1707,"children":-1},"Documentation No. 1","\u002Fen\u002Fblog\u002Fbts-documentation-numero-1","en\u002Fblog\u002Fbts-documentation-numero-1","2015-04-13","\u002Fimages\u002Fblog\u002Fbts-documentation-numero-1\u002Fc5b263af8b.jpg",[1708],"BTS",[],1786644889384]