Neuer Technologie-Stack für die Website [Update]

Der große Umbau meiner Website ist abgeschlossen und ich habe schlussendlich den kompletten Technologie-Stack ausgetauscht. Damit bin ich dann PHP komplett losgeworden. Außerdem werden keine Daten (z.B. Kommentare) mehr auf externen Servern gespeichert.

Im Folgenden werde ich einmal kurz beschreiben was ich alles wie umgestellt habe. Das eine oder andere ist aber bestimmt auch noch einen eigenen How-To-Artikel wert.

Hugo für alle Texte

In meinem Blogbeitrag “Renaissance der statischen Websites” habe ich bereits etwas über den Website-Generator Hugo geschrieben. Nachdem ich bereits meine (alte) Website brisoft.de auf Hugo umgestellt habe, habe ich jetzt nach der Zusammenführung auch alle Texte, die sich bis jetzt noch in Koken befanden, umgestellt.

Durch eine Erweiterung in Hugo, die die Erzeugung eines Suchindex im JSON-Format ermöglicht, konnte ich die Suchfunktion auf eine JavaScript-Lösung (lunr.js) umstellen. Das funktioniert besser, als ich gedacht habe.

jAlbum statt Koken

Nach der Übernahme des CMS Koken durch NetObjects wurde meiner Meinung nach zu wenig in den Kern des Systems investiert und stattdessen die Entwicklung kostenpflichtiger Plugins und Themes forciert. Da ich zuletzt insbesondere mit der Performance absolut nicht mehr zufrieden war, war klar, dass auch hier eine statische Lösung her musste.

Zunächst wollte ich einen eigenen Generator im Zusammenspiel mit Hugo schreiben, aber dann fiel mir jAlbum ein, das ich mir vor einigen Jahren schon einmal angesehen hatte. Ich war positiv überrascht, wie sich das Werkzeug weiterentwickelt hat. Dazu gibt es auch mindesten ein Theme, das ich fast ohne Modifikation einsetzen konnte und das darüber hinaus auch responsive ist. jAlbum ist zwar nicht kostenlos, aber den Preis von 39 € ist es definitiv wert. Selbst die Übernahme meiner EXIF und IPTC-Daten (inkl. Geokoordinaten) funktionierte problemlos und so ist auch eine Suche möglich.

Isso statt Disqus

Über Isso bin ich eigentlich zufällig in einer Diskussion im Hugo-Forum gestolpert. Mir gefällt daran vor alle, dass damit alle Kommentare lokal auf meinem Server gespeichert werden. Das klappt zwar nur mit einer dynamischen Komponente (in Python geschrieben), ist aber leichtgewichtiger als Disqus.

Stíobhart Matulevicz hat übrigens eine hervorragende Anleitung für die Einbindung von Isso in eine mit Hugo generierte Website geschrieben.

Eigenes Go-Programm statt Piwik

Als Nächstes wollte ich dann noch Piwik loswerden, da es auch in PHP geschrieben ist. Google Analytics oder ähnliche externen Lösungen für die Auswertung der Seitenzugriffe kamen nicht in Frage. Da ich mich schon länger einmal mit dem Elastic Stack beschäftigen wollte, hatte ich zunächst eine Lösung implementiert, die die Logdaten mit Hilfe von Filebeat und Logstash konvertiert und filtert und sie dann in einer Elasticsearch-Datenbank speichert. Die Präsentation der Daten erfolgte dann in Kibana.

Nach einiger Zeit habe ich mich jedoch an dem hohen Resourcenverbrauch gestört und die Lösung war eigentlich auch ein ziemlicher “Overkill”.

Da ich mich aber gerade intensiver mit der Programmiersprache Go beschäftigt habe, habe ich die Gelegenheit genutzt und eine eigene Auswertung der Server Log-Files programmiert.

Caddy statt Nginx

Die Entscheidung für Ablösung von Nginx, mit dem ich eigentlich gute Erfahrung gemacht habe, fiel zuletzt. Im Zusammenhang mit Hugo bin ich auf den Webserver Caddy gestoßen, der ebenfalls in Go entwickelt wurde und als eine Besonderheit z.B. Markdown-Dateien automatisch nach HTML umwandeln kann.

Darüber hinaus hat er noch ein paar Features, die mir sehr gut gefielen:

  • es wird standardmäßig das HTTPS-Protokoll verwendet und alle Seiten werden automatisch darauf umgeleitet,
  • die benötigten Zertifikate werden aus Wunsch automatisch bei Let’s Encrypt abgerufen,
  • er enthält ein Mail-Plugin, mit dessen Hilfe ein Kontaktformular ohne zusätzliche Server-Software implementiert werden kann.

Die Konfiguration ist ebenfalls extrem simpel. Folgende Konfiguration reicht bereits für eine Website aus:

www.example.de {
	redir https://example.de{uri}
	tls webmaster@example.de
}

example.de {
	root /var/www/example.de
	tls webmaster@example.de
}

Aber auch hierzu werde ich noch einmal separat etwas schreiben.