Die Ghost-Software, die diesen Blog betreibt, hat leider keine integrierte Kommentarfunktion. Dieser Beitrag beschreibt, wie man die aktuelle Version der netten, kleinen Lösung „Isso“ auf einem Uberspace 7 einbindet.

Anmerkung: Das meiste gilt grundsätzlich auch bei auf andere Weise erzeugten statischen Webseiten, nehme ich stark an. Außer Isso mit Python laufen zu lassen, muss letztlich nur irgendwie etwas JavaScript eingebunden werden können.

Alternativ gibt es natürlich allerlei Rechner-anderer-Leute Cloud-basierte Lösungen (Disqus wäre ein prominentes Beispiel, das auch von den Ghost-Leuten vorgeschlagen wird), aber so etwas scheidet aus, weil Datenschutz.

In meinem Fall lief Ghost nebst Isso vorher auf einem Uberspace 6, was ich aber unter anderem wegen der Node.js-Version ändern wollte. Im gleichen Zug wollte ich auch auf die neueste Isso-Version upgraden. Die hat nämlich schöne Features bekommen, zum Beispiel ist so ein Admin-Interface netter als die Verwaltung nur über E-Mails. Der Umzug von Ghost ist im Wesentlichen Fleißarbeit – alte Daten (Inhalt, Theme) exportieren, neue Instanz aufsetzen, Daten importieren, bisschen Links korrigieren usw., am Ende A- und AAAA-Records der Domain auf die neuen Server-Adressen ändern.

Zu (aktuellem) Isso auf (aktuellem) Uberspace habe ich dagegen im Netz nichts gefunden, bzw. nichts, das hinreichend half, daher habe ich im Folgenden die einzelnen Schritte aufgeschrieben:


Im Einzelnen braucht es folgende nicht sehr überraschende Zutaten:

  • Ghost auf Uberspace 7
  • Eine (Sub-) Domain für den Blog
  • Eine Subdomain für Isso
    Eine andere Domain würde wegen der Same-Origin-Policy Schwierigkeiten machen; CORS ist bei Uberspace (noch) nicht vorgesehen. Alternativ kann man einen Teilpfad wie example.org/isso über ein eigenes Web Backend der Macht von Ghost entreißen. Habe ich aber auf U7 nicht probiert.

Installieren von Isso

Ich benutze die Version 3.6 von Python.

pip3.6 install isso --user

Damit sollte die Installation durchlaufen. --user ist wichtig, weil wir keine Admin-Rechte haben.

Anpassen der Konfiguration von Isso

Die Datei unter  ~/etc/isso/user.cfg wie folgt editieren. Dabei mindestens dbpath und host anpassen.  
Die IP für den listen-Parameter muss bei Uberspace 0.0.0.0 sein. Den Port (hier: 9000) kann man zwischen 1024 und 65535 frei wählen, er sollte halt unbelegt sein. Für alles Weitere sei auf die Isso-Doku verwiesen.

[general]
dbpath = /home/<user>/etc/isso/comments.db
host = https://example.org/
notify = smtp

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

[smtp]
username = <user>
password = ...
host = localhost
port = 587
security = starttls
to = isso@example.org
from = blog@example.org

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

[hash]
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2

[admin]
enabled = true
password = ...
~/etc/isso/user.cfg 

Testen ob es geht mit diesem Befehl:

 isso -c ~/etc/isso/user.cfg run

Erfreulicherweise hat meine „Datenmigration“ funktioniert, indem ich die comments.db-Datei der alten Isso-Instanz einfach an die neue Stelle laut dbpath kopiert habe. Schlichtes SQLite hat durchaus Vorteile.

Subdomain für Isso verbinden

Die Adresse und gegebenenfalls den Port entsprechend anpassen:

uberspace web domain add comments.example.org
uberspace web backend set comments.example.org --http --port 9000

Alternativ für die Lösung ohne Subdomain (example.org/isso):
uberspace web backend set /isso --http --port 9000 (Ungetestet! Ich weiß nicht, ob das gleichzeitig mit Ghost gescheit geht. Auf U6 mit RewriteCond/RewriteRule-Einträgen in der .htaccess ging es jedenfalls…)

Test der Admin-Oberfläche

Falls die Administrationsfunktion benutzt werden soll (also die Parameter unter  [admin] entsprechend gesetzt sind):
Im Browser sollte die URL analog zu „comments.example.org/admin“ eine Login-Seite zeigen; Aufruf von „comments.example.org“ allein sollte ein „Bad Request – missing uri query“ liefern. (Für die Admin-Seite in ganzer Pracht muss man leider im Browser gemischte Inhalte zulassen.)

Konfigurieren von Supervisor

Wenn Isso funktioniert, eine Datei unter ~/etc/services.d/ mit Namen isso.ini und diesen Inhalts erstellen (<user> anpassen!):

[program:isso]
command = /home/<user>/.local/bin/isso -c /home/<user>/etc/isso/user.cfg run
autostart = true
autorestart = true
~/etc/services.d/isso.ini

Danach den Service mit diesen beiden Befehlen zum Laufen bringen:

supervisorctl reread
supervisorctl update

Änderungen im Ghost-Theme

Die Kommentarfunktion muss jetzt nur noch an der gewünschten Stelle in der Webseite eingebunden werden. Ich möchte sie nur auf den „Post“-Seiten zur Verfügung stellen, nicht auch auf den „Pages“ (also nicht beim Impressum und ähnlichem). In dem Fall die posts.hbs-Datei des Themes wie folgt ändern oder eben entsprechende andere Seiten. Alternativ lässt sich der <script ... </script>-Teil auch mit der „Code Injection“-Funktion in der Ghost-Adminoberfläche einbinden.
Die Bedeutung des Parameters und weitere Optionen stehen in der Isso-Dokumentation.

    (...)						  
            </footer>
            <script data-isso="https://comments.example.org/" src="https://comments.example.org/js/embed.min.js"></script>
            <section class="post-full-comments">
                <div id="isso-thread"></div>
            </section>
        </article>
post.hbs

Anmerkung: Die eine Script-Zeile und das leere div sind in der Tat alles, was nötig ist. Den restlichen Inhalt liefert Isso, also das Python-Backend!  

Titelfoto: Steve Johnson / Unsplash