Flood

Flood

Aujourd'hui installons Flood, une nouvelle webUI fonctionnant avec Node.js pour le client rtorrent, l'incontournable client torrent des GNU/Linux, jouant du coude-à-coude avec Transmission et Deluge. Une interface moderne et séduisante qui vous changera de Rutorrent!

A défaut de Rutorrent qu'on ne présente plus, Flood offre aujourd'hui une nouvelle interface plus moderne et séduisante, qui vous semblera en adéquation avec ce que vous avez pu voir ces 5 dernières années sur l'internet. Fonctionnant grâce à un serveur Node.js, Flood se veut épuré, ergonomique et simple d'utilisation.

Flood is another web interface for rtorrent. It implements a Node.js server for communicating with the rTorrent API, storing historical data, and serving the web UI.

It's a work-in-progress, and it might not have all of the features you want (yet). However, new features are added frequently. Feel free to file an issue and I'll try to prioritize your feature requests.

John Furrow, développeur de Flood

Caractéristiques

Une rapide présentation de Flood, images à l'appui.

  • Page de connexion L'un des points forts de Flood est sa page de connexion. Vous pouvez configurer des utilisateurs à la volée

Dans les paramètres, gérez vos utilisateurs à la volée. Lors de votre première connexion à Flood, celui-ci vous demandera de créer un utilisateur par défaut.

  • L'accueil de Flood, vous avez accès comme n'importe quel client à une liste de l'ensemble des torrents, avec sur la gauche un menu détaillant l'état des torrents, les taux d'upload et de download de tous les torrents, les tags, les trackers ainsi qu'une fonction recherche histoire de gérer tout ce beau monde. Vous pouvez aussi détailler votre recherche en sélectionnant plusieurs tags.

  • Vue générale d'un torrent, posons notre regard sur un torrent en particulier, dans l'exemple suivant j'ai sélectionné (highlight bleu) l'ISO de Solus. Nous pouvons connaître d'un seul coup d’œil l'état d'un torrent à la couleur de son trait de progression (pourcentage de téléchargement): bleu il est téléchargé et en seed, rouge il y a une erreur, vert il est en téléchargement. Sont directement accessible aussi les taux d'upload et de download, ainsi que la date, le tag, et enfin le nombre de pairs et de partage.

  • Détails de la progression d'un torrent.

Détails d'un torrent, toujours avec l'exemple de l'ISO de Solus, en cliquant sur l’icône infos à droite, nous accédons au détails du torrent; date, emplacement, tag, hash, pairs, et tutti quanti.

  • Quant à l'ajout ou la suppression d'un torrent, là non plus rien à redire, c'est très intuitif

Vous êtes convaincus? Passons à son installation!

Installation

Prérequis

Le tutoriel suivant a été réalisé sur Debian 8.

Prérequis: Vous devez avoir déjà installé Nginx, php-fpm et rtorrent avec XMLRPC. Un tutoriel complet sur mondedie.fr vous comment faire tout ceci, si ce n'est pas déjà fait.

Node.js

L'installation de Node.js est on ne peut plus simple, il existe des paquets officiels pour Ubuntu et Debian. Au passage on installe aussi npm, le gestionnaire de paquets de Node.js.

sudo apt-get update
sudo apt-get install nodejs npm

Git

On aura besoin de Git, installons-le:

sudo apt-get install git

Magique.
Passons maintenant à l'installation et la configuration pure et dure de Flood et de ses petits amis.

Flood

Si vous avez déjà un user pour rtorrent, utilisez tant qu'à faire celui-ci, sinon vous pouvez créer un utilisateur pour Flood directement.

  • 1 - Créons un user si nécessaire
sudo adduser --disabled-password flood
  • 2 - Installons Flood dans son home
cd /home/flood/
git clone https://github.com/jfurrow/flood.git
  • 3 - Enfin, on s'assure que l'user flood soit propriétaire de l'installation flood, récursivement
sudo chown -R flood:flood /home/flood/flood/
  • 4 - Dupliquons maintenant le fichier config.template.js en nous plaçant au préalable dans le dossier d'installation de flood
cd flood
cp config.template.js config.js
  • 5 - Vérifions la configuration de flood, ça se passe dans le fichier config.js
sudo nano config.js

Pour ma part je n'ai pas eu à apporter d'autres modifications, nous sommes sur la même machine où tourne rtorrent. A vous de voir si vous voulez modifier le répertoire de la db ou utiliser un socket.

Flood est installé, passons à la suite et démarrons-le.

Supervisord

Maintenant que tout est en place, il va falloir lancer flood. Pour ma part utilisant d'ors et déjà Supervisord pour mes différents blogs Ghost ainsi qu'Isso, ce choix pour Flood m'est apparu tout naturel. En effet Supervisord permet d'automatiser facilement des mécanismes, tout comme le ferait Service ou Systemd.

Installons Supervisord

sudo apt-get update
sudo apt-get install supervisor

Créez maintenant le fichier flood.conf pour automatiser le démarrage de Flood. J'indique alors à Supervisord que le programme [program:flood] devra exécuter flood à partir des fichiers de configuration présent dans le home, avec l'utilisateur [USER].

  • 1 - Créez le fichier flood.conf
sudo nano /etc/supervisord/conf.d/flood.conf
  • 2 - Et collez ce qui suit en l'adaptant à vos besoins
[program:flood]
command = npm start --production
directory = /home/flood/flood
user = flood
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/flood.log
stderr_logfile = /var/log/supervisor/flood_err.log
  • 3 - Mettez à jour les programs pour Supervisord
sudo supervisorctl reread && sudo supervisorctl update
  • 4 - Et assurez-vous que le program flood a démarré
supervisorctl status
  • 5 - Si ce n'est pas le cas, lancez-le!
sudo supervisorctl start flood

Voilà, Flood est installé et fonctionnel.

Nginx

Dernière étape, la configuration de Nginx afin de mettre en place un reverse proxy, qui vous permettra d'accéder à flood via un sous-domaine. Et parce qu'on est des gens biens, on va faire en sorte d'utiliser un certificat Let's Encrypt afin de passer par le protocole TLS.

En ce qui concerne Let's Encrypt j'ai fait un tutoriel sur sa mise en place, suivez le lien.

  • 1 - Créez le fichier /etc/nginx/sites-available/flood
sudo nano /etc/nginx/sites-available/flood
  • 2 - Collez-y ce qui suit en l'adaptant à vos besoins, notamment le nom de domaine DOMAIN.EXT
server {
	listen 62.210.200.73:80;
	server_name flood.DOMAIN.EXT;

	location '/.well-known/acme-challenge' {
		root /var/www/letsencrypt/DOMAIN/;
		try_files $uri /$1;
    	}

	access_log /dev/null;
	error_log /dev/null;
}

server {
	listen 62.210.200.73:80;
	server_name flood.DOMAIN.EXT;
	return 301 https://flood.DOMAIN.EXT$request_uri;
}

server {
	listen 62.210.200.73:443 ssl;
	server_name flood.DOMAIN.EXT;


	ssl_certificate /etc/letsencrypt/live/DOMAIN.EXT/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/DOMAIN.EXT/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN.EXT/chain.pem;

	access_log /var/log/nginx/flood-access.log;
	error_log /var/log/nginx/flood-error.log;

	location / {
		proxy_pass http://127.0.0.1:3000/;
		proxy_set_header Connection "";
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_pass_header X-Transmission-Session-Id;
 	}


}

Personnellement j'ai inclus la configuration du SSL/TLS dans le fichier /etc/nginx/ssl/params.conf afin qu'il s'applique à l'ensemble de mes sites. Vous pouvez l'inclure directement dans la configuration de flood si vous le souhaitez:

ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ecdh_curve secp384r1;

add_header Strict-Transport-Security "max-age=31536000";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.zendesk.com; font-src 'self' https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  • 3 - Faites maintenant un liens symbolqiue afin d'activer cette configuration:
ln -s /etc/nginx/sites-available/flood /etc/nginx/sites-enabled/flood
  • 4 - Testez votre configuration. D'abord le fichier flood puis toute l'installation
sudo nginx -t -c/etc/nginx/sites-available/flood
sudo nginx -t
  • 5 - Si il n'y a pas d'erreurs, relancez Nginx.
sudo /etc/init.d/nginx restart

== Si jamais vous ne souhaitez pas utiliser une connexion chiffrée, retirez tout simplement la redirection vers le https, les certificats Let's Encrypt et le well-known. ==

Mise à jour

Pour mettre à jour Flood, rien de plus simple.

  • 1 - Stoppez Flood avec Supervisord: sudo supervisorctl stop flood
  • 2 - Lancez la commande git pull en vous plaçant au préalable dans le répertoire /home/flood/flood/
  • 3 - Comparez le fichier config.template.js avec votre configuration actuelle dans config.js afin de déterminer si vous avez des modifications à apporter à ce dernier.
  • 4 - Toujours dans le répertoire d'installation, lancez la commande Run npm install --production pour mettre à jour les dépendances.
  • 5 - Enfin, relancez Flood avec sudo supervisorctl start flood.

Voilà! C'est à jour.

Le dernier mot

Flood est une webUI très prometteuse, elle offre actuellement tous les outils basiques à l'utilisation d'un client torrent tel que rtorrent. Il y a fort à parier qu'elle sera se montrer convaincante auprès d'une partie des utilisateurs de ce client, ceci dit elle n'a pas encore tous les atouts d'un projet plébiscité comme rutorrent. En effet il faut regretter les innombrables outils core et tiers offerts par Rutorrent, tel la gestion des flux RSS, le chat et les autotools qui permettent d'ajouter des tags, ou de déplacer les fichiers ou tout simplement de télécharger ses torrents le tout automatiquement. Mais à quoi bon? Flood est encore un projet jeune, l'avenir lui donnera peut-être l'avantage.

N'en reste pas moins que Flood demeure une bonne interface web, propre à satisfaire nombre d'utilisateurs. Sur raspberry, elle devrait faire un malheur pour sa simplicité d'utilisation, d'installation et de mise à jour.

D'autres verront dans l'utilisation de Node.js une mauvaise stratégie. A chacun sa paroisse.

Ah! A noter aussi qu'au-delà de 200 ou 300 torrents, votre navigateur se fâchera un peu, ça lui fait beaucoup d'éléments à afficher tout de même. Mais tout le monde n'a pas autant d'ISO GNU/Linux en seed. ;)

Liens