Schon seit Anfang des Jahres, also gefühlt seit einer Ewigkeit, läuft der Server mit einer neuen Konfiguration1. Während früher ein “klassischer” Nginx+FPM Stack zusammen mit einer MariaDB werkelte, ist das neue Gespann natürlich etwas “cloudiger” unterwegs.

Cloudiger? Naja, natürlich läuft alles weiterhin “lokal” in der VM (in der Cloud). Aber softwaremäßig nutze ich jetzt eher dem Cloud-Umfeld vertrauten Lösungen Traefik und Docker, um die einzelnen Umgebungen sauberer trennen zu können. Derzeit laufen drei “Seiten” plus temporäre Seitenprojekte, und mir ist da in der Vergangenheit schon mal PHP von Umgebung A kaputt gegangen, als ich es für Umgebung B aktualisieren wollte.

Traefik baut (falls gewünscht) direkt auf Docker auf und fungiert als, wartet, ja, jetzt: Cloud Native Edge Router! Oder um es anders auszudrücken: Traefik intercepted alle HTTP/HTTPS Anfragen und routet diese auf andere Container um. Wenn man möchte, kann man die komplette Konfiguration live ohne Restarts und über Docker-Labels gestalten. Das hat also die Konsequenz, dass Änderungen an Seiten-Umgebungen (beispielsweise ein neuer Nginx, ein neues PHP-Backend via FPM oder sogar ein Datenbank-Update) im laufenden Betrieb geschehen kann. Mittels docker-compose2 werden die notwendigen Änderungen dann automatisiert übertragen.

Natürlich kann man auch einen oder sogar mehrere Nginx-Varianten auf einem System fahren. Und es ist auch nicht unmöglich, verschiedene PHP-Versionen parallel ans laufen zu bringen. Das muss aber am Ende des Tages auch einfach zu warten sein. Mit Container ist das wesentlich eleganter und am Ende auch aufgeräumter.

Ein weiterer Bonus ist, dass Traefik sich auch selbstständig um die SSL-Zertifikate via Let’s Encrypt kümmert. Es ist also weder ein certbot noch ein Cronjob notwendig, geschweige denn der Domain-Registrierung. Kein abgelaufendes Zertifikat mehr, weil ein Nginx-Reload nicht funktioniert hat.

Und schlussendlich erlaubt das Docker-Setup, dass ich die Umgebung auch lokal komplett nachstellen kann. Auch weil man jetzt unabhängig vom Host-Betriebssystem ist.


  1. Streng genommen habe ich mir gleichzeitig auch ein neues Droplet geklickt, aber lassen wir mal unnötige technische Details aussen vor. Gut, wer das hier liest, der weiß es dann doch. 🤷‍♂️ ↩︎

  2. docker-compose up -d --remove-orphans ↩︎