Ein Happen Dynamik: isso installieren und in ein statisches jekyll-Blog einbinden

Statische Blog-Systeme sind schön und gut, ein bisschen Dynamik braucht man aber schon. Z.B. für Kommentare, auch wenn die große Zeit des Kommentierens in Blogs wohl vorbei ist. Der Meinungssturm tobt heutzutage in Social Media…

Datensammler wie Disqus sind indiskutabel, also denken sich die Leute groteske Sachen aus wie Kommentare mit irgendeinem Formprozessor irgendwo in der Wolke zu verarbeiten und dann daraus einen commit auf ein Github-Repo auszulösen. Sinnvoller erscheinen da schon sich als datenschutzfreundlicher gebende gehostete Kommentardienste wie RemarkBox oder comment.sh.

Letztere bieten eine gehostete Version von isso an, das in meinen Blogs schon länger werkelt isso. Das ist ein Kommentarsystem für den eigenen Server, das man wie disqus und Co. per JavaScript in seine statischen Seiten einbinden kann.

isso funktioniert recht gut, wenn es einmal läuft, es hat aber einen großen Haken: Es ist in Python geschrieben, und es gibt nun einmal (für mich zumindest) nix Schlimmeres als das Rumgemache mit virtualenv, pip, easy_install und den diversen rummäandernden Python-Versionen…

Es begab sich, dass ich isso neu installieren musste und die Erstinstallation damals nicht dokumentiert hatte. Damit das nicht noch einmal passiert, habe ich es diesmal aufgeschrieben und hier abgelegt. Vielleicht ist das ja auch noch für jemanden außer mir nützlich…

1. isso-Installation

Die notwenig gewordene erneute Installation war schwieriger als gedacht. Es gibt halt nichts Schöneres als diesen vollgekotzten Bildschirm mit trace-Informationen, der einem eigentlich nur sagen will: »Da fehlt eine Library!« ;-)

Nach einigen fehlgeschlagenen Versuchen mit pip und easy_install hat es dann auf Basis der amtlichen Anleitung funktioniert. Tückischerweise installiert pip seine benötigten Abhängigkeiten nicht vollständig, dem »Auswurf« konnte man aber entnehmen, was noch fehlte.

Ich habe alles mit virtualenv in /opt/isso installiert, da liegen auch die conf-Dateien und die SQLite-Datenbanken. Das Ganze installiere ich mit einem »normalen« User, das braucht nicht als root gemacht zu werden. Ggf. muss man /opt/isso vorher als root anlegen und mit chown dem gewünschten User zugänglich machen. Oder ein beliebiges anderes Verzeichnis verwenden.

  virtualenv /opt/isso
  source /opt/isso/bin/activate
  pip install isso
  # die fehlenden Abhaengigkeiten
  pip install configparser
  pip install ipaddr
  deactivate

Danach kann man es mit /opt/isso/bin/isso testhalber starten, und wenn es keinen »Python-Auswurf« mehr gibt, funktioniert alles. Herzlichen Glückwunsch, das Python-Monster ist besiegt!

2. isso-Konfiguration

isso benötigt eine Konfigurationsdatei, damit es seinen Port und das Blog kennt, in das es eingebunden werden soll.

Für dieses kleine devblog sieht das dann z.B. so aus. Die Konfiguration nil.conf legt die Datenbank in /opt/isso ab, deaktiviert Moderation (dieses kleine Blog segelt unter dem Wahrnehmungsradar der »Turnhallen voller Chinesen«…) und möchte eine Benachrichtigung über neue Kommentare per E-Mail. listen geht auf localhost Port 9090. Hat man isso irgendwohin intern containerisiert, muss man entsprechend die interne IP angeben:

  [general]
  ; database location, check permissions, created if not exists
  dbpath = /opt/isso/nil.db
  ; your website or blog (not the location of Isso!)
  host = https://nil.uninform.at/
  notify = smtp
  [moderation]
  enabled = false
  [server]
  listen = http://127.0.0.1:9090
  [smtp]
  to = adresse@irgend.wohin
  security = starttls
  port = 25
  host = EIN.MAIL.SERVER
  username = USERNAME
  password = PASSWORD

Wenn man damit fertig ist, kann man isso starten und fortan als Hintergrundprozess laufen lassen:

  /opt/isso/bin/isso -c /opt/isso/nil.conf run &

3. isso ins jekyll-Blog einbinden

Nun muss die isso-Pracht noch in das statische Blog hinein. Mein Jekyll-Deployment ist »old school«. Ich möchte keine Github-Pages oder Cloud-Gedöns à la Netlify, ein ordentlicher metallener Server mit einem soliden nginx soll es sein.

Zur Vermeidung von Problemem mit CORS etc. wird isso als Location mit proxy_pass in den nginx-Server eingebunden und ist dann unter https://nil.uninform.at/isso erreichbar:

  server {
    # ... das uebliche nginx-config-zeug der 
    #     Uebersicht halber weggelassen ...
    location /isso {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Script-Name /isso;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:9090;
    }
  }

Nach dem Neustart des nginx ist /isso verfügbar.

Fehlt noch die Einbindung in die Jekyll-Seiten. Diese wird durch ein Stück HTML im Seiten-Template realisiert, bei mir ist es layouts/post.html:

  <script data-isso="//nil.uninform.at/isso/" data-isso-lang="de"
    src="//nil.uninform.at/isso/js/embed.min.js"></script>
  <section id="isso-thread"></section>

Jetzt noch einmal das Jekyll-Blog deployen und der Kommentarflut steht nichts mehr im Wege. Happy Jekylling!

isso python jekyll ssg

Autor: