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.
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.
- Mary lädt ein neues Bild für ihren Blog-Eintrag hoch. Die Bilddatei ist auf der EC2 Instanz Nummer 1 gespeichert.
- Mary lädt den Artikel zum Lesen vom Server. Die EC2 Instanz Nummer 1 antwortet auf ihre HTTP Anfrage um das Bild zu erhalten.
- 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.
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.
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
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.