Les commentaires sont gérés avec Isso « a commenting server similar to Disqus ». La différence avec Disqus qui est un système centralisé où les visiteurs doivent se connecter à un autre service centralisé (type Facebook) ou créer un compte chez eux (enfin bref c'est de la merde), Isso est open source, peut être auto-hébergé et fonctionne de la même manière (bref c'est bien ! :)
Installation d'Isso sur FreeBSD
Comme souvent, la documentation est inexistante pour FreeBSD et on doit donc se démerder.
On se connecte à une jail
, personnellement je réutilise ma jail db avec MariaDB et Redis.
$ ezjail-admin console db
On installe les paquets nécessaires ainsi qu'Isso.
$ pkg install py36-pip py36-sqlite3
$ pip install isso
Il est possible de faire ça plus propre et travailler dans un virtualenv
, c'est au choix. On vérifie qu'on a bien le binaire :
$ whereis isso
isso: /usr/local/bin/isso
Avant de démarrer, on crée un utilisateur dédié et le fichier de configuration pour Isso :
pw groupadd isso
pw adduser isso -g isso -d /nonexistent -s /usr/sbin/nologin -c "Isso user"
[general]
dbpath = /var/db/isso/comments.db
log-file = /var/log/isso.log
host = http://isso.mondomaine.tld/
https://isso.mondomaine.tld/
max-age = 5m
Toutes les options sont disponibles ici. On termine les préparatifs par créer l'environnement nécessaire qu'on a défini plus haut.
mkdir /var/db/isso/ && touch /var/log/isso.log
chown isso:isso /var/db/isso/ /var/log/isso.log
On peut tester :
/usr/local/bin/isso -c /usr/local/etc/isso.conf run
Si tout est fonctionnel, Isso écoute sur le port 8080
.
$ sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
isso python3.6 59847 5 tcp4 192.168.0.4:8080 *:*
Reste à faire tourner Isso en mode daemon
. Un script rc existe mais ne fonctionne pas. Après review, ça n'était qu'une erreur sur une l'utilisation d'une variable, j'ai corrigé ce script. Vous pouvez trouver mon fork par ici. On va s'en servir tout de suite :
fetch https://gist.githubusercontent.com/pboesch/721ab95c8ec52b1d0047af4b2b88999c/raw/40976171b494759973317aad59fb7808357bdcc7/isso -o /usr/local/etc/rc.d/isso
chmod +x /usr/local/etc/rc.d/isso
sysrc isso_enable=YES
service isso start
Isso avec HAProxy
Isso n'est actuellement qu'à l'écoute dans jail
, il faut qu'il soit accessible publiquement. J'utilise pour cela un domaine dédié - ce qui semble être la méthode recommandée - il faut donc proxyfier tout ça. Une configuration pour nginx est fournie, c'est bien mais HAProxy c'est mieux :) La soucis technique à prendre en compte est CORS.
Sur HAproxy, je capture le header Origin
et envoie les requêtes à destination de isso.mondomaine.tld
vers le backend
approprié (ici ma jail db) qui a pour server
Isso (192.168.0.4:8080).
frontend http
capture request header origin len 128
acl is_isso hdr(host) -i isso.mondomaine.tld
use_backend jail_db if is_isso
backend jail_db
mode http
http-response set-header Access-Control-Allow-Credentials true
http-response set-header Access-Control-Allow-Origin %[capture.req.hdr(0)]
server isso 192.168.0.4:8080 weight 1 check
Intégrer Isso à Pelican
Entre les balises <head>
dans templates/base.html
de votre thème, on peut ajouter quelque chose comme :
<head>
…
{% if ISSO_SERVER %}
<!-- Comments powered by Isso -->
<script data-isso="{{ ISSO_SERVER }}/"
src="{{ ISSO_SERVER }}/js/embed.min.js">
</script>
{% endif %}
…
</head>
Dans pelicanconf.py
ISSO_SERVER="https://isso.mondomaine.tld/"
On finalise par inclure les commentaires dans les articles dans templates/article.html
{% if ISSO_SERVER %}
<div class="comments">
<hr />
<h2>Commentaires</h2>
<section id="isso-thread"></section>
<noscript>malheureusement les commentaires utilisent javascript</noscript>
</div>
{% endif %}
Bim ! On fait tourner Isso dans une jail FreeBSD avec les flux gérés par HAProxy !
Commentaires