• Seedbox
  • [Discussion] Installer ruTorrent sur Debian 8 (nginx & php-fpm)

Haaaaaaaa !!!! pffff quel con, ji avais penser mais le dns arriver bien a la config de cakebox vu que la fenêtre d'authentification s'ouvrer non ?? bref....
rajoute le hihi
Merci pour ce tuto,

J'ai suivi la migration à ma sauce, j'avais envie de sauter le pas vers nginx, voilà une bonne excuse.

Quelques remarques:

J'ai préféré ajouter les sources sid de debian et avec un fichier /etc/apt/preferences qui va bien pour définir les priorités. On peut ainsi installer le dernier nginx + php5 sans problèmes
(apt-get install -t sid nginx par exemple)
Je peux aider si ça intéresse

Concernant la config de nginx, je suis pas fan de comment c'est fait. Ayant plusieurs sous domaines, c'était pas très optimisés.
Voici un exemple de ma config :
dans nginx.conf => on met les certificats et on include site-enabled/*.conf et non conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
ssl_certificate /etc/nginx/certs/ssl-unified.crt;
ssl_certificate_key /etc/nginx/certs/ssl2.key;
puis dans sites-available
on édite default avec la config du site par default :
server {
    listen 80;
    listen 443 ssl;
    server_name _;
    root /var/www;
    index index.html index.php;
    charset utf-8;

    access_log /var/log/nginx/rutorrent.access.log main;
    error_log /var/log/nginx/rutorrent.error.log crit;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html { root /usr/share/nginx/html; }

    auth_basic "xcid";
    auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd";

    location ^~ / {
        include /etc/nginx/conf.d/php;
        include /etc/nginx/conf.d/cache;
        include /etc/nginx/conf.d/rutorrent;

    }
    location /downloads {
        autoindex on;
    }
    location = /favicon.ico {
        access_log off;
        return 204;
    }
}
on met la conf rutorrent dans /etc/nginx/conf.d/rutorrent
et on fait un lien symbolique de default vers sites-enabled

je sais pas ce que vous en pensez mais je trouve que ça fait plus propre 😀, si il faut détailler pas de problèmes.



Pour le mot de passe des htpasswd pour le faire en une fois 😀, cela devrait marcher
touch /etc/nginx/passwd/rutorrent_passwd_<username>
htpasswd -s /etc/nginx/passwd/rutorrent_passwd <username>
sed -n -e '$p' /etc/nginx/passwd/rutorrent_passwd >> /etc/nginx/passwd/rutorrent_passwd_<username>


Pour l'https, on peut faire tourner les deux (cf ma config) et on peut en plus faire une redirection du 80 -> 443, j'ai la directive si il y a des intéressés.


Par contre, j'ai un soucis, je suis parfois obligé de recharger deux fois la page pour voir mes torrents, la première j'ai rutorrent qui n'arrive pas a charger rtorrent :s


Dernière chose, soit on met "user nginx" et on fait que des chown nginx soit on met "user www-data"


encore merci !
XciD69 wrote:D'ailleurs, pourquoi être passé de socket à ip ?
nginx peut aussi bien gérer les Sockets :
https://blog.abevoelker.com/rtorrent_xmlrpc_over_nginx_scgi/
Pour le socket j'ai mis en commentaire comment faire
Ou par socket : unix:/home/username/.session/username.socket
Après il semblerait que via un port les performances sont meilleurs
cf : http://forums.rutorrent.org/index.php?topic=119.msg579#msg579

rutorrent fonctionnerait mieux via un port que par socket. L'avantage du socket est qu'il est un petit peu plus sûr au niveau de la sécurité
Perso j'ai fait le test socket vs port. Je l'ai trouvé tout petit peu plus rapide (mais c'est peut-être un effet placebo il faudrait faire des vrais test et puis ça dépend aussi des os)

Pour les dépôts j'ai regardé il y a quelques temps et franchement je préfère les dépôts nginx et dotdeb. Ils sont utilisé par beaucoup de monde, les dépôts sid surement moins.
Par contre, j'ai un soucis, je suis parfois obligé de recharger deux fois la page pour voir mes torrents, la première j'ai rutorrent qui n'arrive pas a charger rtorrent :s
ça pourrai venir de ta config ssl, j'avais des problèmes pour faire un seul fichier conf. Le http fonctionne avec ta config?
Certes, mais le rtorrent.rc doit aussi être modifié non ?

J'avoue que c'est plus rapide, je sais pas si cela vient de nginx ou de cela
XciD69 wrote:Certes, mais le rtorrent.rc doit aussi être modifié non ?

J'avoue que c'est plus rapide, je sais pas si cela vient de nginx ou de cela 😀
Pour le socket, je pense pas (mais peut-être un tout petit peu). ça vient de nginx. J'ai fait des règles pour mettre en cache, j'ai activé gzip etc. Les seuls améliorations que l'on peut faire maintenant c'est au niveau du script rutorrent.
J'ai une question au milieu de votre discution de socket qui me dépasse

Pourquoi avoir personnalisé les log en rutorrent-acces et rutorrent-error ? Ça aurez pas été mieux de laisser en error.log et acces.log par défaut plutôt que de faire un truc par site pour une utilisation de base ?
Parce que je suis en train de voir un peu pour un tuto sécu nginx sur la base de l'autre et ça va compliquer un peu pour un truc basique si y'a du cakebox.log etc...

En plus je me rends compte que pour mon site "acceuil" j'ai pas cherché et j'ai laissé les log sur rutorrent donc bon...
Ex.
ex_rat wrote:J'ai une question au milieu de votre discution de socket qui me dépasse

Pourquoi avoir personnalisé les log en rutorrent-acces et rutorrent-error ? Ça aurez pas été mieux de laisser en error.log et acces.log par défaut plutôt que de faire un truc par site pour une utilisation de base ?
Parce que je suis en train de voir un peu pour un tuto sécu nginx sur la base de l'autre et ça va compliquer un peu pour un truc basique si y'a du cakebox.log etc...

En plus je me rends compte que pour mon site "acceuil" j'ai pas cherché et j'ai laissé les log sur rutorrent donc bon...
Ex.
Je sais pas on va voir, de toute manière la config nginx ainsi que le tuto est amené à être modifié dans les semaines à venir. Le tuto est tout jeune.

Pour les logs, j'aime bien le fait de séparer les logs par site. Mais tu peux toujours demander dans ton tuto de modifier cette ligne.
C'est pas vitale au bon fonctionnement de nginx

Au passage une petite conf pour fail2ban
## FICHIER /etc/fail2ban/filter.d/nginx-auth.conf ##
[Definition]
 
failregex = no user/password was provided for basic authentication.*client: <HOST>
            user .* was not found in.*client: <HOST>
            user .* password mismatch.*client: <HOST>
 
ignoreregex =
 
## FICHIER CONFIG jail.local
 
destemail = xxxxxxx@gmail.com
mta = exim4
 
[nginx-auth]
enabled  = true
filter   = nginx-auth
action   = iptables-multiport[name=NoAuthFailures, port="http,https"]
logpath  = /var/log/nginx/rutorrent-error.log
banTime  = 600
maxretry = 15
haaa impec pour fail2ban Pour l'anti bots je devrais m'en sortir sans trop de bobos.
Pour les logs ouais je vais faire ça, surtout qu'il faut de toute façon modifier les fichiers pour ajouter le "combined" qui va bien pour logwatch. On va trouver un truc
XciD69 wrote:Concernant la config de nginx, je suis pas fan de comment c'est fait. Ayant plusieurs sous domaines, c'était pas très optimisés.
Voici un exemple de ma config :
dans nginx.conf => on met les certificats et on include site-enabled/*.conf et non conf.d/*.conf

on met la conf rutorrent dans /etc/nginx/conf.d/rutorrent
et on fait un lien symbolique de default vers sites-enabled

je sais pas ce que vous en pensez mais je trouve que ça fait plus propre 😀, si il faut détailler pas de problèmes.
Ouais, les histoires de liens symboliques ok mais je trouve que ça complique les choses pour pas grand chose.
Si tu as plusieurs site il y a la directive include /etc/nginx/conf.d/*.conf dans le fichier nginx.conf qui inclu tous les fichiers qui termine par .conf
Donc si tu veux ajouter une vhost tu peux créer une nouveau fichier "sous.domaine.conf" donc ça revient au même non?
XciD69 wrote: Pour le mot de passe des htpasswd pour le faire en une fois 😀, cela devrait marcher
touch /etc/nginx/passwd/rutorrent_passwd_<username>
htpasswd -s /etc/nginx/passwd/rutorrent_passwd <username>
sed -n -e '$p' /etc/nginx/passwd/rutorrent_passwd >> /etc/nginx/passwd/rutorrent_passwd_<username>
Je regarde ça, choper la dernière ligne risque de poser des problèmes à l'avenir pour l'update du mot de passe.
Mais bon ça reste un problème de riche lol
XciD69 wrote: Pour l'https, on peut faire tourner les deux (cf ma config) et on peut en plus faire une redirection du 80 -> 443, j'ai la directive si il y a des intéressés.

Par contre, j'ai un soucis, je suis parfois obligé de recharger deux fois la page pour voir mes torrents, la première j'ai rutorrent qui n'arrive pas a charger rtorrent :s
Je crois que le problème vient de ta config ssl, j'avais eu quelque chose de similaire il y a longtemps.

XciD69 wrote:Dernière chose, soit on met "user nginx" et on fait que des chown nginx soit on met "user www-data" 🙂
Je comprend pas ce que tu veux dire par "on fait que des chown"
Magicalex wrote:Ouais, les histoires de liens symboliques ok mais je trouve que ça complique les choses pour pas grand chose.
Si tu as plusieurs site il y a la directive include /etc/nginx/conf.d/*.conf dans le fichier nginx.conf qui inclu tous les fichiers qui termine par .conf
Donc si tu veux ajouter une vhost tu peux créer une nouveau fichier "sous.domaine.conf" donc ça revient au même non?
On va dire que j'ai appris comme ca 🙂, pour moi ce qu'il y a dans conf c'est les configurations spécifiques qui sont appelés ou non dans les différents sites, et dans sites-available/sites-enabled les configurations liées à tes sites.
Après le liens symbolique n'est pas obligatoire, on peut tout à fait travailler directement dans site-enabled. Après c'est juste une façon de structurer
Magicalex wrote: Je regarde ça, choper la dernière ligne risque de poser des problèmes à l'avenir pour l'update du mot de passe.
Mais bon ça reste un problème de riche lol
voila à tester
sed -rn '/<username>:/p' /etc/nginx/passwd/rutorrent_passwd >> /etc/nginx/passwd/rutorrent_passwd_<username> 
Magicalex wrote:Je crois que le problème vient de ta config ssl, j'avais eu quelque chose de similaire il y a longtemps.
Je vais creuser cela

Magicalex wrote:Je comprend pas ce que tu veux dire par "on fait que des chown"
dans ton tuto il reste cette coquille
chown -R www-data:www-data /var/www/rutorrent

Autre chose, pour le proc, on peut mettre un worker_processes = auto; au lieu de mettre la valeur nous même
A ta dispo
XciD69 wrote:dans ton tuto il reste cette coquille
chown -R www-data:www-data /var/www/rutorrent
A voilà, une victime de apache

c'est php qui exécute les fichiers et non pas nginx. Si tu fais un chown sur le dossier rutorrent/ php-fpm il va gueuler un jour ou l'autre si il doit manipuler des fichiers.
php-fpm tourne sous le user www-data, processus distinct de nginx (contrairement à apache)

J'ai du étudier cette question notamment pour le seedbox-manager.
Ah!
Pourquoi ne pas lancer nginx avec www-data ? Pour éviter l'ambiguïté ?
XciD69 wrote:Ah!
Pourquoi ne pas lancer nginx avec www-data ? Pour éviter l'ambiguïté ?
j'ai rajouté worker_processes auto; c'est plus simple comme ça ^^

et aussi la commande sed pour les mots de passe
XciD69 wrote:Ah!
Pourquoi ne pas lancer nginx avec www-data ? Pour éviter l'ambiguïté ?
y a pas d'ambiguïté
plus sérieusement y' a pas de raison, j'ai laissé cette config par défaut.
Ola !
En faisant des tests pour fail2ban et en particulier pour kicker les tentatives d'identification en erreur sur rutorrent, j'ai remarqué un truc.

Le fichier rutorrent-error.log a l'air en service minimum, il ne log pas les erreurs d'identification. Peut-être en rapport avec le "crit" à la fin (erreurs critique?) bref est-ce qu'il y aurait une manière de le rendre plus bavard pour que fail2ban ait quelques choses à regarder ?
J'ai tenté "main" comme pour access.log, il a pas aimé du tout et j'ai pas pu trouver l'info.
Le fichier marche à par ça, j'ai dedans les erreurs de mes tests d'ajout de vhost et je vois bien les tentative dans access.log en 401 avec les pseudos bidon.

Au passage j'ai remarqué un autre truc dans rutorrent-access.log.
Quand on est connecté sur la box, le fichier log toute les 5 secondes 3 lignes en rapport avec 2 plugins :
200 "GET /plugins/diskspace/action.php?_=1393424512273 HTTP/1.1"
200 "POST /EXR0 HTTP/1.1"
200 "GET /plugins/cpuload/action.php?_=1393424516945 HTTP/1.1"
Du coup le log devient vite dur à visiter et ça doit faire des kilomètres de long en fin de journée...

Apparemment t'as fait un truc pour éviter de loger les appels au favicon, est-ce qu'il n'y aurait pas un moyen pour ça aussi histoire de garder un truc plus utilisable?
Ex.
Pourquoi tu ne fais pas un grep de tout ce qui n'est pas avec /plugins et /EXR0 ?
Y'a de l'idée Hydro, ça va encore partir en bash de l’extrême cette affaire

Par contre pour error.log c'est plus embêtant le soucis
la bonne nouvelle, c'est que mon anti-bots marche impec, ça ban à tour de bras là
Bah tu par pas sur des script ^^ tu fais des tentatives puis du grep "machinen regex" >> log_epure.log

C'est toujours ça. Je le mettrais en place une fois que tout fonctionnera chez toi. On ne sait jamais
Je pensais à la génération de la page de log en html pour mon bash, y'a matière à s'amuser un peu avec ça vu que ça pars sur un script autant s'en servir un peu plus !
Mais pour mon error.log tout vide, faut qu'il me parle un peu plus pour fail2ban, ça doit pas être grand chose ça
Pour ton log,
Un directive du même type que le favicon doit fonctionner,
Un truc du genre :
location ~ (plugins|EXR0) {
access_log off ;
}
A tester