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
EDIT 9/11//2019 : mon dépôt https://packages.debian.org n'est plus maintenu, mais… isso fait désormais partie de Debian stable !.
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
- Site officile et documentation (en)
- Code d'isso
- Paquet debian par Jan Graichen
- Mon dépôt pour Wheezy (amd64/i386) : Isso et ses dépendances backportées.
- Paquet debian officiel pour sid
-
Ce qui fait que je n'ai pour ma part jamais laissé un seul commentaire sur un site disqusifié… ↩
-
avec notamment une BD rigolote activerecords, l'ORM de rails. ↩
-
Puisqu'il vous faudra installer des libs de développement et un compilateur ↩
-
je ne propose actuellement que la distribution Wheezy en amd64 et x86 mais vous invite à m'envoyer les paquets pour les autres architectures/distributions. ↩
-
« SQLite backend Because comments are not Big Data. » (site officiel) ↩
-
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.... ↩