Kirby 5 – Ein Erfahrungsbericht zur Einrichtung

Kirby ist ein datenbankfreies CMS, das alle Inhalte als einfache Textdateien im Dateisystem speichert. Version 5 bringt einige Verbesserungen gegenüber dem Vorgänger und ist produktionsreif. Dieser Artikel beschreibt den Weg von der Installation bis zum betriebsbereiten Blog.

Voraussetzungen und Installation

Kirby 5 setzt PHP 8.2 oder höher voraus. Auf dem Testserver lief PHP 8.4, was zunächst zu einem Konflikt mit der composer.json des Plainkits führte – dort war die PHP-Version noch auf <8.3.0 begrenzt. Nach einer kurzen Anpassung auf <8.5.0 ließ sich alles problemlos installieren.

Composer ist bei Kirby die bevorzugte Installationsmethode. Plugins, das CMS selbst und alle Abhängigkeiten werden sauber verwaltet und lassen sich mit einem einzigen Befehl aktualisieren. Da der Webserver unter www-data läuft, werden alle Composer-Befehle entsprechend ausgeführt:

sudo -u www-data composer require getkirby/cms

Theme ZOON

Als Theme kommt ZOON zum Einsatz – ein modernes, gut strukturiertes Theme speziell für Kirby 5. Es bringt ein sauberes Layout für Blog, Portfolio und statische Seiten mit und lässt sich über das Panel weitgehend ohne Code-Eingriffe konfigurieren.

Eine der ersten Anpassungen betraf die Sortierreihenfolge der Blogartikel. Kirby sortiert Seiten standardmäßig nach dem numerischen Präfix im Ordnernamen. Um Artikel nach Datum absteigend zu sortieren, war ein Eingriff in das entsprechende Template nötig – eine überschaubare Anpassung, die zeigt wie flexibel Kirby in diesem Bereich ist.

Kommentarfunktion mit Isso

Da Kirby von Haus aus keine Kommentarfunktion mitbringt, wurde Isso als selbst gehostete Lösung integriert. Isso ist ein schlanker Kommentarserver auf Python-Basis, der ohne externe Dienste auskommt und DSGVO-konform betrieben werden kann.

Die Integration in ZOON erfolgte über einen Snippet-Eintrag im entsprechenden Template. Isso läuft als eigenständiger Dienst und wird über nginx als Reverse Proxy erreichbar gemacht. Die Kommentare werden in einer SQLite-Datenbank gespeichert – dem einzigen Datenbankanteil in der sonst komplett dateibasierten Infrastruktur.

Rechtliche Pflichtseiten

Impressum und Datenschutzerklärung sind als eigene Kirby-Seiten angelegt und über die Navigation erreichbar. Kirby macht es einfach, solche Pflichtseiten sauber zu strukturieren und vom restlichen Blog-Content zu trennen. Die Datenschutzerklärung berücksichtigt den Einsatz von Isso sowie die verwendeten Schriften und externe Ressourcen.

Plugin: Retour für 404-Weiterleitungen

Das Plugin distantnative/retour-for-kirby wurde per Composer installiert und ist sofort im Panel verfügbar. Es erfasst alle 404-Fehler und ermöglicht es, Weiterleitungen bequem über das Panel zu verwalten – ohne Eingriffe in die nginx-Konfiguration. Besonders nützlich wenn URLs umstrukturiert werden und bestehende Links oder Google-Einträge nicht ins Leere laufen sollen.

Scroll-to-Top Button

Ein kleiner aber praktischer Komfort: Ein Button, der beim Scrollen erscheint und den Benutzer zurück an den Seitenanfang bringt. Die Implementierung erfolgte direkt im Theme über ein Custom-Snippet mit etwas JavaScript und CSS – kein Plugin nötig.

Git-Backup: Content und Code

Das Backup-Konzept basiert auf zwei separaten GitHub-Repositories:

Das Plugin thathoff/kirby-git-content versioniert den content/-Ordner automatisch bei jeder Änderung im Panel. Jeder gespeicherte Artikel, jede Bildänderung wird als Commit nach GitHub gepusht. Im Panel zeigt ein eigenes Widget den aktuellen Stand der Synchronisierung.

Ein zweites Repository sichert den Code-Teil der Installation – Templates, Plugins, Konfigurationsdateien. Da sich dieser Bereich selten ändert, übernimmt ein täglicher Cronjob den Push zu GitHub.

Da GitHub Deploy Keys nicht repo-übergreifend funktionieren, erhielt www-data zwei separate SSH-Keys mit einer entsprechenden .ssh/config zur Zuordnung. Der .git-Ordner im Webroot wird über nginx geblockt:

location ~ /\.git {
    deny all;
    return 404;
}

Plugin: Pexels Image Field

Für Blogartikel braucht man gelegentlich ein passendes Titelbild, ohne stundenlang auf Bilddatenbanken zu suchen. Das Plugin mauricerenck/pexelsimagefield löst das direkt im Panel: Ein eigenes Suchfeld erlaubt es, Pexels-Fotos zu suchen und mit einem Klick direkt auf die Seite herunterzuladen. Metadaten wie Fotograf und Quelle werden automatisch gespeichert.

Die Installation erfolgt per Composer:

sudo -u www-data composer require mauricerenck/pexelsimagefield

Anschließend wird ein kostenloser API-Key bei pexels.com beantragt und in der config.php eingetragen:

'mauricerenck.PexelsImageField.apiKey' => 'API-KEY',
'mauricerenck.PexelsImageField.images' => '10',
'mauricerenck.PexelsImageField.downloadSize' => 'original',

Das Feld selbst wird im Blueprint des Artikeltyps ergänzt – danach erscheint es im Panel als eigener Bereich unterhalb der übrigen Felder. Die heruntergeladenen Bilder landen direkt in den Dateien des jeweiligen Artikels und stehen sofort als Cover oder im Layout zur Verfügung.

Plugin: Simple Stats

Kirby bringt von Haus aus keine Besucherstatistik mit. Das Plugin zephir-7/kirby-simple-stats schließt diese Lücke ohne externe Dienste und ohne JavaScript-Tracking. Seitenaufrufe werden serverseitig erfasst und in einer SQLite-Datenbank gespeichert. Im Panel zeigt ein eigenes Dashboard-Widget die meistbesuchten Seiten und den Verlauf der Zugriffe.

Installation:

sudo -u www-data composer require zephir-7/kirby-simple-stats

Die Statistik ist nach der Installation sofort aktiv – keine weitere Konfiguration notwendig. Da keine Cookies gesetzt und keine Daten an Dritte übertragen werden, ist der Betrieb ohne Cookie-Banner möglich.

Plugin: Uniform

Für Kontaktformulare und andere Formulare kommt mzur/kirby-uniform zum Einsatz. Uniform ist das etablierteste Formular-Plugin für Kirby und bietet eine saubere, erweiterbare Architektur mit serverseitiger Verarbeitung. Spam-Schutz, E-Mail-Versand und eigene Aktionen lassen sich flexibel kombinieren.

Installation:

sudo -u www-data composer require mzur/kirby-uniform

Uniform wird in einem eigenen Template eingebunden und im zugehörigen Controller verarbeitet. Die Konfiguration eines Kontaktformulars mit E-Mail-Versand und Honeypot-Spamschutz ist in wenigen Schritten erledigt und wird in einem separaten Artikel beschrieben.

Hier der Ergänzungsabschnitt:


Newsletter mit Listmonk

Für einen Newsletter-Versand direkt aus Kirby heraus bietet sich Listmonk als selbst gehostete Lösung an. Listmonk ist ein schlanker, in Go geschriebener Newsletter-Server mit vollständigem Web-Backend, Abonnentenverwaltung, Kampagnen und Statistiken. Er läuft als Docker-Container und bringt PostgreSQL gleich mit.

Die Installation erfolgt über eine fertige docker-compose.yml:

curl -sSL https://raw.githubusercontent.com/knadh/listmonk/master/docker-compose.yml -o docker-compose.yml
docker compose up -d

Listmonk wird über nginx als Reverse Proxy erreichbar gemacht, das TLS-Zertifikat per DNS-Challenge über Cloudflare bezogen. Als SMTP-Provider wird Amazon SES eingetragen — Listmonk unterstützt das nativ über die SMTP-Einstellungen im Backend.

Die öffentliche Anmeldeseite ist unter /subscription/form sofort verfügbar. Listen lassen sich im Backend als öffentlich markieren und erscheinen dann automatisch auf der Anmeldeseite. Double-Opt-In ist konfigurierbar und kann abgeschaltet werden.

Kampagnen werden derzeit manuell erstellt und versendet. Eine automatische Ausspielung bei neuem Blogartikel über einen Kirby-Hook und die Listmonk-API ist geplant und wird in einem separaten Artikel beschrieben.

Fazit

Kirby 5 ist nach einer überschaubaren Einrichtungszeit ein solides, wartungsarmes System. Die dateibasierte Architektur macht Backups einfach, Updates unkritisch und den Betrieb transparent. Wer keine Community-Funktionen oder komplexe E-Commerce-Anforderungen hat, bekommt mit Kirby ein CMS das aus dem Weg bleibt und trotzdem alles mitbringt was ein moderner Blog braucht.

Share