Changelog :
- fix erreur mise à jour dotdeb le 08/05
- suppression des logs nginx vieux de plus de 7 jours le 18/04
- ajout de client_max_body_size 10M dans le fichier rutorrent.conf le 18/04
- ajout directive fichier conf php.ini (upload) + 30j de cache (nginx) + log off favicon.ico le 18/04
- simplification du nom du dossier scgi remplacement de <UU> par <USERNAME> le 9/04
Migration de Lighttpd vers Nginx
Donc au départ on a une base "Tuto Mon Dédié" sur Debian 6 ou 7, sinon il faudra adapter...
Le tuto ne parle que d'un seul user, il faudra bien sur faire les manip' pour l'ensemble de vos colocs
Aller on y va
On supprime la ligne du script de notre user dans le crontab :
crontab -e
On arrête notre user :
/etc/init.d/<uu>.rtord stop
pkill -u <username>
rm /etc/init.d/<uu>.rtord
On désinstalle Lighttpd :
/etc/init.d/lighttpd stop
apt-get remove lighttpd --purge
Note: Le serveur m'a parlé "auto-remove", j'ai pas fais... Suite à un précédent fâcheux
Maintenant on va installer Nginx
On édite sources.list :
nano /etc/apt/sources.list
On ajoute pour Debian 7 :
# dépôt dotdeb php 5.5
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
# dépôt nginx
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
Pour Debian 6 :
# dépôt dotdeb php 5.4
deb http://packages.dotdeb.org squeeze-php54 all
deb-src http://packages.dotdeb.org squeeze-php54 all
# dépôt nginx
deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx
Ajout de la clé du dépôt dotdeb :
cd /tmp
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
Ajout de la clé du dépôt nginx :
cd /tmp
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
On mets à jour le système :
aptitude update
aptitude safe-upgrade -y
=> Il peut râler pour une histoire de version php "expérimentale" => "
Q" et on oubli.
=> Il propose une mise à jour de geoip.ini, j'ai choisi "
Installer la version du responsable du paquet" (" Install the package maintainer's version").
Pour l'installation des paquets, on lance tel quel, de toute façon il ne remplace que ce qu'il faut donc...
aptitude install -y htop build-essential pkg-config libcurl4-openssl-dev libsigc++-2.0-dev libncurses5-dev nginx vim nano screen subversion apache2-utils curl php5 php5-cli php5-fpm php5-curl php5-geoip git unzip unrar rar zip ffmpeg buildtorrent
On saute directement ensuite à "Renseigner le bon path pour curl dans rutorrent" :
nano /var/www/rutorrent/conf/config.php
$pathToExternals = array(
"php" => '', // Something like /usr/bin/php. If empty, will be found in PATH.
"curl" => '/usr/bin/curl', // Something like /usr/bin/curl. If empty, will be found in PATH.
"gzip" => '', // Something like /usr/bin/gzip. If empty, will be found in PATH.
"id" => '', // Something like /usr/bin/id. If empty, will be found in PATH.
"stat" => '', // Something like /usr/bin/stat. If empty, will be found in PATH.
);
On met à jour les liens symboliques et les permissions, ça fait pas de mal

:
ldconfig
chown -R www-data:www-data /var/www/rutorrent
Configuration du plugin filemanager :
nano /var/www/rutorrent/plugins/filemanager/conf.php
et remplacer :
$pathToExternals['rar'] = '';
$pathToExternals['zip'] = '';
$pathToExternals['unzip'] = '';
$pathToExternals['tar'] = '';
$pathToExternals['gzip'] = '';
$pathToExternals['bzip2'] = '';
par :
$pathToExternals['rar'] = '/usr/bin/rar';
$pathToExternals['zip'] = '/usr/bin/zip';
$pathToExternals['unzip'] = '/usr/bin/unzip';
$pathToExternals['tar'] = '/bin/tar';
$pathToExternals['gzip'] = '/bin/gzip';
$pathToExternals['bzip2'] = '/bin/bzip2';
Configuration de php-fpm :
nano /etc/php5/fpm/pool.d/www.conf
Trouver cette ligne :
;listen = 127.0.0.1:9000
Et remplacer par (peut-être que listen est déjà correctement configuré mais vérifiez quand même) :
listen = /var/run/php5-fpm.sock
Dans le même fichier, décommenter ces trois lignes:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
modification du php.ini ( correction de la date, et suppression de X-Powered-By dans l'entête http)
nano /etc/php5/fpm/php.ini
trouver les lignes suivante et remplacer par les bonnes valeurs :
expose_php = Off
file_uploads = On
upload_max_filesize = 10M
post_max_size = 10M
date.timezone = Europe/Paris
Et on redémarre php-fpm :
service php5-fpm restart
Configuration du serveur web :
mkdir /etc/nginx/passwd
mkdir /etc/nginx/ssl
touch /etc/nginx/passwd/rutorrent_passwd
chmod 640 /etc/nginx/passwd/rutorrent_passwd
Modification du fichier nginx.conf :
rm /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
Et copier/coller le nouveau fichier de configuration :
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events { worker_connections 1024; }
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/access.log combined;
error_log /var/log/nginx/error.log error;
sendfile on;
keepalive_timeout 20;
keepalive_disable msie6;
keepalive_requests 100;
tcp_nopush on;
tcp_nodelay off;
server_tokens off;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 5;
gzip_disable "msie6";
gzip_min_length 20;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
include /etc/nginx/sites-enabled/*.conf;
}
Ouvrir le fichier conf php :
nano /etc/nginx/conf.d/php
Et copier/coller :
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
Ouvrir le fichier cache :
nano /etc/nginx/conf.d/cache
Et copier/coller :
location ~* \.(jpg|jpeg|gif|css|png|js|woff|ttf|svg|eot)$ {
expires 30d;
access_log off;
}
location ~* \.(eot|ttf|woff|svg)$ {
add_header Acccess-Control-Allow-Origin *;
}
Configuration du vhost :
mkdir /etc/nginx/sites-enabled
touch /etc/nginx/sites-enabled/rutorrent.conf
nano /etc/nginx/sites-enabled/rutorrent.conf
et copier /coller :
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 /etc/nginx/ssl/server.crt;
ssl_certificate_key /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 "/etc/nginx/passwd/rutorrent_passwd";
location = /favicon.ico {
access_log off;
log_not_found off;
}
## début config rutorrent ##
location ^~ /rutorrent {
root /var/www;
include /etc/nginx/conf.d/php;
include /etc/nginx/conf.d/cache;
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
( Chez moi le répertoire nginx/ssl était déjà présent à l'installation, donc juste besoin de
cd /etc/nginx/ssl/ )
mkdir /etc/nginx/ssl/
cd /etc/nginx/ssl/
Génération d'un certificat auto-signé, exécuter les commandes les unes à la suite des autres :
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
On redémarre nginx
service nginx restart
Configuration de Logrotate pour Nginx (compression des logs)
Création du fichier config pour Nginx :
rm /etc/logrotate.d/nginx && touch /etc/logrotate.d/nginx
Ouvrir le fichier de config :
nano /etc/logrotate.d/nginx
Et copier/coller ceci :
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
On restart Nginx :
service nginx restart
On zap la partie utilisateur SSH et Ajout d'users qui doit être ok.
Pour uniformiser votre installation, on va convenir d’un format d’écrire des utilisateurs :
1 – Le nom d’utilisateur => <username>
2 - Le nom d'utilisateur en majuscule => <USERNAME>
Par exemple, pour l’utilisateur magicalex : <username> = magicalex et <UERNAME> = MAGICALEX
On édite le .rtorrent.rc de notre notre user :
(J'ai viré l'ancien pour être sur de pas faire de boulettes)
nano /home/<username>/.rtorrent.rc
Copier/Coller :
5 <username> à remplacer
Attention! remplacer 500{x} par 5001 ou 5002 mais chaque user doit avoir un port différent
scgi_port = 127.0.0.1:500{x}
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/bin/php /var/www/rutorrent/php/initplugins.php <username> &}
schedule = espace_disque_insuffisant,1,30,close_low_diskspace=500M
On applique les bonnes permissions :
chown -R <username>:<username> /home/<username>
chown root:<username> /home/<username>
chmod 755 /home/<username>
On configure le serveur web :
nano /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 500{x}
location /<USERNAME>0 {
include scgi_params;
scgi_pass 127.0.0.1:500{x}; #ou socket : unix:/home/username/.session/username.socket
auth_basic "Seedbox";
auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_<username>";
}
Faire cette étape pour chaque utilisateur
On spécifie le mot de passe pour le serveur web et on indique le mot de passe pour cette utilisateur :
( -s : pour scripter les mots de passe en sha1 )
1 <username> à remplacer
htpasswd -s /etc/nginx/passwd/rutorrent_passwd <username>
Vous devez taper
deux fois de suite le mot de passe pour le vérifier, ensuite :
2 <username> à remplacer
sed -rn '/<username>:/p' /etc/nginx/passwd/rutorrent_passwd > /etc/nginx/passwd/rutorrent_passwd_<username>
On applique les bonnes permissions aux fichiers mots de passe :
chmod 640 /etc/nginx/passwd/*
chown -c www-data:www-data /etc/nginx/passwd/*
Redémarrer le serveur web à chaque modification de ce fichier :
service nginx restart
On passe ensuite directement à ça
On édite le fichier de configuration :
nano /var/www/rutorrent/conf/users/<username>/config.php
Et on colle les valeurs :
1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500{x}, on oubli pas de faire tout les users...
<?php
$topDirectory = '/home/<username>';
$scgi_port = 500{x};
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/<USERNAME>0';
Désactivation de certain plugin inutile :
touch /var/www/rutorrent/conf/users/<username>/plugins.ini
nano /var/www/rutorrent/conf/users/<username>/plugins.ini
Et copier/coller ceci :
[default]
enabled = user-defined
canChangeToolbar = yes
canChangeMenu = yes
canChangeOptions = yes
canChangeTabs = yes
canChangeColumns = yes
canChangeStatusBar = yes
canChangeCategory = yes
canBeShutdowned = yes
[ipad]
enabled = no
[httprpc]
enabled = no
[retrackers]
enabled = no
[rpc]
enabled = no
[rutracker_check]
enabled = no
On créer les scripts de démarrage rtorrent et les crontab
Création d’un script de démarrage de rTorrent :
nano /etc/init.d/<username>-rtorrent
Copier/Coller :
3 <username> à remplacer
#!/bin/bash
### BEGIN INIT INFO
# Provides: rtorrent
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Start-Stop rtorrent user session
### END INIT INFO
user="<username>"
# the full path to the filename where you store your rtorrent configuration
config="/home/<username>/.rtorrent.rc"
# set of options to run with
options=""
# default directory for screen, needs to be an absolute path
base="/home/<username>"
# name of screen session
srnname="rtorrent"
# file to log to (makes for easier debugging if something goes wrong)
logfile="/var/log/rtorrentInit.log"
#######################
###END CONFIGURATION###
#######################
PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
DESC="rtorrent"
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME
checkcnfg() {
exists=0
for i in `echo "$PATH" | tr ':' '\n'` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
exit 3
fi
if ! [ -r "${config}" ] ; then
echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
exit 3
fi
session=`getsession "$config"`
if ! [ -d "${session}" ] ; then
echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
exit 3
fi
}
d_start() {
[ -d "${base}" ] && cd "${base}"
stty stop undef && stty start undef
su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
}
d_stop() {
session=`getsession "$config"`
if ! [ -s ${session}/rtorrent.lock ] ; then
return
fi
pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
kill -s INT ${pid}
fi
}
getsession() {
session=`cat "$1" | grep "^[[:space:]]*session[[:space:]]*=" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//" `
echo $session
}
checkcnfg
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart|force-reload)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
On rend le script exécutable :
chmod +x /etc/init.d/<username>-rtorrent
On ajoute une tache cron :
crontab -e
On colle ça :
* * * * * if ! ( ps -U <username> | grep rtorrent > /dev/null ); then /etc/init.d/<username>-rtorrent start; fi
service nginx restart
A ce niveau là si tout va bien, ça marche avec http://X.X.X.X/rutorrent. Les torrents sont en seed avec notre user, yessssss
A noter un truc curieux, pensez a vider le cache de votre navigateur.
Chez moi Firefox a eu du mal à accepter le changement au niveau identification... Après reboot seul mon premier user était accessible dans rutorrent. Impossible de se logger avec le deuxième, loggof me balancé sur le premier systematiquement
Donc voilà, il doit rester quelques traces de Lighttpd et de l'ancienne config dans les coins mais ça tourne bien.
Pour poser une question ou proposer quelque chose, c'est par ICI
Ex.