Für den neuen Everlanes Webauftritt habe ich mich für Nikola, einem CMS für statische HTML Webseiten, entschieden. Warum habe ich mich dafür entschieden? Welche Vorteile erhoffe ich mir von statischen HTML Seiten?

Ein kleiner Rückblick

Bisher habe ich für Webseiten gerne python-basierte CMS Systeme verwendet. Zope und Plone waren um die Jahrtausendwende die ersten solchen Systeme. Auch Joomla! habe ich schon verwendet und in letzter Zeit sehr gerne django CMS. Letzteres vor allem wegen seines exzellenten Front-Page-Editing.

Das Problem

Für diese Webseite habe ich die Situation nochmals erneut evaluiert. Vor allem die Notwendigkeit einer Datenbank (sqlite für die Entwicklung, MySQL, MariaDB oder PostgreSQL für den produktiven Einsatz) hat mich immer mehr gestört. Eigentlich wollte ich doch nur eine einfache, ziemlich statische Webseite, welche idealerweise in einem GIT-Repository versioniert ist.

Bei den dynamischen Systemen können zwar die Webseit-Umgebung, die verwendeten Apps, sowie die Templates im GIT verwaltet werden. Der eigentliche Inhalt und zum gewissen Grad auch das Erscheinungsbild der Webseite, liegen jedoch in der Datenbank. Dies macht das Backup aufwändig und ein Spiegeln der Webseite fast unmöglich.

Ja, ein Datenbank Export ist möglich. Ein erfolgreicher Import an anderer Stelle will jedoch oft geübt und verifiziert werden. Eine 1:1 Replikation ist damit kaum möglich.

Der Plan

So habe ich über meine aktuelle Situation nachgedacht: welchen Vorteil bietet mir ein dynamisches System eigentlich? Die Webseite wird nur von wenigen Personen, meist sogar nur von mir, mit Inhalten gefüllt. Ein Kommentarsystem und ein Gästebuch habe ich nicht. Warum sollte ich mir den Aufwand mit den Datenbanken überhaupt antun?

Wäre es nicht schön, sowohl den Inhalt, als auch das Aussehen einer Webseite alles in GIT zu versionieren? In einfachen Textdateien, welche ich mit meinem bevorzugten Editor lesen, anpassen und ändern kann? Auf GitHub werden doch auch Markdown Dateien zu einfachen Webseiten konvertiert und angezeigt! Gibt es sowas nicht vielleicht schon?

Recherche

Eine kurze Recherche förderte nicht nur ein, auch nicht zwei, sondern ein gutes Dutzend solcher Framwworks zu tage. Die zentralen Stichworte sind:

static CMS/HTML
CMS System mit statischen HTML Seiten
flat file (database)
eine Datenbank mit einfachen Textdateien

Und in meinem Fall noch: Python.

Solch ein System verwendet zum Beispiel Markdown Textdateien für die Seiteninhalte und YAML Dateien für Metadaten. Diese Dateien können dann in GIT versioniert und mit Hilfe des Frameworks in statische HTML Seiten übersetzten werden.

Statisch meint dabei nicht, dass die HTML Seiten nur langweilig nach 90er Jahre aussehen (wobei damals viele Seiten heftig geblinkt haben). Es heißt einfach, dass sie vorab kompiliert und von einem einfachen HTTP Webserver wie Nginx, Apache oder lighttpd ausgeliefert werden können. Beim Abruf der Webseite wird somit kein Skript aufgerufen, welches die Seite dynamisch aufbaut.

Die Seiten können dennoch animierte Elemente und moderne Layouts basierend auf Javascript und CSS Frameworks enthalten. Dem Design sind somit keine Grenzen gesetzt.

statische CMS Systeme

Wozu wird dann noch das CMS System verwendet? Kann man, anstelle von Markup Dateien in der jeweils bevorzugten Ausprägung nicht gleich HTML Seiten erstellen?

Zum einen ist das manuelle Erstellen von HTML mühsam und aller höchstens als Strafe geeignet. Zum anderen will man ja auch eine Menüstruktur, Übersichtseiten für Blogartikel und ein einheitliches Styling.

All dies macht das CMS System für einen. Er konvertiert die jeweiligen Markup Dateien nach HTML, wendet ein Template an, erzeugt die Menüeinträge, hält diese auch aktuell, erzeugt Übersicht und Indexseiten, sowie Archive und vieles mehr.

Nikola

Ich habe mich bei dieser Webseite für Nikola entschieden. Dabei ist mir die Wahl nicht leicht gefallen. Letzten Endes konnte ich damit alles erreichen, was ich wollte und hatte ein gutes Bauchgefühl, dass ich den Python Quellcode verstehen könnte. Dies ist für mich wichtig, da dieser als die ultimative Antwort auf alle Fragen gelten kann.

Das Übertragen bestehender Templates von django CMS nach Nikola war insofern recht einfach, da beide Jinja als Template-Engine verwenden. Auch die Javascript und CSS Dateien können ohne Probleme mit nur minimalen Änderungen weiter verwendet werden. SASS Dateien werden von Nikola auch automatisch nach CSS konvertiert, so dass auch das Entwicklen der Webseite eine wahre Freude ist.

Zusammenfassung

Aktuell bin ich sehr glücklich damit, dass ich mich für ein statisches CMS System entschieden habe. Ich glaube, dass dies eine gute Entscheidung war, welche viele meiner bisherigen Schmerzpunkte mit den dynamischen Web-Frameworks behebt. Ob sich meine Hoffnungen auch auf lange Sicht erfüllen, wird sich zeigen. Vielleicht gibt es ja mal ein Follow-Up zu diesem Blogpost.