[{"data":1,"prerenderedAt":1287},["ShallowReactive",2],{"blog-\u002Fen\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2":3,"blog-\u002Fen\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2-surround":1230,"blog-\u002Fen\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2-certifications":1286},{"id":4,"title":5,"body":6,"categories":1219,"cover":1220,"cover_contain":464,"credly_badge_id":1219,"date":1221,"description":1222,"extension":1223,"meta":1224,"navigation":464,"path":1225,"related_certifications":1219,"seo":1226,"slug":1227,"stem":1228,"__hash__":1229},"blog\u002Fen\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2.md","Configuring ruTorrent's Web Interface with Apache2",{"type":7,"value":8,"toc":1206},"minimark",[9,14,18,22,65,70,83,111,114,143,160,164,175,191,194,231,281,284,290,294,300,314,317,331,347,409,412,416,419,428,568,580,779,796,800,814,832,842,858,871,875,896,1113,1119,1123,1139,1151,1154,1173,1176,1189,1195,1199,1202],[10,11,13],"h2",{"id":12},"real-world-use-case","Real-world use case",[15,16,17],"p",{},"You want to manage your downloads from a browser: here's how to configure ruTorrent's web interface with Apache2.",[10,19,21],{"id":20},"the-rutorrent-interface","The ruTorrent interface",[15,23,24,28,29,32,33,36,37,40,41,44,45,48,49,52,53,55,56,58,59,61,62,64],{},[25,26,27],"strong",{},"ruTorrent"," is a ",[25,30,31],{},"web"," ",[25,34,35],{},"interface",", or more simply a dynamic web page.",[38,39],"br",{},"\nIt brings the ",[25,42,43],{},"BitTorrent"," client named ",[25,46,47],{},"rTorrent"," (usable only in ",[25,50,51],{},"CLI",") to the web.",[38,54],{},"\nWe generally talk about the ",[25,57,47],{},"\u002F",[25,60,27],{}," pair, and they're developed independently.",[38,63],{},"\nI discovered them in 2011 with version 3, free and performant, shape it in your own image!",[66,67,69],"h3",{"id":68},"prerequisites-for-adopting-rutorrent","Prerequisites for adopting ruTorrent",[15,71,72,73,76,77,79,80,82],{},"Before diving into installing this interface, you'll need a ",[25,74,75],{},"web server","!",[38,78],{},"\nAlso, don't forget that ruTorrent only works with the BitTorrent client: rTorrent.",[38,81],{},"\nI recommend having the following elements installed and working on your Linux server:",[84,85,86,94,100],"ul",{},[87,88,89,90,93],"li",{},"The web server up and running: ",[25,91,92],{},"Apache2"," (in our case).",[87,95,96,97,99],{},"The BitTorrent client: ",[25,98,47],{}," configured for a single user.",[87,101,102,103,106,107,110],{},"An up-to-date ",[25,104,105],{},"Linux distribution",", preferably a stable version (",[25,108,109],{},"Ubuntu LTS"," for example).",[15,112,113],{},"One last thing: here are the required dependencies to install ruTorrent.",[115,116,121],"pre",{"className":117,"code":118,"language":119,"meta":120,"style":120},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight"," apt-get install subversion libapache2-mod-scgi\n","bash","",[122,123,124],"code",{"__ignoreMap":120},[125,126,129,133,137,140],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"sBMFI"," apt-get",[125,134,136],{"class":135},"sfazB"," install",[125,138,139],{"class":135}," subversion",[125,141,142],{"class":135}," libapache2-mod-scgi\n",[15,144,145,146,149,150,153,154,156],{},"The ",[25,147,148],{},"subversion"," package will be used to install and upgrade ruTorrent, while ",[25,151,152],{},"libapache2-mod-scgi"," will let it interact with rtorrent.",[38,155],{},[157,158,159],"em",{},"The installation and configuration take place in the default directory: \u002Fvar\u002Fwww",[10,161,163],{"id":162},"installing-rutorrent","Installing ruTorrent",[15,165,166,167,170,171,174],{},"The installation is very simple, we're going to download the ",[25,168,169],{},"repositories"," from ",[25,172,173],{},"SVN",".",[115,176,178],{"className":117,"code":177,"language":119,"meta":120,"style":120},"svn co http:\u002F\u002Frutorrent.googlecode.com\u002Fsvn\u002Ftrunk\u002Frutorrent\n",[122,179,180],{"__ignoreMap":120},[125,181,182,185,188],{"class":127,"line":128},[125,183,184],{"class":131},"svn",[125,186,187],{"class":135}," co",[125,189,190],{"class":135}," http:\u002F\u002Frutorrent.googlecode.com\u002Fsvn\u002Ftrunk\u002Frutorrent\n",[15,192,193],{},"Once the repositories are downloaded, we get the following file structure in the \"rutorrent\" folder:",[115,195,197],{"className":117,"code":196,"language":119,"meta":120,"style":120},"conf  css  favicon.ico  images  index.html  js  lang  php  plugins  share\n",[122,198,199],{"__ignoreMap":120},[125,200,201,204,207,210,213,216,219,222,225,228],{"class":127,"line":128},[125,202,203],{"class":131},"conf",[125,205,206],{"class":135},"  css",[125,208,209],{"class":135},"  favicon.ico",[125,211,212],{"class":135},"  images",[125,214,215],{"class":135},"  index.html",[125,217,218],{"class":135},"  js",[125,220,221],{"class":135},"  lang",[125,223,224],{"class":135},"  php",[125,226,227],{"class":135},"  plugins",[125,229,230],{"class":135},"  share\n",[84,232,233,239,245,251,257,263,269,275],{},[87,234,235,236,238],{},"The \"",[25,237,203],{},"\" directory contains all of ruTorrent's configuration, aside from plugins.",[87,240,235,241,244],{},[25,242,243],{},"css","\" directory contains ruTorrent's CSS rule configuration.",[87,246,235,247,250],{},[25,248,249],{},"images","\" directory contains all the favicons and various icons from ruTorrent.",[87,252,235,253,256],{},[25,254,255],{},"js","\" directory contains the JavaScript code that lets you modify how ruTorrent behaves.",[87,258,235,259,262],{},[25,260,261],{},"lang","\" directory contains 20+ different languages.",[87,264,235,265,268],{},[25,266,267],{},"php","\" directory contains the PHP code that drives the dynamic content display.",[87,270,235,271,274],{},[25,272,273],{},"plugins","\" directory is dedicated to ruTorrent's plugins, there are a ton of them!",[87,276,235,277,280],{},[25,278,279],{},"share","\" directory is generally used for managing and configuring users.",[15,282,283],{},"The ruTorrent interface looks like this:",[15,285,286],{},[287,288],"img",{"alt":120,"src":289},"\u002Fimages\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2\u002Fddd13f539c.png",[10,291,293],{"id":292},"installing-plugins","Installing plugins",[15,295,296,297,299],{},"Head to ruTorrent's ",[25,298,273],{}," directory:",[115,301,303],{"className":117,"code":302,"language":119,"meta":120,"style":120},"cd \u002Fvar\u002Fwww\u002Frutorrent\u002Fplugins\n",[122,304,305],{"__ignoreMap":120},[125,306,307,311],{"class":127,"line":128},[125,308,310],{"class":309},"s2Zo4","cd",[125,312,313],{"class":135}," \u002Fvar\u002Fwww\u002Frutorrent\u002Fplugins\n",[15,315,316],{},"Then all that's left is to follow this pattern:",[115,318,320],{"className":117,"code":319,"language":119,"meta":120,"style":120},"svn co http:\u002F\u002Frutorrent.googlecode.com\u002Fsvn\u002Ftrunk\u002Fplugins\u002FPLUGIN_NAME\n",[122,321,322],{"__ignoreMap":120},[125,323,324,326,328],{"class":127,"line":128},[125,325,184],{"class":131},[125,327,187],{"class":135},[125,329,330],{"class":135}," http:\u002F\u002Frutorrent.googlecode.com\u002Fsvn\u002Ftrunk\u002Fplugins\u002FPLUGIN_NAME\n",[15,332,333,336,337,344,346],{},[25,334,335],{},"ruTorrent's plugins"," are available on the ",[338,339,343],"a",{"href":340,"rel":341},"http:\u002F\u002Fcode.google.com\u002Fp\u002Frutorrent\u002Fwiki\u002FPlugins",[342],"nofollow","official wiki.",[38,345],{},"\nI recommend using plugins, especially the ones in this list, which are really interesting:",[84,348,349,355,361,367,373,379,385,391,397,403],{},[87,350,351,354],{},[25,352,353],{},"Cookies",": lets you store cookies from a third-party site.",[87,356,357,360],{},[25,358,359],{},"Diskspace",": shows the current state of your partition, i.e. the home directory.",[87,362,363,366],{},[25,364,365],{},"Cpuload",": shows the CPU load over a period of X seconds.",[87,368,369,372],{},[25,370,371],{},"Erasedata",": adds \"erase and delete data\" to the right-click context menu.",[87,374,375,378],{},[25,376,377],{},"Traffic",": lets you track a file's transfer rate over time once added.",[87,380,381,384],{},[25,382,383],{},"Getdir",": lets you download the file as a direct download.",[87,386,387,390],{},[25,388,389],{},"Loginmgr",": adds a logout button to the main menu.",[87,392,393,396],{},[25,394,395],{},"Extsearch",": a whole set of new trackers become available in ruTorrent's search.",[87,398,399,402],{},[25,400,401],{},"Goip",": lets you run a whois on a specific client (uploader\u002Fdownloader).",[87,404,405,408],{},[25,406,407],{},"Noty",": shows a small pop-up on your interface when a torrent is added.",[15,410,411],{},"There are a ton of other plugins available on the web, the best approach is still to develop your own.",[10,413,415],{"id":414},"configuring-your-vhost","Configuring your vhost",[15,417,418],{},"Vhosts are important, don't overlook them. Here are two versions (http and https):",[84,420,421],{},[87,422,423,424,427],{},"An ",[25,425,426],{},"http vhost",":",[115,429,431],{"className":117,"code":430,"language":119,"meta":120,"style":120},"ServerName my_domain.tld\n   ServerAdmin webmaster@localhost\n   DocumentRoot \u002Fvar\u002Fwww\u002F\n\n   Redirect permanent \u002F https:\u002F\u002Fmy_domain.tld\n\n   Options Indexes FollowSymLinks MultiViews\n   AllowOverride None\n   Order allow,deny\n   allow from all\n        \n   ErrorLog \u002Fvar\u002Flog\u002Fapache2\u002Ferror.log\n   LogLevel warn\n   CustomLog \u002Fvar\u002Flog\u002Fapache2\u002Faccess.log combined\n",[122,432,433,441,450,459,466,481,486,501,510,519,531,538,547,556],{"__ignoreMap":120},[125,434,435,438],{"class":127,"line":128},[125,436,437],{"class":131},"ServerName",[125,439,440],{"class":135}," my_domain.tld\n",[125,442,444,447],{"class":127,"line":443},2,[125,445,446],{"class":131},"   ServerAdmin",[125,448,449],{"class":135}," webmaster@localhost\n",[125,451,453,456],{"class":127,"line":452},3,[125,454,455],{"class":131},"   DocumentRoot",[125,457,458],{"class":135}," \u002Fvar\u002Fwww\u002F\n",[125,460,462],{"class":127,"line":461},4,[125,463,465],{"emptyLinePlaceholder":464},true,"\n",[125,467,469,472,475,478],{"class":127,"line":468},5,[125,470,471],{"class":131},"   Redirect",[125,473,474],{"class":135}," permanent",[125,476,477],{"class":135}," \u002F",[125,479,480],{"class":135}," https:\u002F\u002Fmy_domain.tld\n",[125,482,484],{"class":127,"line":483},6,[125,485,465],{"emptyLinePlaceholder":464},[125,487,489,492,495,498],{"class":127,"line":488},7,[125,490,491],{"class":131},"   Options",[125,493,494],{"class":135}," Indexes",[125,496,497],{"class":135}," FollowSymLinks",[125,499,500],{"class":135}," MultiViews\n",[125,502,504,507],{"class":127,"line":503},8,[125,505,506],{"class":131},"   AllowOverride",[125,508,509],{"class":135}," None\n",[125,511,513,516],{"class":127,"line":512},9,[125,514,515],{"class":131},"   Order",[125,517,518],{"class":135}," allow,deny\n",[125,520,522,525,528],{"class":127,"line":521},10,[125,523,524],{"class":131},"   allow",[125,526,527],{"class":135}," from",[125,529,530],{"class":135}," all\n",[125,532,534],{"class":127,"line":533},11,[125,535,537],{"class":536},"sTEyZ","        \n",[125,539,541,544],{"class":127,"line":540},12,[125,542,543],{"class":131},"   ErrorLog",[125,545,546],{"class":135}," \u002Fvar\u002Flog\u002Fapache2\u002Ferror.log\n",[125,548,550,553],{"class":127,"line":549},13,[125,551,552],{"class":131},"   LogLevel",[125,554,555],{"class":135}," warn\n",[125,557,559,562,565],{"class":127,"line":558},14,[125,560,561],{"class":131},"   CustomLog",[125,563,564],{"class":135}," \u002Fvar\u002Flog\u002Fapache2\u002Faccess.log",[125,566,567],{"class":135}," combined\n",[84,569,570],{},[87,571,572,573,576,577,427],{},"A ",[25,574,575],{},"vhost"," secured with ",[25,578,579],{},"https",[115,581,583],{"className":117,"code":582,"language":119,"meta":120,"style":120},"ServerName my_domain.tld\n  ServerAdmin webmaster@localhost\n  DocumentRoot \u002Fvar\u002Fwww\u002Frutorrent\n        \n  SSLEngine on\n  SSLCertificateFile \u002Fetc\u002Fapache2\u002Fssl\u002Fssl.crt\n  SSLCertificateKeyFile \u002Fetc\u002Fapache2\u002Fssl\u002Fssl.key\n        \n  Options Indexes FollowSymLinks MultiViews\n   AllowOverride None\n   Order allow,deny\n   allow from all\n        \n\n  ErrorLog \u002Fvar\u002Flog\u002Fapache2\u002Ferror.log\n   LogLevel warn\n   CustomLog \u002Fvar\u002Flog\u002Fapache2\u002Faccess.log combined\n        \n   AuthType Digest\n   AuthName \"your_text\"\n\n   AuthDigestProvider file\n   AuthUserFile \u002Fetc\u002Fapache2\u002Fpasswords\n   Require valid-user\n   SetEnv R_ENV \"\u002Fvar\u002Fwww\u002F\"\n",[122,584,585,591,598,606,610,618,626,634,638,649,655,661,669,673,677,685,692,701,706,715,731,736,745,754,763],{"__ignoreMap":120},[125,586,587,589],{"class":127,"line":128},[125,588,437],{"class":131},[125,590,440],{"class":135},[125,592,593,596],{"class":127,"line":443},[125,594,595],{"class":131},"  ServerAdmin",[125,597,449],{"class":135},[125,599,600,603],{"class":127,"line":452},[125,601,602],{"class":131},"  DocumentRoot",[125,604,605],{"class":135}," \u002Fvar\u002Fwww\u002Frutorrent\n",[125,607,608],{"class":127,"line":461},[125,609,537],{"class":536},[125,611,612,615],{"class":127,"line":468},[125,613,614],{"class":131},"  SSLEngine",[125,616,617],{"class":135}," on\n",[125,619,620,623],{"class":127,"line":483},[125,621,622],{"class":131},"  SSLCertificateFile",[125,624,625],{"class":135}," \u002Fetc\u002Fapache2\u002Fssl\u002Fssl.crt\n",[125,627,628,631],{"class":127,"line":488},[125,629,630],{"class":131},"  SSLCertificateKeyFile",[125,632,633],{"class":135}," \u002Fetc\u002Fapache2\u002Fssl\u002Fssl.key\n",[125,635,636],{"class":127,"line":503},[125,637,537],{"class":536},[125,639,640,643,645,647],{"class":127,"line":512},[125,641,642],{"class":131},"  Options",[125,644,494],{"class":135},[125,646,497],{"class":135},[125,648,500],{"class":135},[125,650,651,653],{"class":127,"line":521},[125,652,506],{"class":131},[125,654,509],{"class":135},[125,656,657,659],{"class":127,"line":533},[125,658,515],{"class":131},[125,660,518],{"class":135},[125,662,663,665,667],{"class":127,"line":540},[125,664,524],{"class":131},[125,666,527],{"class":135},[125,668,530],{"class":135},[125,670,671],{"class":127,"line":549},[125,672,537],{"class":536},[125,674,675],{"class":127,"line":558},[125,676,465],{"emptyLinePlaceholder":464},[125,678,680,683],{"class":127,"line":679},15,[125,681,682],{"class":131},"  ErrorLog",[125,684,546],{"class":135},[125,686,688,690],{"class":127,"line":687},16,[125,689,552],{"class":131},[125,691,555],{"class":135},[125,693,695,697,699],{"class":127,"line":694},17,[125,696,561],{"class":131},[125,698,564],{"class":135},[125,700,567],{"class":135},[125,702,704],{"class":127,"line":703},18,[125,705,537],{"class":536},[125,707,709,712],{"class":127,"line":708},19,[125,710,711],{"class":131},"   AuthType",[125,713,714],{"class":135}," Digest\n",[125,716,718,721,725,728],{"class":127,"line":717},20,[125,719,720],{"class":131},"   AuthName",[125,722,724],{"class":723},"sMK4o"," \"",[125,726,727],{"class":135},"your_text",[125,729,730],{"class":723},"\"\n",[125,732,734],{"class":127,"line":733},21,[125,735,465],{"emptyLinePlaceholder":464},[125,737,739,742],{"class":127,"line":738},22,[125,740,741],{"class":131},"   AuthDigestProvider",[125,743,744],{"class":135}," file\n",[125,746,748,751],{"class":127,"line":747},23,[125,749,750],{"class":131},"   AuthUserFile",[125,752,753],{"class":135}," \u002Fetc\u002Fapache2\u002Fpasswords\n",[125,755,757,760],{"class":127,"line":756},24,[125,758,759],{"class":131},"   Require",[125,761,762],{"class":135}," valid-user\n",[125,764,766,769,772,774,777],{"class":127,"line":765},25,[125,767,768],{"class":131},"   SetEnv",[125,770,771],{"class":135}," R_ENV",[125,773,724],{"class":723},[125,775,776],{"class":135},"\u002Fvar\u002Fwww\u002F",[125,778,730],{"class":723},[15,780,781,782,785,786,170,789,174],{},"Don't forget to generate a ",[25,783,784],{},"self-signed certificate"," or use a ",[25,787,788],{},"free certificate",[338,790,793],{"href":791,"rel":792},"https:\u002F\u002Fcert.startcom.org\u002F?lang=fr",[342],[25,794,795],{},"startcom",[10,797,799],{"id":798},"basic-rutorrent-security","Basic ruTorrent security",[15,801,802,803,806,807,809,810,813],{},"Your server can be exposed to anyone on the web, adding an ",[25,804,805],{},"htaccess"," is recommended.",[38,808],{},"\nThe most practical option for this is Apache2's ",[25,811,812],{},"htdigest"," option:",[115,815,817],{"className":117,"code":816,"language":119,"meta":120,"style":120},"htdigest \u002Fetc\u002Fapache2\u002Fpasswords your_text ffonaissak\n",[122,818,819],{"__ignoreMap":120},[125,820,821,823,826,829],{"class":127,"line":128},[125,822,812],{"class":131},[125,824,825],{"class":135}," \u002Fetc\u002Fapache2\u002Fpasswords",[125,827,828],{"class":135}," your_text",[125,830,831],{"class":135}," ffonaissak\n",[15,833,834,835,838,839,841],{},"The command's result is saved in the ",[25,836,837],{},"passwords"," file.",[38,840],{},"\nYou'll need to change the following value in your vhost (https):",[115,843,845],{"className":117,"code":844,"language":119,"meta":120,"style":120},"AuthName \"your_text\"\n",[122,846,847],{"__ignoreMap":120},[125,848,849,852,854,856],{"class":127,"line":128},[125,850,851],{"class":131},"AuthName",[125,853,724],{"class":723},[125,855,727],{"class":135},[125,857,730],{"class":723},[15,859,860,861,863,864,58,867,870],{},"When opening ",[25,862,27],{},", you can then enter your ",[25,865,866],{},"login",[25,868,869],{},"password"," pair.",[10,872,874],{"id":873},"configuring-several-users","Configuring several users",[15,876,877,878,880,881,884,885,888,889,892,893,895],{},"It's possible to have several accounts on ruTorrent, and that's honestly great!",[38,879],{},"\nApache2's ",[25,882,883],{},"SCGI"," configuration and ruTorrent's structure allow for ",[25,886,887],{},"multi","–",[25,890,891],{},"user"," setups.",[38,894],{},"\nWe'll configure a second user in addition to the one already there.",[897,898,899,910,975,996,1066],"ol",{},[87,900,901,902,905,906,909],{},"Add the ",[25,903,904],{},"second user"," with the ",[25,907,908],{},"htdigest command"," shown earlier.",[87,911,912,913,915,916,58,919,921,922,935,145,937,940,941],{},"Add your various ",[25,914,883],{}," mounts so that ",[25,917,918],{},"rtorrent",[25,920,27],{}," can communicate.",[115,923,925],{"className":117,"code":924,"language":119,"meta":120,"style":120},"nano \u002Fetc\u002Fapache2\u002Fapache2.conf\n",[122,926,927],{"__ignoreMap":120},[125,928,929,932],{"class":127,"line":128},[125,930,931],{"class":131},"nano",[125,933,934],{"class":135}," \u002Fetc\u002Fapache2\u002Fapache2.conf\n",[38,936],{},[25,938,939],{},"SCGI mounts"," will be set at the end of the file, like this:",[115,942,944],{"className":117,"code":943,"language":119,"meta":120,"style":120},"SCGIMount \u002FRPC2 127.0.0.1:5000\nSCGIMount \u002FRPC3 127.0.0.1:5001\nservername localhost\n",[122,945,946,957,967],{"__ignoreMap":120},[125,947,948,951,954],{"class":127,"line":128},[125,949,950],{"class":131},"SCGIMount",[125,952,953],{"class":135}," \u002FRPC2",[125,955,956],{"class":135}," 127.0.0.1:5000\n",[125,958,959,961,964],{"class":127,"line":443},[125,960,950],{"class":131},[125,962,963],{"class":135}," \u002FRPC3",[125,965,966],{"class":135}," 127.0.0.1:5001\n",[125,968,969,972],{"class":127,"line":452},[125,970,971],{"class":131},"servername",[125,973,974],{"class":135}," localhost\n",[87,976,977,978,983],{},"Configure user number 2 in ",[157,979,980],{},[25,981,982],{},"\u002Fvar\u002Fwww\u002Frutorrent\u002Fconf\u002Fusers\u002F",[115,984,986],{"className":117,"code":985,"language":119,"meta":120,"style":120},"mkdir user2\n",[122,987,988],{"__ignoreMap":120},[125,989,990,993],{"class":127,"line":128},[125,991,992],{"class":131},"mkdir",[125,994,995],{"class":135}," user2\n",[87,997,998,999,1002,1003,1006,1007,1023,1025,1026,1029,1030,1033,1034],{},"Copy the \"php\" ",[25,1000,1001],{},"configuration"," file already present in ",[157,1004,1005],{},"\u002Fvar\u002Fwww\u002Frutorrent\u002Fco","nf\u002F",[115,1008,1010],{"className":117,"code":1009,"language":119,"meta":120,"style":120},"cp config.php users\u002Fuser2\n",[122,1011,1012],{"__ignoreMap":120},[125,1013,1014,1017,1020],{"class":127,"line":128},[125,1015,1016],{"class":131},"cp",[125,1018,1019],{"class":135}," config.php",[125,1021,1022],{"class":135}," users\u002Fuser2\n",[38,1024],{},"Make the ",[25,1027,1028],{},"ownership"," and ",[25,1031,1032],{},"permission"," changes as shown below:",[115,1035,1037],{"className":117,"code":1036,"language":119,"meta":120,"style":120},"chown -R www-data:www-data \u002Fvar\u002Fwww\u002Frutorrent\u002Fconf\u002Fusers\u002F\nchmod -R 777 \u002Fvar\u002Fwww\u002Frutorrent\u002Fconf\u002Fusers\u002F\n",[122,1038,1039,1053],{"__ignoreMap":120},[125,1040,1041,1044,1047,1050],{"class":127,"line":128},[125,1042,1043],{"class":131},"chown",[125,1045,1046],{"class":135}," -R",[125,1048,1049],{"class":135}," www-data:www-data",[125,1051,1052],{"class":135}," \u002Fvar\u002Fwww\u002Frutorrent\u002Fconf\u002Fusers\u002F\n",[125,1054,1055,1058,1060,1064],{"class":127,"line":443},[125,1056,1057],{"class":131},"chmod",[125,1059,1046],{"class":135},[125,1061,1063],{"class":1062},"sbssI"," 777",[125,1065,1052],{"class":135},[87,1067,1068,1069,32,1072,32,1074,1077,1078,427,1081,1108,1110],{},"Edit the second ",[25,1070,1071],{},"user's",[25,1073,1001],{},[25,1075,1076],{},"file"," and its ",[25,1079,1080],{},"variables",[115,1082,1086],{"className":1083,"code":1084,"language":1085,"meta":120,"style":120},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","nano user\u002Fuser1\u002Fconfig.php\n   $scgi_port = 5001;\n   $scgi_host = \"127.0.0.1\";\n   $XMLRPCMountPoint = \"\u002FRPC3\";\n","powershell",[122,1087,1088,1093,1098,1103],{"__ignoreMap":120},[125,1089,1090],{"class":127,"line":128},[125,1091,1092],{},"nano user\u002Fuser1\u002Fconfig.php\n",[125,1094,1095],{"class":127,"line":443},[125,1096,1097],{},"   $scgi_port = 5001;\n",[125,1099,1100],{"class":127,"line":452},[125,1101,1102],{},"   $scgi_host = \"127.0.0.1\";\n",[125,1104,1105],{"class":127,"line":461},[125,1106,1107],{},"   $XMLRPCMountPoint = \"\u002FRPC3\";\n",[38,1109],{},[157,1111,1112],{},"These are the \"SCGI\" and \"RPCmount\" mounts shown earlier in Apache2.",[15,1114,1115,1116,1118],{},"Keep in mind that every new user needs to have a personal directory with the \"file.php\".",[38,1117],{},"\nDon't forget rTorrent needs to be configured, I'm not covering the BitTorrent client's configuration here.",[10,1120,1122],{"id":1121},"updating-rutorrent","Updating ruTorrent",[15,1124,145,1125,1128,1129,1131,1132,1135,1136,1138],{},[25,1126,1127],{},"SVN system"," makes updating your ruTorrent interface very simple.",[38,1130],{},"\nIt's recommended to shut down the web server: ",[157,1133,1134],{},"(\u002Fetc\u002Finit.d\u002Fapache2 stop",") to avoid a crash!",[38,1137],{},"\nThen all you need to do is go to the root of your ruTorrent directory and run:",[115,1140,1142],{"className":117,"code":1141,"language":119,"meta":120,"style":120},"svn up\n",[122,1143,1144],{"__ignoreMap":120},[125,1145,1146,1148],{"class":127,"line":128},[125,1147,184],{"class":131},[125,1149,1150],{"class":135}," up\n",[15,1152,1153],{},"The update is in progress, wait for the following message:",[115,1155,1157],{"className":117,"code":1156,"language":119,"meta":120,"style":120},"Updated to revision 2471.\n",[122,1158,1159],{"__ignoreMap":120},[125,1160,1161,1164,1167,1170],{"class":127,"line":128},[125,1162,1163],{"class":131},"Updated",[125,1165,1166],{"class":135}," to",[125,1168,1169],{"class":135}," revision",[125,1171,1172],{"class":135}," 2471.\n",[15,1174,1175],{},"Once done, restart your web server:",[115,1177,1179],{"className":117,"code":1178,"language":119,"meta":120,"style":120},"\u002Fetc\u002Finit.d\u002Fapache2 start\n",[122,1180,1181],{"__ignoreMap":120},[125,1182,1183,1186],{"class":127,"line":128},[125,1184,1185],{"class":131},"\u002Fetc\u002Finit.d\u002Fapache2",[125,1187,1188],{"class":135}," start\n",[15,1190,1191,1192,1194],{},"That wraps up discovering ruTorrent, I invite you to head to the official website.",[38,1193],{},"\nIf you run into configuration issues with ruTorrent, feel free to leave a comment.",[10,1196,1198],{"id":1197},"conclusion","Conclusion",[15,1200,1201],{},"This ruTorrent configuration with Apache2 covers installing via SVN, managing plugins, setting up HTTP\u002FHTTPS vhosts, securing access with digest authentication, as well as multi-user management via SCGI. This web interface makes using rTorrent much more accessible day to day, while remaining customizable thanks to its many plugins. Be sure to properly restrict access with htdigest, especially if the server is publicly exposed on the internet.",[1203,1204,1205],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":120,"searchDepth":443,"depth":443,"links":1207},[1208,1209,1212,1213,1214,1215,1216,1217,1218],{"id":12,"depth":443,"text":13},{"id":20,"depth":443,"text":21,"children":1210},[1211],{"id":68,"depth":452,"text":69},{"id":162,"depth":443,"text":163},{"id":292,"depth":443,"text":293},{"id":414,"depth":443,"text":415},{"id":798,"depth":443,"text":799},{"id":873,"depth":443,"text":874},{"id":1121,"depth":443,"text":1122},{"id":1197,"depth":443,"text":1198},null,"\u002Fimages\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2\u002F672919258b.png","2014-03-31","Discover ruTorrent's interface! A configuration with the Apache2 web server. Managing plugins, vhosts, security, and multi-user support.","md",{},"\u002Fen\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2",{"title":5,"description":1222},"configurer-interface-web-rutorrent-avec-apache2","en\u002Fblog\u002Fconfigurer-interface-web-rutorrent-avec-apache2","0epfnpg4b8Oknx6dpWOoETY0kjGgN7dz3TdlzmXi_Eg",[1231,1237,1245,1252,1260,1267,1273,1280],{"title":1232,"path":1233,"stem":1234,"date":1235,"cover":1236,"categories":1219,"children":-1},"Security Patches and Updates on VMware ESXi 5","\u002Fen\u002Fblog\u002Fpatchs-securite-mises-jour-sous-vmware-esxi","en\u002Fblog\u002Fpatchs-securite-mises-jour-sous-vmware-esxi","2014-07-15","\u002Fimages\u002Fblog\u002Fpatchs-securite-mises-jour-sous-vmware-esxi\u002Fd8c6089e77.png",{"title":1238,"path":1239,"stem":1240,"date":1241,"cover":1242,"categories":1243,"children":-1},"Migrating from Vyatta 6.6R1 to VyOS Hydrogen","\u002Fen\u002Fblog\u002Fmigration-vyatta-6r1-vers-vyos-hydrogen","en\u002Fblog\u002Fmigration-vyatta-6r1-vers-vyos-hydrogen","2014-07-14","\u002Fimages\u002Fblog\u002Fmigration-vyatta-6r1-vers-vyos-hydrogen\u002F8a3fd53886.png",[1244],"Réseau",{"title":1246,"path":1247,"stem":1248,"date":1249,"cover":1250,"categories":1251,"children":-1},"Configuring an SRX100 Gateway via J-Web","\u002Fen\u002Fblog\u002Fconfiguration-une-passerelle-srx100-sous-web","en\u002Fblog\u002Fconfiguration-une-passerelle-srx100-sous-web","2014-07-10","\u002Fimages\u002Fblog\u002Fconfiguration-une-passerelle-srx100-sous-web\u002F1b4814003c.jpg",[1244],{"title":1253,"path":1254,"stem":1255,"date":1256,"cover":1257,"categories":1258,"children":-1},"Hack In Paris and Nuit du Hack, June 26-29, 2014","\u002Fen\u002Fblog\u002Fhack-paris-nuit-hack-juin-2014","en\u002Fblog\u002Fhack-paris-nuit-hack-juin-2014","2014-04-11","\u002Fimages\u002Fblog\u002Fhack-paris-nuit-hack-juin-2014\u002Fd1c6cbea4e.jpg",[1259],"Évènement",{"title":1261,"path":1262,"stem":1263,"date":1264,"cover":1265,"categories":1266,"children":-1},"The Destruction of Net Neutrality Is Underway: Get Angry!","\u002Fen\u002Fblog\u002Fdestruction-neutralite-net-est-marche-indignez-vous","en\u002Fblog\u002Fdestruction-neutralite-net-est-marche-indignez-vous","2014-03-23","\u002Fimages\u002Fblog\u002Fdestruction-neutralite-net-est-marche-indignez-vous\u002Fddb702d91a.jpg",[1259],{"title":1268,"path":1269,"stem":1270,"date":1271,"cover":1272,"categories":1219,"children":-1},"Jailing an SSH User on Linux","\u002Fen\u002Fblog\u002Femprisonner-utilisateur-ssh-sous-linux","en\u002Fblog\u002Femprisonner-utilisateur-ssh-sous-linux","2014-02-23","\u002Fimages\u002Fblog\u002Femprisonner-utilisateur-ssh-sous-linux\u002F5e5571284a.png",{"title":1274,"path":1275,"stem":1276,"date":1277,"cover":1278,"categories":1279,"children":-1},"Discover the Magic: Adobe Creative Cloud!","\u002Fen\u002Fblog\u002Fdecouvrez-magie-adobe-creative-cloud","en\u002Fblog\u002Fdecouvrez-magie-adobe-creative-cloud","2014-02-06","\u002Fimages\u002Fblog\u002Fdecouvrez-magie-adobe-creative-cloud\u002Fc5befd8385.jpg",[1259],{"title":1281,"path":1282,"stem":1283,"date":1284,"cover":1285,"categories":1219,"children":-1},"The Fitbit Force, a Pioneer of Connected Wristbands","\u002Fen\u002Fblog\u002Ffitbit-force-precurseur-des-bracelets-connectes","en\u002Fblog\u002Ffitbit-force-precurseur-des-bracelets-connectes","2014-01-29","\u002Fimages\u002Fblog\u002Ffitbit-force-precurseur-des-bracelets-connectes\u002F591236ebce.jpg",[],1786644891068]