Die Website ist tot, hoch lebe die Website! Die alte Website basierend auf Wordpress ist eines unnatürlichen Todes gestorben, und die Trauer ist durchaus überschaubar. Die neue Website verwendet den statischen Website-Generator Jekyll. Die Gründe hierfür sind mannigfaltig:

  • Sicherheit. Dynamische Seiten bieten zwei wesentliche Angriffsflächen auf Serverseite: Der Interpreter (z.B. PHP) und die Programmlogik der Website selbst. Umfangreiche Blogging-Software wie Wordpress besitzt eine hohe Komplexität und bieten darüber hinaus noch einen Dschungel von Plugins, die in großer Regelmäßigkeit Sicherheitsupdates erforderlich machen. Bei statischen Seiten reduziert sich die Angriffsfläche auf den Webserver selbst.

  • Effizienz. Statische Seiten können vom Webserver schnell bereitgestellt werden. Zum einem fällt die zusätzliche Schicht des Interpreters weg, zum anderen landet statischer Inhalt effektiv im Cache. Das reduziert nicht nur die Ausführungsgeschwindigkeit am Server, sondern reduziert auch die Netzwerklast.

  • Einfachheit. Ein Großteil des Inhalts wird in Markdown geschrieben. Die Syntax von Markdown ist trivial, aber mächtig genug für die Alltagsarbeit an Blog-Artikel. Andererseits kann ggf. auch HTML einfach miteingebettet werden. Die Seiten werden dann mit der Templating Engine Liquid zusammengebaut. Der Code für diese Seite beginnt etwa so:

    ---
    layout: post
    category: blog
    title: 'Die neue Website'
    author: Stefan Huber
    date: 2014-11-17 18:00
    ---
     
    [Die Website ist tot, hoch lebe die
    Website!](http://de.wikipedia.org/wiki/Le_roi_est_mort,_vive_le_roi) Die alte
    Website basierend auf Wordpress ist eines unnatürlichen Todes gestorben, und
    

    Die Einfachheit zeigt sich aber auch dadurch, dass wir am Server für die Website prinzipiell keine Datenbank und keinen Interpreter benötigen. Im Grunde reicht ein trivialer Webserver, etwa der eingebaute Webserver von Jekyll basierend auf Webrick, welcher für Autoren eine lokale Vorschau der Website anbietet.

  • Versionskontrolle. Da die neue Seite aus einfachem Code generiert wird, ist der Quellcode der Website unkompliziert versionierbar. Wir verwenden hierfür git, wodurch sich als Nebeneffekt die Frage um ein Backup praktisch erübrigt hat, da jeder Autor eine vollständige Kopie vom Repository besitzt.

Architektur

Mit einem statischen Website Generator ist es zunächst nicht unmittelbar klar, wie kollaborativ am Inhalt gearbeitet werden kann oder soll. Wir gehen einen Weg über git repositories und passende hook scripts am Server, die nach jeder Aktualisierung die Website neu bauen. Die Authoring & Deployment Architektur lässt sich im wesentlichen durch das folgende Bild zusammenfassen.

Architektur

Autor. Jeder Autor besitzt eine lokale Kopie des git repositories der Website. Mit jekyll serve startet man einen lokalen Webserver, der es einem erlaubt seine Änderungen im Text-Editor umgehend am Browser zu begutachten. Hat man eine Änderung durchgeführt, oder einen Artikel verfasst, so erstellt man im git einen commit und lädt diesen letztendlich per git push auf den Server.

Server. Die Zugriffsberechtigungen werden mit gitolite verwaltet. Ein post-receive hook script baut die aktuelle Version per jekyll build abwechselnd in ein eine von zwei deploy Verzeichnisse und verweist den Webserver nginx auf die aktuelle Version der Website. Zusätzlich gibt es ein update hook script, das überprüft, dass große Dateien (Videos, Audio, etc.) nicht in das git repository eingefügt werden, sondern in ein dafür vorgesehenes getrenntes Verzeichnis direkt kopiert werden.

Fazit

Derzeit läuft die Website noch im Testbetrieb. Weiters müssen alle betroffenen Autoren in das neue System eingeschult werden, mitunter in git und jekyll. Danach geht es an die Migration aller bzw. zumindest ausgewählter Inhalte von der alten Website. Das eine Website nie fertig sein kann, das versteht sich ohnehin von selbst.

Fragen oder Kommentare zu diesem Artikel? Dann schreibe uns doch auf der Mailing Liste oder im IRC chat channel!