Isso pour ajouter des commentaires à un site statique
Testé sur OpenBSD 6.8 et 7.2
Créer un utilisateur dédié
# useradd -m -s /bin/ksh _isso
# passwd _isso
Installer isso
Serveur pour sites multiples
Pour héberger les commentaires de plusieurs sites, il faut installer un serveur WSGI. gunicorn est une des options proposées dans la documentation.
Le dernier release de unicorn (20.0.4) a un bug avec isso et ne fonctionnera pas. On ne peut pas utiliser le port de OpenBSD via pkg_add py3-gunicorn
.
Installer le gestionnaire de paquets Python:
# pkg_add py3-pip
Installer isso pour l’utilisateur _isso. Remplacer pipX.Y par votre version de python.
# su _isso
$ pip3.9 install isso
Ajouter /home/_isso/.local/bin
au $PATH de _isso.
Installer la version en développement de gunicorn via github.
$ python3.8 -m pip install https://github.com/benoitc/gunicorn/tarball/master
redirection vers un sous-domaine avec relayd
Ajouter un enregistrement de type A (comments.example.pw) dans le DNS de votre régistraire et pointer vers la même adresse IP que votre domaine.
Modifier /etc/relayd.conf
pour diriger le trafic vers isso:
# rcctl enable relayd
# cat /etc/relayd.conf
relay "isso" {
listen on comments.example.pw port 80
forward to localhost port 8080
}
redirection vers un sous-domaine avec nginx et encryption ssl
Cette configuration dans /etc/nginx.conf
redirige les requêtes sur comments.neutrino.pw sur le port 80 vers le port 443 (encrypté) qui ensuite redirige les requêtes sur le serveur local http://localhost:8080
server {
listen 80;
server_name comments.neutrino.pw;
location /.well-known/acme-challenge/ {
rewrite ^/.well-known/acme-challenge/(.*) /$1 break;
root /acme;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
server_name comments.neutrino.pw;
listen [::]:443 ssl http2;
listen 443 ssl http2;
access_log logs/isso-access.log;
error_log logs/isso-error.log;
ssl_certificate /etc/ssl/comments.fullchain.pem;
ssl_certificate_key /etc/ssl/private/comments.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
}
}
configuration serveur
Créer isso.cfg
. Seuls quelques paramètres sont essentiels pour démarrer un serveur avec une configuration par défaut.
[general]
dbpath = /var/lib/isso/comments.db
host = https://example.tld/
[server]
listen = http://localhost:1234/
Voici ma config pour ce site:
[general]
#name = phil
dbpath = /home/_isso/philstjacques.comments.db
host =
http://philstjacques.com/
https://philstjacques.com/
max-age = 15m
notify = stdout
reply-notifications = true
log-file = /home/_isso/philstjacques.log
[admin]
enabled = true
password = passwd
[moderation]
enabled = true
purge-after = 60d
[guard]
enabled = true
require-author = true
require-email = false
reply-to-self = true
direct-reply = 10
ratelimit = 4
Pour plus de détails: https://posativ.org/isso/docs/configuration/server/
configuration client
Insérer un bloc HTML dans le bas de page:
<script src="https://comments.neutrino.pw/bonsai/js/embed.min.js"
data-isso="https://comments.neutrino.pw/bonsai/"
data-isso-require-author="true"
data-isso-require-email="true"
data-isso-css="false"
data-isso-reply-notifications="true"
data-isso-reply-to-self="true"></script>
<section id="isso-thread"></section>
Pour plus de détails: https://posativ.org/isso/docs/configuration/client/
inclure le code client dans le site hugo
Inclure un partial dans themes/PaperMod/layouts/_default/single.html
à la fin de la page:
{{- if (.Param "comments") }}
{{- partial "comments.html" . }}
{{- end }}
</article>
Contenu de layouts/partials/comments.html
:
<script src="https://comments.neutrino.pw/bonsai/js/embed.min.js"
data-isso="https://comments.neutrino.pw/bonsai/"
data-isso-require-author="true"
data-isso-require-email="true"
data-isso-css="false"
data-isso-reply-notifications="true"
data-isso-reply-to-self="true"></script>
<section id="isso-thread"></section>
démarrage - site unique
isso -c isso.cfg
configuration serveur
Créer une config par site en ajoutant le champs name.
philstjacques.cfg:
[general]
name = phil
bonsai.cfg:
[general]
name = bonsai
configuration client
Ajouter le paramètre name relatif à chaque site dans les URL src et isso-data du client:
<script src="http://comments.example.pw/phil/js/embed.min.js"
data-isso="http://comments.example.pw/phil/"
data-isso-require-author="true"
data-isso-require-email="true"
data-isso-css="false"
data-isso-reply-notifications="true"
data-isso-reply-to-self="true"></script>
<section id="isso-thread"></section>
lancer isso multisite
On lance isso avec gunicorn en déclarant les fichiers de configuration dans une variable d’environnement:
$ export ISSO_SETTINGS="/etc/isso.d/foo.example.cfg;/etc/isso.d/other.bar.cfg"
$ /home/_isso/.local/bin/gunicorn isso.dispatch -b localhost:8080
Je mets le tout dans un script:
_isso ~/scripts$ multiisso
2021-03-02 20:19:30,971 INFO: connected to http://philstjacques.com/
2021-03-02 20:19:38,661 INFO: connected to https://bonsai.earth/
[2021-03-02 20:19:38 +0100] [75021] [INFO] Starting gunicorn 20.1.0
[2021-03-02 20:19:38 +0100] [75021] [INFO] Listening at: http://127.0.0.1:8080 (75021)
[2021-03-02 20:19:38 +0100] [75021] [INFO] Using worker: sync
[2021-03-02 20:19:38 +0100] [31622] [INFO] Booting worker with pid: 31622
https://posativ.org/isso/docs/setup/multiple-sites/
modération des commentaires
Site unique:
Il suffit de visiter http://comments.server.pw/admin
Sites multiples:
Il suffit de visiter http://comments.server.pw/phil/admin
ajouter un service pour isso
- créer /etc/rc.d/isso
- chmod a+x /etc/rc.d/isso
- rcctl enable isso
Voici mon script de démarrage avec gunicorn en multisites:
#!/bin/ksh
#
# $OpenBSD: issod,v 1.0 2022/10/19 19:52:12 neutrino Exp $
daemon="/home/_isso/scripts/multiisso"
. /etc/rc.d/rc.subr
rc_reload=NO
pexp="/usr/local/bin/python3.9 /home/_isso/.local/bin/gunicorn"
rc_check() {
pgrep -T "${daemon_rtable}" -q -f "${pexp}"
}
rc_stop() {
pkill -f "^${pexp}"
}
rc_cmd $1
Il faut remplacer python3.9 par votre version de python, autrement ce script rc.d ne fonctionnera pas avec rcctl
.
Je prends la peine de modifier la routine rc_check
car l’option -x est utilisée par défaut dans /etc/rc.d/rc.subr
et cela fait échouer les commandes rcctl check|stop
.
Ajouter ces lignes dans /etc/rc.conf.local
:
isso_user=_isso
isso_flags=
Référence: https://gist.github.com/noqqe/7397719
conclusion
Voilà! On a maintenant un serveur de commentaires léger et ouvert pour plusieurs sites statiques!
Liens utiles
- https://posativ.org/isso/ - Site principal de Isso
- https://oktomus.com/posts/2020/add-comments-to-a-static-blog-with-isso/ - Add comments to a static blog with Isso
- https://www.lonecpluspluscoder.com/2021/02/15/static-site-migration-we-have-working-comments-with-isso/
CSS qui vient avec isso:
Pour des exemples de styles CSS:
- https://stiobhart.net/2017-02-24-isso-comments/
- https://blog.manydev.info/posts/201901-installation-de-isso/
Par Philippe St-Jacques