Isso : Commentaires auto-hébergés pour Pélican (et autres sites statiques).

Internet c'est plutôt bien, mais Disqus, c'est plutôt mal.

Les sites statiques c'est chouette...

Mais pour un blog, en terme de feedback, c'est un peu just... Si certains choisissent de recevoir leurs retours par email ou de se passer de tout commentaire, j'ai pu constater que mombre ont recours à des service tiers tels Disqus ou Livefyre.

Utilisant moi-même le générateur de sites statiques Pelican pour ce blog j'aimerais offrir un moyen commode de retour et de disqussion aux internautes de passage.

Pourquoi pas disqus/Livefyre ?

Parce-que ce sont des silos d'informations centralisées, dont le modèle économique se doit de reposer sur la marchandisation des données. Très peu pour moi, vous valez mieux que ça ;-).

Ajoutons à celà que ces services sont complexes et aliénants pour les visiteurs puisqu'ils obligent à créer un compte chez eux1 ; pas de comentaires anonymes.

En revanche, ils ont un principe technique qui convient à merveille aux sites statiques : toute la couche de commentaires est gérée en javascript, par le navigateur.

Disqus-like auto-hébergé

En fait c'est ça que je veux, un disqus-like, mais:

  • en logiciel libre auto-hébergeable ;
  • moins de bling-bling, plus de focus ;
  • commentaires anonymes ;
  • possiblités de modération basiques (en gros pour virer le spam);
  • léger en resources et facile à installer.

Sans entrer dans les détails, voici un rapide tour d'horizon de l'existant en matière de logiciel libre auto-hébergé:

Comment-it

  • Langage : Ruby (+rails)
  • Commentaires anonymes : ?
  • stockage : MySQL/PostgreSQL/SQLite2

Certainement le premier (2007!) mais clairement plus maintenu et n'offre pas de documentation.

Isso

  • Langage : Python
  • Commentaires anonymes : oui
  • stockage : sqlite

Documentation concise mais bien pensée3

Juvia

  • Langage : Ruby (+rails)
  • Commentaires anonymes : non
  • stockage : MySQL/PostgreSQL/SQLite2

Talkatv

  • langage : Python
  • commentaires anonymes : non
  • stockage: MongoDB

Tildehash comments

  • Langage : PHP (…)
  • Comentaires anonymes : oui
  • stockage: fichiers plats

Match ?

Pourquoi regarder le langage ? Eh bien ruby est de loin le plus grand consommateur de mémoire vive sur mon serveur alors qu'il ne fait pas grand chose, et PHP a une méchante tendance à être lent. Je préfère aller au plus sobre, suivez mon regard…

Isso, qui m'avait été recommandé emporte donc largement mon adhésion avec sa philosophie minimaliste6.

Le style par défaut est assez élégant ; jugez par vous-même.

Détail des fonctionalités d'Isso

  • Syntaxe Markdown
  • Suppression/modification des commentaires par leur auteur ;
  • Import depuis Disqus ;
  • Serveur indépendant ou pouvant être pris en charge via WSGI;
  • Rendu Markdown en C, rendant le tout réellement rapide ;
  • Internationalisé inclut le français) ;
  • Modération configurable (a-priori ou a-posteriori)
  • Notifications par mail

Mettre en place Isso sur votre serveur

Installation

Le site officiel explique correctement l'installation qui sans être complexe, n'est pas si évidente que le laisse croire la documentation4.

Sous Debian, on peut aussi le faire par paquets

Si vous utilisez Debian Jessie ou sid

Un paquet est disponible dans unstable, je me suis contenté de le backporter et de l'héberger.

  • Si vous utilisez sid, vous pouvez l'installer séance tenante,
  • Si vous utilisez jessie, il faudra d'abord suivre les instructions pour ajouter mon dépôt contenant le backport.

Ensuite :

# apt-get update
# apt-get install isso gunicorn

Reste ensuite à créer un fichier de configuration.

Si vous utilisez Debian Wheezy

J'ai mis à profit les scripts de Jan Graichen pour construitre et mettre à disposition des paquets Debian (Wheezy)5 pour vous.

Allez hop, suivez les instructions pour ajouter le dépôt puis

# apt-get update
# apt-get install isso

Note: un paquet tout chaud est en cours d'intégration à Debian mais ça ne sera pas dans la version stable demain...

Virtualhost

La manière la plus simple d'installer Isso est de configurer votre serveur web pour le servir sur un vhost, par exemple comments.example.com. Mais d'autres configurations sont possibles.

Le serveur Isso écoute par défaut sur le port local 8095, charge à vous de lui faire un hôte virtuel, par exemple ici, pour présenter le service à l'adresse http://comments.example.com.

Des fichiers de configuration sont fournis avec le paquet (ou en annexe). Il faut juste les copier au bon endroit et penser à y remplacer le nom comments.example.com par quelque-chose de plus seyant.

Avec Lighttpd :

# cp /etc/isso/examples/lightttpd-isso-vhost.conf /etc/lighttpd/conf-available/50-isso.conf
# nano /etc/lighttpd/conf-available/50-isso.conf
# lighty-enable-mod isso proxy
# service lighttpd reload

Avec Apache :

# cp /etc/isso/examples/apache-isso-vhost.conf /etc/apache2/sites-available/isso.conf
# nano /etc/apache2/sites-available/isso.conf
# a2enmod proxy proxy_http
# a2ensite isso
# service apache2 restart

Avec Nginx :

# cp /etc/isso/examples/nginx-isso-vhost.conf /etc/nginx/sites-available/isso.conf
# nano /etc/nginx/sites-available/isso.conf
# ln -s /etc/nginx/{site-available,site-enabled}/isso
# service nginx reload

Paramétrer Isso

Avec Wheezy

Le paquet Debian installe un fichier /etc/isso.conf qui sert à paramétrer le comportement d'Isso.

Avec Jessie/Sid

Vous pouvez copier et activer le fichier d'exemple :

# cp /usr/share/doc/isso/examples/example.cfg /etc/isso.d/available/isso.cfg
# ln -s /etc/isso.d/{available,enabled}/isso.cfg

Dans tous les cas : personalisation du fichier de configuration

Assez peu de choses à modifier, notons quand-même les suivantes :

Le nom du site sur lequel on poste des commentaires (seule modification indispensable):

host = http://monblog.example.com

La notification mail permet non seulement de se tenir au courant des nouveaux commentaires, mais aussi de recevoir un lien de suppression direct du commentaire. L'exemple ci-dessous considère que le serveur local est un serveur de mail.

notify = smtp

[smtp]
host     = localhost
port     = 25
ssl      = off
security = none
to       = johndoe@example.com

Une limitation (ratelimit) à un certain nombre de commentaires par minute et par bloc d'IP est activée par défaut.

Si vous utilisez sid/jessie, passez START_DAEMON à « yes » dans /etc/default/isso.

Enfin, pour appliquer les changements :

# service isso restart

Intégration avec pelican

L'intégration est réellement rapide ; je ne présente que l'intégration avec pelican, basé sur le thème par défaut, mais vous comprendrez aisément comment faire avec le reste du monde.

Plugin ?

À vrai dire, j'avais commencé à écrire un plugin pelican pour isso, mais cette approche s'avère inutile ; l'intégration est suffisament aisée (adaptation des templates) et un plugin peut difficilement la simplifier davantage.

pelicanconf.py

Par comodité, on définit l'URL du serveur de commentaires dans pelicanconf.py

ISSO_SERVER="http://comments.example.com"

Templates

Je présente des morceaux pertinents de template, si vous utilisez Pelican, vous savez éditer du HTML et où les placer selon votre goût…

base.html

On se contente d'inclure le javascript d'isso dans le <head> de la page.

{% if ISSO_SERVER %}
<script data-isso="{{ ISSO_SERVER }}/" src="{{ ISSO_SERVER }}/js/embed.min.js"></script>
{% endif %}

article.html

(ou tout autre template gérant la page que vous souhaitez commenter au sein de votre thème)

{% if ISSO_SERVER %}
    <hr /><section id="isso-thread"></section>
    <noscript>les commentaires de ce site utilisent javascript</noscript>
{% endif %}

Isso cherche un élément nommé isso-thread et y place les commentaires liés à la page (en se basant sur l'URL) au chargement.

Ce bloc de code est suffisant pour afficher l'arbre des commentaires et le formulaire d'écriture.

Le contenu de <noscript> sera affiché pour les visiteurs ayant désactivé javascript (ex: utilisateurs de NoScript).

comments.html (facultatif)

Tout lien vers le bloc de commentaires d'une page verra son contenu remplacé par un compteur de commentaires. La template comments.html affiche ce compteur de commentaires (ex: utilisé par exemple sur la page d'accueil du template par défaut).

{% if ISSO_SERVER %}
<p><a href="{{ SITEURL }}/{{ article.slug }}.html#isso-thread">Commentaires</a></p>
{% endif %}

Limites

Indexation

Les robots des moteurs de recherche ne font pas (encore?) de javascript, donc les commentaires (qui constituent parfois une part intéressante du contenu) ne seront pas indexés.

Les personnes qui naviguent sans javascript sont privées de commentaires mais en sont informées, libre à elles de l'activer.

Un recours à ce problème pourrait être envisagé : à l'instant de la construction des pages statiques, inclure les commentaires de la page "en dur" dans le HTML. Pour les visiteurs ne bloquant pas les scripts, cette version statique est remplacée illico par celle chargée en javascript. Pour les autres et les bots, c'est moins à jour, mais constitue un fallback correct.

Accessibilité

Le site reste accessible, les lecteurs d'écran supportant sans problème javascript7. Vous pouvez fouiller la propriété HTML aria-live, mais sa valeur par défaut (off) semble adaptée au chargement des commentaires.

Conclusion

C'est du libre, de l'auto-hébergé et du bon, facile à installer, documenté et performant. En espérant vous avoir convaincu de bazarder Disqus ou autre service de commentaires privateur !

L'absence de certaines fonctionalités en rebutera peut-être certains :

  • pas d'interface web pour modérer les commentaires (il faudra s'en tenir aux liens dans les mails envoyés à chaque nouveau post) ;
  • pas d'avatars personalisables mais des identicons.

C'est aussi une question de philosophie, pour moi ces non-fonctionalisés participent du minimalisme élégant d'isso.

L'auteur d'Issoen discute volontiers et semble ouvert aux contributions, alors n'hésitez pas à apporter votre pierre, en bugs, en code, en mots polyglotés ou bien doux.

Notes sur le dépôt

http://packages.crapouillou.net a vocation éventuellemnt accueillir d'autres logiciels relatifs à l'auto-hébergement qui m'intéressent.

Pour l'instant, les paquets sont proposés pour i386/amd64. Si vous souhaitez construire les paquets pour d'autres architectures, je serais ravi de les héberger.

EDIT 23/07/2015: instructions pour jessie/sid avec les packages debian officiels.

Références


  1. Ce qui fait que je n'ai pour ma part jamais laissé un seul commentaire sur un site disqusifié… 

  2. Soit les bases supportées par 

  3. avec notamment une BD rigolote activerecords, l'ORM de rails. 

  4. Puisqu'il vous faudra installer des libs de développement et un compilateur 

  5. je ne propose actuellement que la distribution Wheezy en amd64 et x86 mais vous invite à m'envoyer les paquets pour les autres architectures/distributions. 

  6. « SQLite backend Because comments are not Big Data. » (site officiel

  7. Pour mettre fin à un mythe : les aveugles et mal-voyants utlisent les mêmes navigateurs que tous le monde, associés à un lecteur d'écran ou grossisseur de caractères....