WordPress als statische Seite in S3 und CloudFront

WordPress hat sich zu dem am meisten verwendeten Content Management System entwickelt, gleichzeitig wahrscheinlich auch zum einfachsten. Nichts desto trotz verlangt es viel Sorgfalt und anfängliche Mühe um es performant und auf lange Sicht sicher zu betreiben. Statische Seiten bieten hier das Gegenteil, große Sicherheit und bestmögliche Performance, dafür weniger Komfort. In diesem Post zeige ich eine Möglichkeit, wie man diese beiden Welten miteinander verbindet um das Beste aus beiden Welten zu kombinieren.

Das große Ziel und Hürden auf dem Weg

Am Ende sollen weiterhin der Komfort von WordPress vorhanden sein, die statische Seite soll sich (semi-)automatisch aktualisieren und die statische Seite soll schnell durch ein CDN ausgeliefert werden.

Bei einer statischen Seite lassen sich keine dynamischen Inhalte wie z.B. Suche und Kommentare nutzen. Zumindest für die Kommentare gibt es mit Disqus eine sehr gute Alternative. Da die Administrationsoberfläche auch zu den dynamischen Inhalten zählt, muss diese ausgelagert werden. Diese beiden Hürden müssen umgangen werden.

Das Setup

Zu Beginn hatte ich eine ganz normale WordPress Installation auf einer Subdomain, also z.B. wordpress.beispiel.de wenn die Webseite später unter beispiel.de erreichbar sein soll.

Um die angezeigte Seite möglichst undynamisch zu halten, sollten das Suchwidget entfernt werden. Die Kommentare können deaktiviert, oder z.B. über das sehr gute DCL Plugin mit Disqus ersetzt werden.

Um die Seite zu einer statischen Seite umzuwandeln, habe ich das Plugin Simply Static genutzt. Es nimmt einem bereits einen großteil der Schritte ab. Konfiguert werden sollte es so, dass die Hauptdomain, also beispiel.de oder www.beispiel.de auf einen von WordPress beschreibbaren Pfad zeigt. Dieser Pfad zusammen mit der gewünschten Domain sollte dann in Simply Static konfiguriert werden.

Falls spezielle Dateien von Plugins erstellt werden, die nicht direkt verlinkt sind, sollten diese im Fortgeschrittenen Feld eingetragen werden.

Alternativ kann auch S3 verwendet werden. In dem Fall muss der entstehende Ordner einfach in S3 hochgeladen werden, und das Webhosting Feature in dem entsprechenden S3 Bucket aktiviert werden. Gerade dieser Schritt lässt sich automatisieren, in meinem Fall z.B. durch Jenkins oder einen Cronjob, der den von Simply Static erstellten Ordner mit S3 synchronisiert. Optimal wäre es, wenn der Prozess automatisch nach dem generieren von Simply Static ausgelöst wird, dafür fehlt allerdings eine entsprechende „Action“ aus Simply Static heraus, um den Vorgang anzustoßen.

Falls Jenkins oder ein Cronjob genutzt wird, kann im Falle das Änderungen erkannt wurden auch direkt ein genutztes CDN invalidiert werden.

Der Schreibprozess

Mit dem vorher vorgestellten Setup lässt sich WordPress ganz normal unter wordpress.beispiel.de nutzen. So können dort neue Beiträge erstellt, Medien hochgeladen oder sogar Plugins installiert werden.

Nachdem Inhalte geändert wurden, muss nur Simply Static einmal gestartet werden und Jenkins oder der Cronjob durchlaufen.

Die erreichten Vorteile

Die von Nutzern aufgerufene Seite besteht komplett aus statischen HTML Dateien, die ein Webserver extrem schnell ausliefern kann. Schneller packt es kein Caching Plugin. Durch den statischen Aufbau lässt sich die Seite außerdem komplett aus S3 und über ein CDN ausliefern.

Das Setup bietet die Möglichkeit, die dynamische WordPress Installation unter wordpress.beispiel.de komplett abzuschotten. So kann z.B. noch ein zusätzliches HTTP Basic Auth vor WordPress genutzt werden, so dass es automatische Angreifer abhält. Lediglich der Zugriff durch „localhost“ muss ohne Authentifizierung erlaubt sein, damit Simply Static laufen kann.

Vergleich mit einem Static Site Generator

Auch ein Static Site Generator, wie z.B. Jekyll oder Hugo, erlaubt das Hosten einer Webseite in S3, bzw. die einfache Auslieferung dieser über ein CDN. Das Setup eines solchen ist nicht gerade einfach. Ich würde es mit dem Aufwand WordPress statisch zu bekommen gleichsetzen.

Den großen Nachteil eines Static Site Generators sehe ich in der Erstellung der Inhalte. Hier müssen gerade die Bilder komplett selbst organisiert, skaliert und komprimiert werden. Diese Arbeit nimmt einem WordPress komplett ab. Auch das erstellen mit von neuen Inhalten mir WordPress schätze ich einfacher ein.

Der Vorteil liegt im eigentlichen Betrieb. Die hier vorgestellte Lösung erfordert weiterhin eine aktive WordPress Installation. Diese kann allerdings, ähnlich wie bei einem Static Site Generator die Seitenerstellung, auf dem heimischen PC sein, oder etwas komfortabler auf einem normalen Webspace, so dass sich auch von anderen Rechnern aus neue Inhalte erstellen lassen.

Fazit

Ich bin aktuell sehr zufrieden mit meiner gefundenen Lösung. Einmal installiert läuft sie gut und das erstellen von Inhalten ist super einfach. Dabei ist die Seite schnell wie nur wenige andere.