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 eux ; 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é:
- Langage : Ruby (+rails)
- Commentaires anonymes : ?
- stockage : MySQL/PostgreSQL/SQLite
Certainement le premier (2007!) mais clairement plus maintenu et n'offre pas de documentation.
- Langage : Python
- Commentaires anonymes : oui
- stockage : sqlite
Documentation concise mais bien pensée
- Langage : Ruby (+rails)
- Commentaires anonymes : non
- stockage : MySQL/PostgreSQL/SQLite
- langage : Python
- commentaires anonymes : non
- stockage: MongoDB
- 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 minimaliste.
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
documentation.
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) 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 :
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 javascript. 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
commentaires