Installation d'un serveur de commentaire libre : Isso

Je voulais que ce blog ne soit pas qu'un site ou je partage des informations, mais un site participatif où les visiteurs peuvent participer et apporter leurs avis, correctifs et expertises, via des commentaires.

Un vrai blog quoi...

Des commentaires ? Oui mais...

Ghost ne propose pas (encore ?) la gestion de commentaires.

Un rapide tour des solutions disponibles sur le web dégage deux approches facilement réalisables :

  • Ce qu'on peut appeler les CaaS (Comments As A Service), le plus célèbre étant certainement Disqus. Le principe est simple : un morceau de code à intégrer dans les pages, le service s'occupe du reste.
  • Intégrer un des clones open source de Disqus. Ces logiciels, que j'appelle "serveur de commentaire", sont en faite des petites applications, à héberger soit même, qui prennent en charge la gestion des commentaires sur un ou plusieurs sites. Ça tombe bien, Korben en a dressé une liste ici il y a quelques jours.

C'est la deuxième approche que j'ai choisie, et plus exactement Isso.

Pour moi, l'avantage de cette solution, c'est que je reste maître de mes données et de ce qui est affiché/chargé sur mon blog.

Installation de Isso

Je détaillerai ici la démarche pour installer Isso en production, avec un Nginx en reverse-proxy, sur Ubuntu 14.04.

Vous aurez besoin de Python 2.6, 2.7 ou 3.3. Je ne m'intéresse pas à son installation qui devrait être relativement simple suivant votre distribution.

Pour installer l'environnement Isso, nous allons utiliser VirtualEnv, qui est un outil qui permet d'isoler des installations de Python, et faire ainsi cohabiter sans limite différentes versions de Python et de ses librairies.

# Installation de virtualenv
sudo apt-get install python-setuptools python-virtualenv

Sur ma machine, j'ai créé un utilisteur "python" qui a pour home /apps/python. J'effectue les commandes suivantes en tant que cet utilisateur.

# Création de l'environnement virtuel pour Isso
virtualenv /apps/python/isso
# Activation de l'environnement virtuel
source /apps/python/isso/bin/activate
# Installation de Isso
pip install isso

Et voilà c'est fait ! Enfin presque... Isso a besoin d'un fichier de configuration pour démarrer.

Configuration de Isso

Voici le mien, que j'ai placé dans /apps/python/isso/etc/isso.conf

[general]
dbpath = /apps/python/isso/comments.db
host = http://blog.jeanchampemont.com/
notify = smtp

[smtp]
host = localhost
port = 25
from = isso@jeanchampemont.com
to = votre.email@fai.fr

[server]
listen = http://localhost:9876
reload = off
profile = off

[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false

Ce fichier est divisé en plusieurs sections :

  • general : on donne ici l'emplacement du fichier SQLite utilisé pour le stockage des commentaire, la liste des adresses autorisées à afficher/publier les commentaires (utilisé pour positionner les en-têtes http de CORS), et la méthode de notification pour les nouveaux commentaires.
  • smtp : adresse, port et e-mail d'origine pour l'envoi des mails de notification
  • server : il s'agit cette fois de préciser sur quelle adresse le serveur de commentaire est à l'écoute des connexions.
  • guard permet de limiter le spam

La documentation étant plutôt bien faite, je vous encourage à aller la consulter pour vous faire une idée des autres options possibles.

(Re)démarrage automatique avec Supervisord

Supervisord est un outil pour superviser des processus que j'affectionne tout particulièrement. Il est plutôt simple d'utilisation, et fait exactement ce qu'on lui demande, c'est à dire lancer un ensemble de processus au démarrage du système, et les rédémarrer en cas de crash.

Voici mon fichier de configuration pour un (re)démarrage automatique de Isso :

[program:isso]
command = /apps/python/isso/local/bin/isso -c /apps/python/isso/etc/isso.conf run
user = python
autostart = true
autorestart = true

Configuration de Nginx

Voici la configuration de mes Virtualhost sous Nginx pour un accès en https au serveur de commentaire :

server {
	listen 80;
    server_name comments.jeanchampemont.com;
	return 301 https://$server_name$request_uri;
}

server {
	listen 443 ssl;
	server_name comments.jeanchampemont.com;
	ssl_certificate /chemin/vers/mon/certificat;
    ssl_certificate_key /chemin/vers/ma/clef/privee;

	access_log /var/log/nginx/comments.jeanchampemont.com_access.log;
    error_log /var/log/nginx/comments.jeanchampemont.com_error.log;

	location / {
    	proxy_pass http://localhost:9876;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Host $host;
    	proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Utilisation de Isso sur Ghost

Allez courage, c'est bientôt finis, et ça tombe bien, c'est très certainement la partie la plus simple !

Les commentaires dans Isso sont gérés en fonction de l'URL d'appel. Par exemple, si j'appelle le module de commentaire sur la page http://blog.jeanchampemont.com/bienvenue-sur-ghost/ , les commentaires qui y sont publiés sont associés à l'URL http://blog.jeanchampemont.com/bienvenue-sur-ghost/.

Pour l'intégration du module de commentaires pour la page en cours, les deux lignes suivantes suffisent :

<script data-isso="https://comments.jeanchampemont.com" src="https://comments.jeanchampemont.com/js/embed.min.js"></script>
<section id="isso-thread"></section>

Pour afficher un compteur de commentaires sur la liste des articles, c'est tout aussi simple :

<a href="http://url/vers/larticle/#isso-thread">commentaires</a>

En incluant une seule fois le script suivant :

<script data-isso="https://comments.jeanchampemont.com" src="https://comments.jeanchampemont.com/js/count.min.js"></script>

Ce script va rechercher tous les liens vers #isso-thread, y injecter le nombre de commentaire pour l'article en question, et gérer le singulier/pluriel du mot qui suit. (enlever ou non le 's' à la fin).

Vous pouvez retrouver mon thème pour ghost qui inclus l'utilisation de Isso sur mon github.