Staatenlose Web-Apps sind schwierig.
Wie Sie wissen, hängt WordPress ziemlich stark davon ab, dass Dinge auf die Festplatte geschrieben werden. Hier ist die vorgeschlagene Infrastruktur
- Elastic Load Balancer
- Autoscaling-Gruppe bestehend aus kleinen ec2-Instanzen
- Foreman / Dev micro ec2 Instanz
- Micro / Small RDS für CMS-Daten
- Elasticache-Cluster für die Sitzungsspeicherung
- S3-Bucket für Medien-Uploads
Nun der schwierige Teil.
Vergessen wir für eine Sekunde die Aktualisierungen der Codebasis und schauen wir uns an, wie man das Ganze zustandslos macht. Sie sollten Folgendes tun, um dieses Objekt horizontal skalierbar zu machen:
- Beginnen Sie mit Ihrer Mikroinstanz. Es fungiert sowohl als Bereitstellungsmechanismus als auch als Vorlage
- Stellen Sie PHP-Sitzungen so ein, dass memcached für die Sitzungsverwaltung verwendet wird, und verweisen Sie es auf Ihren Elasticache-Cluster. Http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
- Installieren Sie git auf der Mikroinstanz
- Installieren Sie eine Art WordPress-Plugin, um alle Datei-Uploads in S3 zu speichern (optional, erspart Ihnen jedoch die erneute Bereitstellung bei jedem Hochladen einer Medien-Datei auf das CMS). Probieren Sie das W3 Total Cache-Plugin aus
Dies kümmert sich um das Setup
So stellen Sie neue Änderungen bereit
Sie werden Ihre Mikroinstanz für alle zukünftigen Änderungen an der WordPress-Installation verwenden. Dazu gehören Dinge wie das Aktualisieren von WordPress, das Aktualisieren Ihrer Themendateien und so ziemlich alles, was auf der Festplatte gespeichert ist.
Sie müssen zwei Skripte erstellen:
Die erste wird verwendet, um die Änderungen in der Autoscaling-Gruppe bereitzustellen. Es sollte Folgendes tun:
- Übernehmen Sie die an seinem Git-Repo vorgenommenen Änderungen
- Pingen Sie alle Produktionsinstanzen an und weisen Sie sie an, die neue Codebasis von der Mikroinstanz herunterzuladen. Sie müssen eine Form von AWS sdk verwenden, um die Liste der Instanzen in der Gruppe mit automatischer Skalierung abzurufen und deren Empfangsskripte auszulösen. Ich persönlich mache das mit meinem über einen HTTP-Endpunkt, den ich erstellt habe.
Das zweite Skript wird auf den Instanzen der automatisch skalierenden Gruppe ausgeführt und vom ersten Skript ausgelöst sowie ausgeführt, wenn die Instanz zum ersten Mal initialisiert wird. Es sollte Folgendes tun:
- Stellen Sie eine Verbindung zum Git-Repository auf der Mikroinstanz her
- Rufen Sie die neuesten Änderungen ab und überprüfen Sie die Änderungen in einem getrennten HEAD-Status
Jedes Mal, wenn Sie Änderungen an der Systemdatei vornehmen, sollten Sie das oben beschriebene Bereitstellungsskript ausführen. Dadurch werden die Änderungen an alle Produktionsinstanzen weitergegeben.
Erstellen Sie nun eine Basis-AMI für die Produktionsinstanzen. Es sollte der Mikroinstanz sehr, sehr ähnlich sein, WordPress sollte jedoch nicht installiert werden. Sie verwenden Benutzerdaten, die beim Start an die ec2-Instanzen übergeben werden, um das zweite Skript oben auszuführen und die neueste Version der Codebasis von der Mikroinstanz herunterzuladen.
Eine letzte Sache ... Wenn Sie irgendeine Form von E-Commerce ausführen, benötigen Sie ein SSL-Zertifikat, das auf dem Load Balancer installiert ist. Schauen Sie sich den Leitfaden hier an: http://www.nczonline.net/blog/2012/08/15/setting-up-ssl-on-an-amazon-elastic-load-balancer/