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

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.

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

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.

Il faut installer la version en développement de gunicorn via github:

$ python3.8 -m pip install https://github.com/benoitc/gunicorn/tarball/master

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

CSS qui vient avec isso:

Pour des exemples de styles CSS: