Isso – Kommentarfunktion für Kirby CMS

Eine selbstgehostete, datenschutzfreundliche Alternative zu Disqus & Co.

Isso ist ein schlanker, in Python geschriebener Kommentarserver der Kommentare in einer SQLite-Datenbank speichert. Kein Drittanbieter, keine Tracking-Cookies, kein JavaScript-Framework – passt damit gut zur Selbsthosting-Philosophie von Kirby CMS.

Voraussetzungen

  • Kirby CMS (getestet mit Version 5.4.0)
  • Docker und Docker Compose auf dem Server
  • Eine Subdomain für den Isso-Dienst (hier: comments.bayerwald.social)
  • SMTP-Zugang für E-Mail-Benachrichtigungen (hier: Amazon SES)
  • SSL-Zertifikat für die Subdomain

Installation via Docker Compose

Verzeichnisstruktur anlegen:

sudo mkdir -p /opt/docker-apps/isso/config /opt/docker-apps/isso/db

/opt/docker-apps/isso/docker-compose.yml:

services:
  isso:
    image: ghcr.io/isso-comments/isso:latest
    container_name: isso
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./config:/config
      - ./db:/db

Konfiguration

/opt/docker-apps/isso/config/isso.cfg:

[general]
dbpath = /db/comments.db
host = https://graffiti.bayerwald.social
notify = smtp
max-age = 15m

[server]
listen = http://0.0.0.0:8080/

[moderation]
enabled = true

[smtp]
username = DEIN_SES_SMTP_USERNAME
password = DEIN_SES_SMTP_PASSWORD
host = email-smtp.eu-central-1.amazonaws.com
port = 587
security = starttls
to = deine@email.de
from = isso@bayerwald.social

[guard]
enabled = true
ratelimit = 1
direct-reply = 3
reply-to-self = false
require-email = true
require-author = true

Wichtige Parameter:

  • max-age – Zeitfenster in dem ein Kommentator seinen Kommentar noch bearbeiten oder löschen kann
  • moderation – jeder Kommentar muss manuell freigegeben werden
  • ratelimit – maximale Kommentare pro Minute pro IP
  • notify = smtp – E-Mail-Benachrichtigung bei neuen Kommentaren

Nginx-Konfiguration

/etc/nginx/sites-available/comments.bayerwald.social:

server {
    listen 80;
    server_name comments.bayerwald.social;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name comments.bayerwald.social;

    ssl_certificate /etc/letsencrypt/live/comments.bayerwald.social/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/comments.bayerwald.social/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $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;
    }
}

Aktivieren und neu laden:

sudo ln -s /etc/nginx/sites-available/comments.bayerwald.social /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

SSL-Zertifikat

Mit Cloudflare DNS-Challenge:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cf_cloudflare.ini -d comments.bayerwald.social

Isso starten

cd /opt/docker-apps/isso && sudo docker compose up -d

Funktionstest:

curl http://127.0.0.1:8080/

Erwartete Antwort: 400 Bad Request – missing uri query – das ist korrekt, Isso läuft.

Integration in Kirby

In /var/www/kirby/site/templates/article.php nach snippet('previous-next') einfügen:

?>
<div class="comments marbt2">
  <script data-isso="https://comments.bayerwald.social/"
          src="https://comments.bayerwald.social/js/embed.min.js">
  </script>
  <section id="isso-thread">
    <noscript>JavaScript aktivieren um Kommentare zu sehen.</noscript>
  </section>
</div>
<?php

Kommentare verwalten

Isso hat kein Admin-Interface. Verwaltung erfolgt über:

E-Mail-Links – jede Moderations-Mail enthält einen Freigabe- und einen Lösch-Link. Der Lösch-Link bleibt dauerhaft gültig, auch nach bereits erfolgter Freigabe.

SQLite direkt:

sqlite3 /opt/docker-apps/isso/db/comments.db "SELECT id, author, text FROM comments;"
sqlite3 /opt/docker-apps/isso/db/comments.db "DELETE FROM comments WHERE id = 1;"

Ressourcenverbrauch

Isso ist sehr schlank: ca. 20–30 MB RAM, CPU-Last praktisch null im Leerlauf. Für einen normalen Blog absolut vernachlässigbar.

Nutzung auf weiteren Domains

Isso kann für mehrere Domains gleichzeitig genutzt werden. Dazu in der isso.cfg unter [general] alle Domains eintragen:

host =
    https://graffiti.bayerwald.social
    https://anderedomain.de

Die Einbindung im Template ist identisch – Isso führt pro Seiten-URL automatisch einen eigenen Kommentar-Thread.