Was ein Hin und Her. Kaum bin ich Anfang des Jahres auf Wordpress umgestiegen, wechsle ich nun zu Ghost. Dabei ist es viel mehr als ein reiner „Wechsel“, denn ich habe in der Zwischenzeit auch die Arbeitsprozesse „dazwischen“ optimiert.

Warnung: Dieser Blogpost richtet sich an Technik-Interessierte. Ich werde unverschämt viele Fachbegriffe verwenden … Verzeihung!

Zu den neuen Unterstützungsmodellen bitte zu Punkt 3.4 springen.

1 Wie es bisher war und was kommen soll

1.1 Website / Blog

Die Website lief bislang auf Wordpress. Grund dafür war vor allem die Verfügbarkeit von Dokumentation und Plugins. Schnell stellte sich jedoch heraus, dass es nicht die beste Herangehensweise ist, jedes noch so kleine Problem mit einem Plugin lösen zu wollen. Die Seite wurde teilweise unerträglich langsam, mein Wordpress-Dashboard unbenutzbar.

Mein bisheriges Wordpress-Dashboard.
Mein bisheriges Wordpress-Dashboard.

Bloggen in Wordpress bereitete mir zuletzt keine Freude mehr. Das UI ist ein Grauen – viel zu vollgepackt für Blogger*innen, die schlichtweg Texte veröffentlichen wollen.

1.2 Newsletter

Neben meinem Blog betreibe ich einen E-Mail-Newsletter – „Augenmerk“ –, der wöchentlich verschickt wird. Meine Wordpress-Installation war bisher bei Hetzner gehostet; den Newsletter habe ich nicht über Wordpress betrieben, sondern über Revue verschickt. Revue bietet keine schönen Opt-in-Formulare für Wordpress an, deswegen musste ich gezwungenermaßen deren Landingpage nutzen. Das Resultat: zwei Websites und viel Verwirrung bei den Leser*innen.

CNAME-Record zu Revue
CNAME-Record zu Revue

Damit wenigstens die Domains einheitlich waren, habe ich für die Revue-Landingpage einen CNAME eingetragen (newsletter.dominiklawetzky.de). Leider bekommt Revue SSL (https://) nicht gebacken, weswegen ich eine weitere Instanz zwischenschalten musste: ein Content Delivery System – in meinem Fall Cloudflare. Das CDS war für mich eine reine SSL-Lösung. Meinen Blog lesen bei weitem nicht genug Menschen, um ein CDS notwendig zu machen.

Newsletter-Landingpage bei Revue
Die Newsletter-Landingpage bei Revue

Dieser Arbeitsablauf ist nicht nur schlecht zu warten, sondern bürgt auch Probleme beim „Posten“ von Newsletter-Ausgaben. Ich schreibe meine Texte grundsätzlich in Markdown (Ulysses); blöd nur, dass Revue mit Markdown so gar nicht klarkommen will. Die Entwickler*innen haben immer schnell, aber vertröstend auf meine Feature-Requests reagiert. Schade …

Markdown wird von Revue nicht unterstützt
Markdown wird von Revue nicht unterstützt.

(Wie ich das Markdown-Problem gelöst habe? Puh. Ich habe aus Ulysses eine .docx exportiert und dann Absatz für Absatz von Word zu Revue kopiert.)

Zuletzt die Bezahlkomponente … Ich habe diesen Herbst die Möglichkeit eröffnet, meine Arbeit finanziell zu unterstützen. Leider lassen sich Zahlungen bei Revue nur über eine geschlossene Stripe-Schnittstelle (API) einrichten. Logischerweise nimmt sichRevue dafür ein paar Prozent meiner Einnahmen. Das wäre ja nicht weiter tragisch, würde die Stripe-API nicht nur Kreditkarten unterstützen. Außerdem bleibt mir bei Revue der Zugriff auf die Unterstützer*innen-Datenbank verwehrt; ich kann niemanden manuell hinzufügen, der zum Beispiel auf BuyMeACoffee gespendet hat.

1.3 Cloud Storage

Hinzu kommt, dass ich bei Hetzner eine Storage Box gemietet hatte. In dem Cloud Storage landeten alle Dateien, die zu groß für das Webhosting waren oder zu selten aufgerufen wurden. Auch hierfür musste ich wieder einen CNAME eintragen, um meine Domain verwenden zu können (cloud.dominiklawetzky.de).

Die Storage Box nutzte ich einzig und allein für öffentliches Teilen (Filesharing). Alle anderen Daten landen bei mir in Google Workspace (vormals G Suite).

1.4 Gesamtziel

Das dieses System nicht tragbar ist, wurde mir nach wenigen Monaten klar. Ich kann nicht nebenbei vier verschiedene Services warten, wenn gleichzeitig einige dieser Services nicht mit meinem Arbeitsablauf harmonieren.

Das Gesamtziel war folglich die Zusammenführung möglichst vieler Services und damit die „Entwirrung“ meines Systems. Gleichzeitig wollte ich die Website schneller und deren Hosting skalierbar machen. Außerdem möchte ich Herr über mein Unterstützer*innen-Angebot sein (Zahlungsschnittstelle, -modelle und Datenbank).

2 Ghost als Startpunkt

Das erste Mal habe ich Ende 2019 von Ghost gehört. Schon damals war ich begeistert, denn es sollte schneller, schöner und einfacher zu handhaben sein als Wordpress. Zu diesem Zeitpunkt schreckte mich ab, dass die Ghost-Community im Vergleich zum Riesen Wordpress klein ist. Ferner gibt es bei Ghost keine Plugins; stattdessen muss man „in den Code“ eingreifen.

Linux-Konsolen wirken nicht gerade einladend.
Linux-Konsolen wirken nicht gerade einladend.

Erschwerend kommt hinzu, dass es für Ghost wenige One-Click-Installationen gibt. Stattdessen muss man einen eigenen Linux-Server verwalten.

Das alles habe ich mir vor einem Jahr nicht zugetraut. Deswegen griff ich zunächst zu einer One-Click-Installation von Wordpress bei Hetzner und verschlimmbesserte meine Website mit unzähligen Plugins bis zum Überdruss.

Ende August fing ich schließlich an, mit Ghost zu experimentieren. Im Market von DigitalOcean fand ich eine Some-Clicks-Lösung. Ich nahm eine meiner Test-Domains und legte los.

Das UI von Ghost
Das UI von Ghost

Was soll ich sagen: Je mehr ich Ghost kennenlernte, desto mehr lernte ich Wordpress hassen. Ich entschied mich, meine Website nach sieben Monaten bei mit Wordpress auf Ghost umzuziehen.

3 Das neue System

3.1 Hosting und Ghost

Für das Hosting meiner Seite bin ich – unter anderem wegen der Some-Clicks-Lösung zu DigitalOcean gewechselt. Dort kann ich den Virtual Private Server (VPS) jederzeit hochskalieren, sollte meine derzeitige Konfiguration an ihre Belastungsgrenze kommen. Die Preisleistung ist vergleichbar mit dem, was man bei AWS oder ähnlichen bekommt. Im Vergleich zum Marktführer AWS ist DigitalOcean jedoch um einiges übersichtlicher gestaltet.

Bei AWS wird man erschlagen von der schieren Menge an Angeboten.
Bei AWS wird man erschlagen von der schieren Menge an Angeboten.
DigitalOcean hält "Simplicity" dagegen.
DigitalOcean hält „Simplicity“ dagegen.

Das Theme meiner Website „basiert“ auf Ecco Orca. Mittlerweile habe ich weit über 40 Veränderungen am Theme-Code vorgenommen, um das Theme an meine Bedürfnisse anzupassen. Als Code-Editor verwende ich GitHubs Atom.

Zahlreiche Veränderungen am Theme
Zahlreiche Veränderungen am Theme
Anpassungen am Theme werden bei Ghost im Code vorgenommen.
Anpassungen am Theme werden bei Ghost im Code vorgenommen.

Danke Ghost hat meine Website nun eine nicht nur annehmbare, sondern gute Pagespeed.

Die Pagespeed am Desktop liegt bei 95, mobil bei 56.

3.2 Cloud Storage

Ideal ist, dass DigitalOcean auch S3-ähnliche Storage Boxes anbietet. Somit konnte ich mich von Hetzner vollständig verabschieden. Die Web-API von DigitalOcean Spaces sieht der von AWS S3 verblüffend ähnlich.

Web-API von DigitalOcean Spaces
Web-API von DigitalOcean Spaces

Über einen CNAME-Record lässt sich die eigene Domain fürs Teilen von Dateien verwenden. Aus lawetzky.fra1.digitaloceanspaces.comwird cloud.dominiklawetzky.de. Dafür ist es erforderlich, auch das CDN von DigitalOcean zu verwenden. Für mich kein Problem: Goodbye, Cloudflare!

Um den Cloud-Speicher in den Finder meines Macs zu integrieren, greife ich auf die App CloudMounter zurück. Für schnelles Filesharing benutze ich Dropshare. Beide Apps sind im Setapp-Bundle enthalten. Eine ausführliche Anleitung dazu findet sich hier.

DigitalOcean Spaces im Finder
DigitalOcean Spaces im Finder

Hier ein Beispiel-Upload via Dropshare.

3.3 Newsletter

Ghost ermöglicht (derzeit in der Betaversion) das Versenden von Newslettern. Das ist nicht ganz korrekt, denn versendet wird der Newsletter über Mailgun, dessen API sich wiederum in Ghost integrieren lässt.

Mailgun verfügt im Gegensatz zu Revue über ein „Pay As You Grow“-Bezahlmodell. Ich bezahle nur so viel, wie ich den Dienst nutze. Pro Tausend verschickten E-Mails kostet der Dienst dann 80 Cents. Das ist bei der Anzahl an Abonnent*innen, die ich aktuell habe, deutlich günstiger als Revue.

Nicht nur das – ich verfüge künftig auch über mein Archiv, denn das liegt auf meinem eigenen VPS und wird verwaltet durch Ghost.

Veröffentlichen direkt aus Ulysses heraus
Veröffentlichen direkt aus Ulysses heraus

Wie der Zufall (der es nicht war) so will, unterstützt Ghost außerdem Markdown. Ich kann meine Texte direkt aus Ulysses heraus als Entwurf zu Ghost hochladen. Damit spare ich mir den Umweg über ein Word-Dokument …

Das Opt-in-Widget

Opt-ins für den Newsletter finden sich auf der neuen Seite sowohl als Widget als auch auf einer eigenen Seite.

Alle bestehenden Abonnent*innen habe ich von Revue zu Ghost migriert. Im besten Fall haben sie davon nichts mitbekommen.

3.4 Membership und Stripe

Wie unter Punkt 1.2 beschrieben, war eines der größten Probleme mit Revue, dass nur Kreditkarten-Zahlungen möglich waren. Ghost integriert in seine Members-Beta eine Schnittstelle zum Zahlungsdienstleister Stripe. Über diese API sind auch Zahlungen mittels Google Pay und Apple Pay möglich (am Mobiltelefon!); EC-Karten kann ich weiterhin nicht direkt akzeptieren.

Wer allerdings unbedingt mit einer EC-Karte bezahlen möchte, kann dies über einen Umweg mit Google Pay oder Apple Pay tun. Beide erlauben die Zahlung mit EC-Karten (oder über PayPal).

Es gibt nicht nur eine Möglichkeit, meine Arbeit zu untersützen.
Es gibt nicht nur eine Möglichkeit, meine Arbeit zu untersützen.

Eine „normale“ Unterstützerschaft kostet nach wie vor zwei Euro pro Monat. Zudem gibt es neuerdings die Möglichkeit, „ausdauernd“ – für ein Jahr lang – zu unterstützen. Ausdauernde Unterstützer*innen zahlen statt 24 nur 20 Euro im Jahr.

Alle Unterstützer*innen erhalten eine monatliche Sonderausgabe von „Augenmerk“, in der ich besonders hintergründig ein Thema beleuchte; außerdem begrüße ich sie persönlich in einer E-Mail und verspreche, auf alle Rückfragen zeitnah zu antworten. Ausdauernde Unterstützer*innen erhalten am Ende des Jahres eine namentliche Danksagung.

Glücklicherweise kann ich in Ghost manuell Unterstützer*innen hinzufügen. Gerne schalte ich all meinen BuyMeACoffee-Spender*innen bis Ende des Jahres eine Unterstützerschaft frei (bitte eine kurze Mail an augenmerk@dominiklawetzky.de).

Hier geht es zur Übersicht.

3.5 Kleinigkeiten

Nun komme ich zu einigen Kleinigkeiten:

  • Für die auf der Wahlkampfseite eingebetteten Videos verwende ich Vimeo. Warum? Vimeo ist datensparsamer, lässt mich Videos austauschen und hat meines Erachtens den schöneren Player.
  • Eingebettete Audios laufen über Soundcloud – eine Lösung, mit der ich höchst unzufrieden bin. Wer eine bessere Idee hat, möge sich bei mir melden.
  • Diese Seite verwendet keine Tracker. Zwar steht in der Datenschutzerklärung noch etwas anderes, die muss jedoch noch angepasst werden.
  • Stripe setzt zwei Cookies, die sich nicht vermeiden lassen.
  • Als Cookie-Banner verwende ich ein Script von Osano. Es ist lange nicht perfekt, aber genügt fürs Erste. Das Script wird aus dem Header heraus geladen.
  • Um Backups kümmert sich DigitalOcean. Einmal die Woche wird das Server-Image in einer Storage Box gesichert. Vor riskanten Manövern kann ich manuell einen Snapshot erstellen.