*New 11.3 series Release:
2019-10-05: XigmaNAS 11.3.0.4.6928 - released, 11.2 series are soon unsupported!

*New 12.0 series Release:
2019-10-05: XigmaNAS 12.0.0.4.6928 - released!

*New 11.2 series Release:
2019-09-23: XigmaNAS 11.2.0.4.6881 - released!

We really need "Your" help on XigmaNAS https://translations.launchpad.net/xigmanas translations. Please help today!

Producing and hosting XigmaNAS costs money. Please consider donating for our project so that we can continue to offer you the best.
We need your support! eg: PAYPAL

[TUTO] rtorrent + ruTorrent {nginx & php-fpm}

Moderators: mtiburs, velivole18, ernie

Locked
laster13
PowerUser
PowerUser
Posts: 996
Joined: 01 Jun 2013 19:15
Location: France-Marseille
Status: Offline

[TUTO] rtorrent + ruTorrent {nginx & php-fpm}

#1

Post by laster13 » 07 Jun 2015 13:46

Bonjour,

rTorrent est un client BitTorrent très léger fonctionnant en ligne de commande. Il n'utilise que très peu de ressources (pratique si vous disposez d'une vieille machine). ruTorrent est une interface web très légère écrit en PHP qui vous permet d'accéder à rTorrent. Son nom est une combinaison de rTorrent + ruTorrent et son interface web est très ressemblant à celui µTorrent, ce qui le rend très user-friendly.
Comparé à Transmission, il intègre plusieurs plugins comme la création d'un torrent, l'affichage des stats de la bande passante, un gestionnaire de fichier et pleins d'autres encore ! Aujourd’hui, niveau options, c’est de loin l’interface (et le client) le plus complet. Cerise sur le gâteau, en utilisant Transdroid sur Android, vous pourrez avoir accès à votre client rTorrent de n’importe où.

2 possibilités s'offrent à vous concernant cette installation.

- Dans une jail, en suivant ce tuto ;) , auquel cas vous pouvez également installer un vpn: [TUTO] Installation Mullvad en Openvpn. Seul bémol votre Nas4free deviendra alors complètement injoignable depuis internet, le vpn fait son boulot. Probable que prochainement on trouvera une solution identique à celle ci dessous.

- Dans une VM "debian" en utilisant le tuto de ernie [TUTO] Installer phpVirtualbox avec le template suivant http://lemanchet.fr/post/2013/Debian-Wh ... Virtualbox, et là vous pouvez installer un vpn dans lequel ne transitera que le traffic torrent. Pratique si vous avez un serveur web et que vous souhaitez pouvoir le rendre disponible depuis internet. Etant donné que cette solution relève d'une installation Debian je ne citerai que les sources dont je me suis largement inspiré pour adapter ce tuto à Nas4free
[Tuto] Installer ruTorrent sur Debian 8 {nginx & php-fpm}
[Tuto] Faire passer le traffic bitTorrent dans un tunnnel VPN

C'est cette deuxime solution que j'ai choisi d'installer sur mon Nas4free et je peux vous dire que cela fonctionne parfaitement bien. Au final je peux accéder à mon wordpress depuis internet et seul mon traffic torrent passe dans le tunnel VPN sans compter que la gestion des torrents via rutorrent est un véritable plaisir.

Testé dans les conditions suivantes: ASRock E350M1/USB3 x64-embedded sur AMD E-350 Processor, 8GO DDR3, 2 x 2To - ZFS entrelacés, Nas4free Embedded (10.1.0.2 - Prescience (revision 1731) + TheBrig (Alcatraz)

Si vous avez besoin d'aide, merci de poster sur le [Topic unique] rtorrent + ruTorrent {nginx & php-fpm} !!


Pour commencer,installer TheBrig en vous aidant de ce tuto
[TUTO] TheBrig-Comment créer une Jail
On entre ensuite dans la jail :

Code: Select all

jexec 1 csh

Code: Select all

portsnap fetch extract

Code: Select all

echo "BATCH=yes" >> /etc/make.conf

Code: Select all

cd /usr/ports/sysutils/screen
make install clean

Code: Select all

cd /usr/ports/net-p2p/rtorrent
make install clean

Code: Select all

cd /usr/ports/lang/php56
make install clean

Code: Select all

cd /usr/ports/lang/php56-extensions
make config
Sélectionner les options ci dessous
BZ2, CTYPE, CURL, DOM, FILEINFO, FILTER, GD, HASH, ICONV, JSON, MBSTRING, MCRYPT, MYSQL, MYSQLI , OPENSSL, PDO, PDO_SQLITE, POSIX, SESSION, SIMPLEXML, SOCKETS, SQLITE3, TOLKENIZER, XML, XMLREADER, XMLRPC, XMLWRITER, ZIP

Code: Select all

make install clean
Installation packages

Code: Select all

pkg install nginx git subversion security/py-htpasswd wget ffmpeg mediainfo unrar rar zip unzip gzip bzip2 findutils  
Configuration de php-fpm

Code: Select all

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Code: Select all

ee /usr/local/etc/php.ini
Trouvez la ligne suivante, décommenter la et mettre la valeur 0
cgi.fix_pathinfo=0
trouver les lignes suivantes, décommenter et remplacer par les bonnes valeurs
expose_php = Off
file_uploads = On
post_max_size = 10M
upload_max_filesize = 10M
date.timezone = Europe/Paris
Ensuite:

Code: Select all

ee /usr/local/etc/php-fpm.conf
Décommenter et remplacer la ligne ci dessous:
listen = 127.0.0.1:9000
par
listen = /var/run/php-fpm.sock
décommenter les lignes ci dessous:
listen.owner = www
listen.group = www
"Echap" et vous sauvegarder. On configure également le démarrage automatique des services:

Code: Select all

echo 'php_fpm_enable="YES"' >> /etc/rc.conf
service php-fpm start
Configuration du serveur web NGINX

Code: Select all

mkdir /usr/local/etc/nginx/passwd
mkdir /usr/local/etc/nginx/ssl
touch /usr/local/etc/nginx/passwd/rutorrent_passwd
Modification du fichier nginx.conf

Code: Select all

rm /usr/local/etc/nginx/nginx.conf
ee /usr/local/etc/nginx/nginx.conf
Et copier/coller le nouveau fichier de configuration

Code: Select all

user www;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 1024; 
}

http {
    include /usr/local/etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /var/log/nginx/access.log combined;
    error_log /var/log/nginx/error.log error;
    
    sendfile on;
    keepalive_timeout 15;
    keepalive_disable msie6;
    keepalive_requests 100;
    tcp_nopush on;
    tcp_nodelay off;
    server_tokens off;
    
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 512;
    gzip_buffers 4 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_disable "msie6";
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/vnd.ms-fontobject
        font/truetype
        font/opentype
        image/svg+xml;

    include /usr/local/etc/nginx/sites-enabled/*.conf;
}

Code: Select all

mkdir /usr/local/etc/nginx/conf.d
mkdir /usr/local/etc/nginx/sites-enabled
mkdir /var/log/nginx
Ouvrir le fichier php

Code: Select all

ee /usr/local/etc/nginx/conf.d/php.conf
Et copier/coller

Code: Select all

location ~ \.php$ {
    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /usr/local/etc/nginx/fastcgi_params;
}
Ouvrir le fichier cache

Code: Select all

ee /usr/local/etc/nginx/conf.d/cache.conf
Et copier/coller

Code: Select all

location ~* \.(jpg|jpeg|gif|css|png|js|map|woff|woff2|ttf|svg|eot)$ {
    expires 30d;
    access_log off;
}
Configuration du vhost :

Code: Select all

touch /usr/local/etc/nginx/sites-enabled/rutorrent.conf
ee /usr/local/etc/nginx/sites-enabled/rutorrent.conf
Et copier/coller tout le contenu.

Code: Select all

server {
    listen 80 default_server;
    listen 443 default_server ssl;
    server_name _;

    charset utf-8;
    index index.html index.php;
    client_max_body_size 10M;

    ssl_certificate /usr/local/etc/nginx/ssl/server.crt;
    ssl_certificate_key /usr/local/etc/nginx/ssl/server.key;

    access_log /var/log/nginx/rutorrent-access.log combined;
    error_log /var/log/nginx/rutorrent-error.log error;
    
    error_page 500 502 503 504 /50x.html;
    location = /50x.html { root /usr/share/nginx/html; }

    auth_basic "seedbox";
    auth_basic_user_file "/usr/local/etc/nginx/passwd/rutorrent_passwd";
    
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }
    
    ## début config rutorrent ##

    location ^~ /rutorrent {
	root /usr/local/www;
	include /usr/local/etc/nginx/conf.d/php.conf;
	include /usr/local/etc/nginx/conf.d/cache.conf;

	location ~ /\.svn {
		deny all;
	}

	location ~ /\.ht {
		deny all;
	}
    }

    location ^~ /rutorrent/conf/ {
	deny all;
    }

    location ^~ /rutorrent/share/ {
	deny all;
    }
    
    ## fin config rutorrent ##

}
Configurer nginx pour du https

Code: Select all

cd /usr/local/etc/nginx/ssl
openssl genrsa -des3 -out secure.key 1024
openssl req -new -key secure.key -out server.csr
openssl rsa -in secure.key -out server.key
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
rm secure.key server.csr

Code: Select all

echo 'nginx_enable="YES"' >> /etc/rc.conf
service nginx restart
Installation de rutorrent :

Code: Select all

cd /usr/local//www
git clone https://github.com/Novik/ruTorrent.git rutorrent
Installation plugins

Installation de Logoff :

Code: Select all

cd /usr/local/www/rutorrent/plugins/
svn co http://rutorrent-logoff.googlecode.com/svn/trunk/ logoff
Installation du plugin rutorrentMobile :

Code: Select all

cd /usr/local/www/rutorrent/plugins/
git clone https://github.com/xombiemp/rutorrentMobile.git mobile
Installation du plugin pausewebui :

Code: Select all

cd /usr/local/www/rutorrent/plugins/
svn checkout http://rutorrent-pausewebui.googlecode.com/svn/trunk/ pausewebui
Installation de filemanager (gestionnaire de fichiers en ligne) :

Code: Select all

cd /usr/local/www/rutorrent/plugins/
svn checkout http://svn.rutorrent.org/svn/filemanager/trunk/filemanager
Changement de propriétaire des fichiers web :

Code: Select all

chown -R www:www /usr/local/www/rutorrent
Configuration du plugin filemanager :

Code: Select all

ee /usr/local/www/rutorrent/plugins/filemanager/conf.php
et remplacer :
$pathToExternals['rar'] = '';
$pathToExternals['zip'] = '';
$pathToExternals['unzip'] = '';
$pathToExternals['tar'] = '';
$pathToExternals['gzip'] = '';
$pathToExternals['bzip2'] = '';
par :
$pathToExternals['rar'] = '/usr/local/bin/rar';
$pathToExternals['zip'] = '/usr/local/bin/zip';
$pathToExternals['unzip'] = '/usr/local/bin/unzip';
$pathToExternals['tar'] = '/basejail/usr/bin/tar';
$pathToExternals['gzip'] = '/usr/local/bin/gzip';
$pathToExternals['bzip2'] = '/usr/local/bin/bzip2';
Ajout d'un utilisateur

Pour uniformiser votre installation, on va convenir d’un format d’écriture des utilisateurs :
1 – Le nom d’utilisateur => <username>
2 - Le nom d’utilisateur en majuscule => <USERNAME>
Par exemple, pour l’utilisateur lucien: <username> = lucien et <USERNAME> = LUCIEN
!!! ATTENTION !!! Pour être valide, le nom d’utilisateur doit être entièrement en minuscules et sans caractères accentués
On créé quelques répertoires pour votre utilisateur :

Code: Select all

mkdir -p /home/<username>/{torrents,watch,.session}

Code: Select all

pw useradd -n <username> -s /bin/sh -m
passwd <username>

Code: Select all

ee /home/<username>/.rtorrent.rc
Copier/Coller :
5 <username> à remplacer
Attention! remplacer 500x par 5001 ou 5002 mais chaque user doit avoir un port différent

Code: Select all

scgi_port = 127.0.0.1:500x
encoding_list = UTF-8
port_range = 45000-65000
port_random = no
check_hash = no
directory = /home/<username>/torrents
session = /home/<username>/.session
encryption = allow_incoming, try_outgoing, enable_retry
schedule = watch_directory,1,1,"load_start=/home/<username>/watch/*.torrent"
schedule = untied_directory,5,5,"stop_untied=/home/<username>/watch/*.torrent"
use_udp_trackers = yes
dht = off
peer_exchange = no
min_peers = 40
max_peers = 100
min_peers_seed = 10
max_peers_seed = 50
max_uploads = 15
execute = {sh,-c,/usr/local/bin/php /usr/local/www/rutorrent/php/initplugins.php <username> &}
schedule = espace_disque_insuffisant,1,30,close_low_diskspace=500M
On applique les bonnes permissions :

Code: Select all

chown -R <username>:<username> /home/<username>
chown <username>:<username> /home/<username>
chmod 755 /home/<username>
On configure le serveur web :

Code: Select all

ee /usr/local/etc/nginx/sites-enabled/rutorrent.conf
et ajouter entre :
server {
## début config rutorrent ##
...
## fin config rutorrent ##
}
Ceci 1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x
location /<USERNAME> {
include scgi_params;
scgi_pass 127.0.0.1:500x;
auth_basic "seedbox";
auth_basic_user_file "/usr/local/etc/nginx/passwd/rutorrent_passwd_<username>";
}
faire cette étape pour chaque utilisateur

Petite manip à effectuer avant d'utiliser la commande "htpasswd.py"

Code: Select all

ee /usr/local/bin/htpasswd.py
Changer la ligne ci dessous
#!/usr/local/bin/python
par :
#!/usr/local/bin/python2
On spécifie le mot de passe pour le serveur web et on indique le mot de passe pour cette utilisateur :
1 <username> à remplacer

Code: Select all

/usr/local/bin/htpasswd.py -b /usr/local/etc/nginx/passwd/rutorrent_passwd <username> <mot_de_passe>
Ensuite :
2 <username> à remplacer

Code: Select all

sed -n '/<username>:/p' /usr/local/etc/nginx/passwd/rutorrent_passwd > /usr/local/etc/nginx/passwd/rutorrent_passwd_<username>
On applique les bonnes permissions aux fichiers mots de passe :

Code: Select all

chmod 640 /usr/local/etc/nginx/passwd/*
chown  www:www /usr/local/etc/nginx/passwd/*

Code: Select all

service nginx restart
On créé le répertoire de configuration de ruTorrent : 1 <username> à remplacer

Code: Select all

mkdir /usr/local/www/rutorrent/conf/users/<username>
On édite le fichier de configuration : 1 <username> à remplacer

Code: Select all

ee /usr/local/www/rutorrent/conf/users/<username>/config.php
Et on colle les valeurs :
1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x

Code: Select all

<?php

$pathToExternals['curl'] = '/usr/local/bin/curl';
$topDirectory = '/home/<username>';
$scgi_port = 500x;
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/<USERNAME>';
Création d’un script de démarrage de rTorrent : 1 <username> à remplacer

Code: Select all

ee /usr/local/etc/rc.d/rtorrent
Copier/coller :

Code: Select all

#!/bin/sh
#
# $FreeBSD$
#
#	Runs as unprivileged user "rtorrent"
#	Lives in "tmux" (like "screen") because rtorrent can't daemonize itself
#	To access rtorrent client that's in the tmux: su - rtorrent && tmux attach
#	To detach the tmux and leave rtorrent running: Ctrl-B then D
#	nice'd default +10 step to make it go easy on the machine
#	Don't forget to put rtorrent_enable="YES" in your /etc/rc.conf
#
# PROVIDE: rtorrent
# REQUIRE: NETWORK
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name="rtorrent"
rcvar=rtorrent_enable
 
start_cmd="${name}_start"
stop_cmd="${name}_stop"
 
load_rc_config $name
: ${rtorrent_enable:=no}
 
rtorrent_start() {
	su - <username> -c "/usr/local/bin/screen -d -m -S rtorrent /usr/local/bin/rtorrent"
} 
run_rc_command "$1"

Code: Select all

echo 'rtorrent_enable="YES"' >> /etc/rc.conf

Code: Select all

chmod a+x /usr/local/etc/rc.d/rtorrent

Code: Select all

service rtorrent start
Correction d'un bug sur le plugin filemanager, il suffira de remplacer "find" par "gfind" dans le script

Code: Select all

ee /usr/local/www/rutorrent/plugins/filemanager/flm.class.php
Configuration de SSH

Code: Select all

ee /etc/ssh/sshd_config
commenter les lignes suivantes (placer un # devant ) :
Subsystem sftp /usr/libexec/sftp-server
Puis ajouter en dessous :
Subsystem sftp internal-sftp
On bloque l’utilisateur dans son home en SFTP en collant à la fin du fichier :
Match user <username>,<username2>,<username3> # etc... note : pas d'espace entre les virgules
ChrootDirectory %h

Code: Select all

service ssh restart
Conclusion : les accès

ruTorrent Webui
URL : https://XXX.XXX.XXX.XXX/rutorrent
SFTP
IP : XXX.XXX.XXX.XXX
Port : 22
Détails des dossiers :
/watch = y mettre un .torrent pour l’ajouter à rutorrent sans se connecter au site.
/torrents = dossier des torrents terminés.
/.session = dossier enregistrant les sessions rtorrent.

Enjoye it ;)

Locked

Return to “Tuto”