Isso pour ajouter des commentaires à un site statique
Testé sur OpenBSD 7.6 avec Python 3.11.
Ceci est une version révisée de mon guide précédent pour configurer un serveur isso pour des sites multiples dans un environnement virtuel python.
Créer un utilisateur dédié
# useradd -m -s /bin/ksh _isso
# passwd _isso
Installer isso et gunicorn
Pour héberger les commentaires de plusieurs sites, il faut installer un serveur WSGI. gunicorn est une des options proposées dans la documentation de isso.
Le dernier release de unicorn (20.0.4) a un bug avec isso et ne fonctionnera pas. On ne peut donc pas utiliser le port de OpenBSD via pkg_add py3-gunicorn
.
Créer un environnement virtuel avec python
Depuis OpenBSD 7.6 et python3.11, pip force l’utilisation du virtualenv et n’autorise plus l’installation de modules dans l’espace usager régulier via $ pip install
.
On installe d’abord le module python virtualenv:
root ~$ pkg_add py3-virtualenv
Créer un environnement virtuel pour l’usager _isso
:
_isso ~$ mkdir py3venv
_isso ~$ virtualenv -p python3 /home/_isso/py3venv
On peut tester l’environnement virtuel:
_isso ~$ . py3venv/bin/activate
(py3venv) _isso ~$ which python
Installer isso et gunicorn dans l’environnement virtuel
(py3venv) _isso ~$ pip install isso
(py3venv) _isso ~$ pip install https://github.com/benoitc/gunicorn/tarball/master
...
Successfully installed gunicorn-23.0.0 packaging-24.1
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 =
https://phil.quebec/
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>
Configuration du serveur isso
Créer un fichier de configuration par site en ajoutant le champs name.
philstjacques.cfg:
[general]
name = phil
bonsai.cfg:
[general]
name = bonsai
Configuration du client isso
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 le serveur isso multisites
On lance isso avec gunicorn en déclarant les fichiers de configuration dans une variable d’environnement:
#!/bin/ksh
#
export ISSO_SETTINGS="/home/_isso/philstjacques.cfg;/home/_isso/bonsai.cfg;/home/_isso/castor.cfg;/home/_isso/philavelo.cfg"
/home/_isso/py3venv/bin/python /home/_isso/py3venv/bin/gunicorn --preload -b localhost:8080 isso.dispatch > /home/_isso/gunicorn.log 2>&1 &
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 dans un environnement virtuel python:
#!/bin/ksh
#
# $OpenBSD: issod,v 1.0 2022/10/19 19:52:12 neutrino Exp $
daemon="/home/_isso/scripts/multiisso"
daemon_execdir="/home/_isso/"
daemon_user="_isso"
rc_BG=YES
. /etc/rc.d/rc.subr
rc_reload=NO
#pexp="/usr/local/bin/python3.11 /home/_isso/.local/bin/gunicorn"
pexp="/home/_isso/py3venv/bin/gunicorn"
rc_check() {
pgrep -T "${daemon_rtable}" -q -f "${pexp}"
}
rc_stop() {
pkill -f "${pexp}"
}
rc_cmd $1
Activer le script comme démon:
# rcctl enable issod
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