Hugo + Isso + Debian 10 : Système de commentaire léger
Contexte
Je cherchais une alternative libre à Disqus pour ajouter une section commentaire à mon blog. Je la voulais légère, opensource, en développement actif et facile à intégrer. En fouillant un peu je suis tombé sur ISSO, un système qui coche toutes les cases.
Son nom vient de l’allemand “Ich schrei sonst!”. Petite explication tirée de la doc officielle :
Isso is an informal, german abbreviation for “Ich schrei sonst!”, which can roughly be translated to “I’m yelling otherwise”. It usually ends the discussion without any further arguments.
In germany, Isso is also pokémon N° 360.
Isso est conçu autour d’un système client/serveur. Il est très léger.
La partie cliente est constituée d’un simple fichier .js
et d’un bout de code pour l’appeler, intégrable sur n’importe quel site.
Le serveur, lui, est écrit en python ce qui lui permet d’être installé via un gestionnaire de paquet python (pip, pypi, …), dans un environnement virtuel python et même via apt
et yum
pour les systèmes Debian/Ubuntu et Fedora/Red Hat. Une image Docker est également proposée ainsi qu’une installation via les sources, disponibles sur github.
Enfin, SQLite gère le stockage des données.
Il est possible d’importer des commentaires depuis Wordpress ou Disqus dans Isso.
La documentation est relativement bien faite.
Je vais utiliser le gestionnaire de paquet pip
pour gérer l’installation, dans un environnement virtuel python. Cela me permettra d’avoir une version plus à jour que via les dépots apt
, et de lancer Isso dans un environnement indépendant.
Pour plus de cloisonnage et donc de sécurité, un nouvel utilisateur va être créé pour gérer Isso.
Dépendances
On installe les dépendances :
apt install sqlite3 build-essential python3-dev python3 python3-pip python3-venv libssl-dev libffi-dev
Vous aurez également besoin d’un sous domaine dédié à Isso (ex : isso.votredomaine.tld) pointant vers le serveur hébergeant Isso. Il est possible de faire autrement, avec par exemple votredomaine.tld/isso mais je ne décrirai pas cette méthode ici. Notez que la partie concernant l’installation reste la même.
Installation
Serveur
Le nouvel utilisateur :
adduser isso --disabled-login --disabled-password
Depuis root
, on se connecte au nouvel utilisateur, on créé l’environnement virtuel et les répertoires de configuration.
su - isso
mkdir -p /home/isso/isso_serv
mkdir -p /home/isso/isso_conf
mkdir -p /home/isso/isso_bdd
python3 -m venv /home/isso/isso_serv
source /home/isso/isso_serv/bin/activate
On peut maintenant lancer l’installation
pip3 install wheel
pip3 install isso
Configuration
Toujours avec l’utilisateur isso
, on crée le fichier de configuration.
nano /home/isso/isso_conf/conf.cfg
[general]
dbpath = /home/isso/isso_bdd/comments.db
host =
http://kettbi.fr/
https://kettbi.fr/
http://www.kettbi.fr/
https://www.kettbi.fr/
name = kettbi
max-age = 15m
;notify = smtp
log-file = /home/isso/isso.log
[admin]
enabled = true
password = upPn6PKc29imqjT6PJ52Q3WpTJNHf4Kb
[moderation]
enabled = false
[server]
listen = http://localhost:8080
reload = off
profile = off
[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false
require-author = true
require-email = false
;public-endpoint = https://isso.kettbi.fr
;[smtp]
;username =
;password =
;host =
;port =
;security =
;to =
;from =
;timeout =
[hash]
salt = 6VPoRUGTvcS3kx9NM436cofu5vTyiVRw
algorithm = pbkdf2
De nombreuses options sont paramétrables dans ce fichier, je vous renvoie vers la documentation pour une liste exhaustive, mais voici quelques exemples :
- [general] : le block décrivant les options de base du serveur
- max-age : le temps durant lequel un commentaire est modifiable par son rédacteur
- notify : si défini sur
smtp
, vous envoie un mail pour chaque nouveau commentaire posté sur votre site
- [admin] : active ou non l’interface d’administration des commentaires, disponible à l’URL /admin du sous domaine
- [moderation] : active ou non la modération des commentaires, il est possible de recevoir un lien par mail pour valider chaque commentaire
- [server] : le comportement du serveur, celui-ci peut écouter sur un port réseau ou via un socket Unix
- [guard] : les options anti-SPAM, pour empêcher les scripts/spammeurs d’inonder votre site de commentaires
- require-email : autorise ou non les commentaires sans préciser d’email
- require-author : autorise ou non les commentaires sans préciser de nom/pseudo
- [smtp] : les options d’envoi de mail
- [hash] : option de hashage, utiliser pour masquer les adresses emails des posteurs
Test
Il est temps de tester notre configuration.
Toujours avec l’utilisateur isso
isso -c /home/isso/isso_conf/conf.cfg run
Si la console ne renvoie aucun problème et que la log non plus (cat /home/isso/isso.log
), alors on peut passer à la création du service.
note : l’erreur unable to connect to your website, Isso will probably not work correctly. Please make sure, Isso can reach your website via HTTP(S).
est normale. Elle apparaîtra tant que nous n’aurons pas configuré nginx.
Service
La création du service nécessite cette fois l’accès root
nano /etc/systemd/system/isso.service
[Unit]
Description=lightweight Disqus alternative
[Service]
User=isso
Environment="ISSO_SETTINGS=/home/isso/isso_conf/conf.cfg"
ExecStart=/home/isso/.local/bin/isso -c $ISSO_SETTINGS run
[Install]
WantedBy=multi-user.target
On active le service pour qu’il se lance au démarrage de la machine.
systemctl enable isso
On lance le service et on vérifie que tout va bien.
systemctl start isso
systemctl status isso
● isso.service - lightweight Disqus alternative
Loaded: loaded (/etc/systemd/system/isso.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-02-06 15:05:16 CET; 20s ago
Main PID: 21670 (isso)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/isso.service
└─21670 /usr/bin/python3 /home/isso/.local/bin/isso -c /home/isso/isso_conf/conf.cfg run
Pour être certain que tout fonctionne correctement, on peut vérifier les ports en écoute sur la machine.
root@TS:~# netstat -plunt
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 21670/python3
Tout est ok, on va pouvoir passer à la configuration du serveur (ici nginx).
Nginx
Je pars du principe que NginX est déjà installé sur votre machine et que la configuration de base est effectuée puisque vous hébergez déjà votre site web. Si ce n’est pas le cas (par exemple si vous souhaitez faire tourner Isso sur un serveur à part), un simple apt install nginx
devrait être suffisant pour démarrer.
Configuration
Toujours en root
, on va créer le fichier ce configuration pour nginx.
nano /etc/nginx/sites-available/isso.kettbi.fr
server {
listen 80;
listen [::]:80;
server_name isso.kettbi.fr;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /var/log/nginx/isso.kettbi.fr-access.log;
error_log /var/log/nginx/isso.kettbi.fr-error.log;
}
On active la nouvelle configuration et on redémarre nginx pour qu’il l’applique
ln -s /etc/nginx/sites-available/isso.kettbi.fr /etc/nginx/sites-enabled/isso.kettbi.fr
systemctl restart nginx
Si votre sous-domaine pointe bien vers votre serveur, vous devriez avoir les résultats suivants
pour http://isso.votredomain.tld :
pour http://isso.votredomain.tld/admin :
Tout fonctionne correctement, ajoutons un peu de sécurité.
Letsencrypt
Pour cette étape, votre sous domaine doit impérativement pointer vers ce serveur et le service Isso doit être en marche, son port doit être en écoute. Si ce n’est pas le cas, le challenge effectué par letsencrypt pour attribuer une paire de clés/certificat échouera.
On peut maintenant passer notre configuration en HTTPS/HTTP2 pour plus de sécurité et de rapidité. Pour cela on va installer letsencrypt et son module pour nginx, si ce n’est pas déjà fait.
Toujours en root
:
apt install letsencrypt python3-certbot-nginx
On va maintenant générer les clés et le certificat pour notre domaine
letsencrypt --nginx -d isso.kettbi.fr
Lors du premier lancement, Letsencrypt vous demande, entre autres, une adresse email. Suivez les instructions. Après la génération, Letsencrypt propose de générer pour nous la redirection HTTP vers HTTPS. Choisissez l’option qui vous convient. Personnellement, je le laisse faire.
Le fichier de configuration de votre site devrait maintenant ressembler à ça
nano /etc/nginx/sites-enabled/isso.kettbi.fr
server {
server_name isso.kettbi.fr;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /var/log/nginx/isso.kettbi.fr-access.log;
error_log /var/log/nginx/isso.kettbi.fr-error.log;
listen [::]:443 ssl http2; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/isso.kettbi.fr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/isso.kettbi.fr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = isso.kettbi.fr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name isso.kettbi.fr;
return 404; # managed by Certbot
}
J’ai activé HTTP2 en l’ajoutant dans le fichier de configuration comme affiché ci-dessus.
On redémarre une dernière fois le service nginx
systemctl restart nginx
A ce stade, l’interface d’administration est accessible via HTTPS, HTTP est redirigé vers HTTPS et notre serveur Isso ne nous remonte plus de problème en log. Il ne reste plus qu’à intégrer les commentaires dans notre site.
Intégration
Pour l’intégration de l’espace commentaires, il suffit d’ajouter le script suivant dans les pages de notre site.
<script data-isso="//comments.example.tld/"
src="//comments.example.tld/js/embed.min.js"></script>
<section id="isso-thread"></section>
Pour Hugo j’ai simplement modifié le fichier single.html
de mon thème, pour que l’espace commentaires s’affiche sous chaque post.
nano themes/m10c/layouts/_default/single.html
[...]
<div class="post-footer">
<section id="isso-thread"></section>
<script data-isso="https://isso.kettbi.fr/" src="https://isso.kettbi.fr/js/embed.min.js"></script>
</div>
[...]
Je ne suis pas satisfait des couleurs par défaut. Je les modifierai dans le futur pour qu’elles s’accordent avec celles du thème que j’utilise.
Sauvegarde
Il suffit d’intégrer les répertoire suivants à votre sauvegarde :
- /home/isso/isso_bdd : le répertoire de la base de données contenant les commentaires
- /home/isso/isso_conf : le répertoire contenant votre fichier de configuration
Vous pouvez y ajouter le répertoire /home/isso/isso_serv
. Même s’il ne contient aucune donnée, il peut dans certains cas accélérer la procédure de restauration.
Enfin, sauvegarder le fichier /home/isso/isso.log
permet d’avoir une visibilité sur les événements du serveur, à vous de voir s’il vous intéresse ou non.
Mise à jour
Pour la mise à jour, rien de plus simple.
En root
:
su - isso
source /home/isso/isso_serv/bin/activate
pip3 install --upgrade isso
Liens
https://posativ.org/isso/docs/
https://stanislas.blog/2018/02/add-comments-to-your-blog-with-isso/
https://www.researchut.com/blog/comments_on_hugo_with_isso/
https://jesuisadmin.fr/installer-isso-sur-ubuntu-16-04-lts-remplacer-disqus/