WordPress reibungslos und schmerzfrei auf AWS betreiben

Dieser Artikel wurde aus dem Englischen übersetzt: WordPress on AWS: smooth and pain free.

Ich bin kein Fan von WordPress, da es weder von Grund auf cloudfähig ist noch serverless funktioniert. Deshalb läuft dieser Blog mit CloudFront und S3 und wurde von Hexo erstellt. Allerdings werden 25% aller Webseiten mit WordPress veröffentlicht. Dieser Artikel zeigt dir, wie man WordPress am einfachsten fehlertolerant und skalierbar mit AWS zum Laufen bringt.

Die folgende Darstellung zeigt die Strukur einer fehlertoleranten und skalierbaren WordPress-Umgebung mit AWS auf.

WordPress on AWS

Lese weiter um mehr zu erfahren!

Das Problem

WordPress ist eine PHP Applikation, die zwei verschiedene Speichersysteme verwendet: eine MySQL Datenbank und Dateien auf einer Festplatte. Dateien auf einer Festplatte zu speichern wird zum Problem, wenn man eine Vielzahl von EC2 Instanzen verwendet, um WordPress auf eine fehlertolerante und skalierbare Art und Weise zu betreiben.

Das folgende Beispiel sowie die folgende Darstellung sollen dieses Problem verdeutlichen.

  1. Mary lädt ein neues Bild für ihren Blog-Eintrag hoch. Die Bilddatei ist auf der EC2 Instanz Nummer 1 gespeichert.
  2. Mary lädt den Artikel zum Lesen vom Server. Die EC2 Instanz Nummer 1 antwortet auf ihre HTTP Anfrage um das Bild zu erhalten.
  3. Bob liest Marys Artikel. Die EC2 Instanz Nummer 2 antwortet auf seine HTTP Anfrage mit einer 404 Not Found Fehlermeldung, weil das Bild nur auf der EC2 Instanz Nummer 1 gespeichert wurde.

WordPress stateful server

Das ist ein Problem. Du musst einen Weg finden, um entweder die Dateien zwischen allen EC2 Instanzen zu synchronisieren, oder die Dateien an einen anderen Ort auszulagern.

Die Lösung, erster Versuch

Ich habe vor einiger Zeit bereits versucht, WordPress mit AWS zum Laufen zu bringen. WordPress on AWS: you are holding it wrong beschreibt die Lösung im Detail.

Um den Beitrag kurz zusammenzufassen:

  • Verwende ein WordPress-Plugin um Uploads von Benutzern wie zum Beispiel Bilder auf S3 anstatt auf eine Festplatte zu speichern
  • Blockiere alle anderen WordPress-Funktionalitäten, die Dateien auf die Festplatte schreiben: das Installieren oder Updaten von Plugins oder Themes, den automatischen Updater und das Schreiben einer .htaccess Datei.
  • Automatisiere den Installationsprozess von WordPress mit all seinen Plugins und Themes während des Boot-Vorgangs jeder EC2 Instanz.
  • Der große Nachteil dieser Lösung: man kann keine Plugins oder Themes installieren und den automatischen Updater nicht verwenden.

Die Lösung, zweiter Versuch

Der Elastic File System Service (EFS) ist der AWS Familie im Januar 2016 beigetreten. EFS bietet ein skalierbares Network File System, das du durch die Verwendung des NFS-Protokolls mit deinen EC2 Instanzen verbinden kannst. Der perfekte Platz um Dateien auszulagern.

Die folgende Abbildung zeigt, wie sich jede EC2 Instanz mit EFS verbindet um Dateien zu lesen und zu schreiben. Du musst nicht zwischen Benutzer-Uploads und Dateien unterscheiden, die zu WordPress selbst gehören.

WordPress with EFS

Da ein Netzwerkzugriff jedes Mal notwendig wird, wenn deine EC2 Instanz eine Datei von EFS lesen möchte, ist es wichtig, dass Dateien zwischengespeichert werden.

Besonders für .php Dateien ist dies wichtig, da WordPress für jede eingehende Anfrage auf viele .php Dateien zugreifen muss. Das ist etwas, das du mit opcache schnell lösen kannst.

Es ist aber auch wichtig statische Dateien zwischenzuspeichern. Weil jeder Besucher deines WordPress-Blogs die gleichen .css und .js Dateien laden muss, ist ein CDN wie CloudFront perfekt geeignet.

Die folgende Abbildung zeigt die komplette Struktur von WordPress mit AWS basierend auf diesen Diensten:

  • CloudFront: CDN für dynamischen und statischen Inhalt
  • ELB (Elastic Load Balancer): Lastverteiler, der Anfragen an EC2 Instanzen sendet und SSL terminiert
  • EC2 (Elastic Compute Cloud): Virtuelle Maschinen, auf denen Webserver laufen
  • EFS (Elastic File System): Speicher für WordPress Dateien (WordPress Core, Plugins, Themes und Benutzer-Uploads)
  • RDS (Relational Database Service): MySQL Datenbank

WordPress on AWS

Die Bereitstellung

Möchtest du WordPress mit AWS zum Laufen bringen indem du wie oben beschrieben EFS verwendest? Ich habe ein Template für CloudFormation erstellt, dass du kostenlos verwenden kannst. Das Template erzeugt innerhalb weniger Minuten eine Cloud-Infrastruktur mit den folgenden Eigenschaften:

  • zuverlässlig: Fehlertoleranz und Skalierbarkeit aufgrund der Verwendung von Multi-AZ
  • sicher: HTTPS wird erzwungen
  • schnell: CDN speichert statischen Inhalt zwischen
  • skalierbar: skalierbarer Datenspeicher für endlose Benutzer-Uploads

Lerne mehr über das Template für CloudFormation.

Read on


Teilen

           

RSS

  RSS

Newsletter


Andreas Wittig

Andreas Wittig

Ich bin Autor von Author of Amazon Web Services in Action. Ich arbeite als Software Engineer und unabhängiger Berater mit dem Fokus auf AWS und DevOps. Engagiere mich!

Fehlt etwas in meinem Artikel? Ich freue mich auf dein Feedback! @andreaswittig oder andreas@widdix.de.


Veröffentlicht am
Tags AWS, WordPress,