Bereitstellen einer PHP-Webanwendung für mehrere EC2-Instanzen hinter einem Elastic Load Balancer

9

meine Frage ist im Grunde zwei Fragen, aber da sie eng verwandt sind, dachte ich, dass es Sinn macht, sie en-bloque zu fragen.

Fall:
Ich führe eine Webapplikation aus, die über mehrere AWS EC2-Instanzen hinter einem AWS Elastic Load Balancer verteilt ist

Geplante Ziele:
a) Bei der Bereitstellung von neuem App-Code (php) sollte dieser automatisch an alle EC2-Instanzen verteilt werden.
b) Wenn neue EC2-Instanzen hinzugefügt werden, sollten sie automatisch mit dem neuesten Appcode "bootstrappen"

Meine Gedanken soweit:
ad a)
phing (http://phing.info) ist wahrscheinlich die Antwort für diesen Teil. Ich würde wahrscheinlich mehrere Ziele für jede EC2-Instanz hinzufügen und bei der Ausführung einer Bereitstellung würde sie auf allen Computern bereitgestellt werden. wahrscheinlich leider nicht parallel. aber das könnte sogar nützlich sein, wenn man es so scriptet, dass die EC2-Instanz im Load-Balancer "pausiert" wird, aufgerüstet, wieder "pausiert" und weiter zur nächsten Instanz.

ad b)
nicht sicher, wie ich das erreichen würde. In einem herkömmlichen "Hardware-basierten Setup" hatte ich wahrscheinlich einen "App-Code" -Laufwerk auf einem Netzwerkspeichergerät und wenn ich einen neuen Server hinzufüge, würde ich einfach dieses Volume anhängen. Bei der Bereitstellung eines neuen Appcodes hatte ich nur eine Bereitstellungsoperation für dieses Volume. Also brauche ich einen "zentralen Speicher", von dem der neu bootstrappte Rechner / Instanz seinen Appcode herunterlädt. ich dachte über git nach, aber git ist doch kein deploy-tool und sollte wahrscheinlich nicht dazu gezwungen werden, als einer verwendet zu werden.

Ich würde mich freuen, Ihre Setups für solche Aufgaben zu sehen und Ihre Hinweise und Ideen für eine solche Situation zu hören.

Danke,

Joshua

    
Joshua 15.02.2011, 12:21
quelle

4 Antworten

3

Dies könnte mit Phing gemacht werden. Ich bin mir jedoch nicht sicher, warum neue Instanzen den Appcode automatisch abrufen sollen. Bekommst du oft eine zusätzliche Instanz? Und damit a) Code in mehreren Instanzen bereitstellen kann, müsste er sie trotzdem kennen?

Diese Konfiguration erfordert einen Master-Bereitstellungsserver und eine Push-Strategie. Der Master-Server benötigt phing, alle benötigten phing-Pakete und optional ssh-Schlüssel für die EC2-Instanzen.

Vorschlag für a)

(Dies ist nur eine allgemeine Übersicht über die erforderlichen phing-Aufgaben)

  • Abrufen der Instanzliste (entweder Konfigurationsdatei oder Parameter)
  • Exportieren Sie den Appcode vom Repository zum Master-Server (z. B. SubVersion)
  • Tar-Appcode
  • scp tarball an alle EC2-Instanzen (an einen Bereitstellungsordner)
  • Mit rsh entpacke Tarball auf EC2-Instanzen
  • Mit rsh update symbolischer Link auf EC2-Instanzen, so dass der Webserverordner auf den neuen Bereitstellungsordner
  • zeigt
  • Löschen Sie alle Caches auf dem Webserver

Das oben genannte könnte aufgerufen werden, nachdem Sie eine neue Version erstellt haben.

Vorschlag für b) Dies kann erreicht werden, indem das Phing-Skript alle paar Stunden ausgeführt wird, es sich bei den EC2-Instanzen anmeldet und nach dem Appcode sucht. Wenn es es nicht findet, wird es die neueste endgültige Version bereitstellen. Dies setzt natürlich voraus, dass die EC2-Instanzen korrekt in Bezug auf Webserver, Konfigurationsdateien usw. eingerichtet werden. (Dies kann jedoch auch per Remote-Shell über Phing erreicht werden.)

Ich habe vorher ähnliche Setups verwendet, aber nicht mit Services wie EC2 versucht.

    
Kåre Werner Storgaard 16.02.2011 12:58
quelle
0
___ answer5016697 ___

Dies könnte mit Phing gemacht werden. Ich bin mir jedoch nicht sicher, warum neue Instanzen den Appcode automatisch abrufen sollen. Bekommst du oft eine zusätzliche Instanz? Und damit %code% Code in mehreren Instanzen bereitstellen kann, müsste er sie trotzdem kennen?

Diese Konfiguration erfordert einen Master-Bereitstellungsserver und eine Push-Strategie. Der Master-Server benötigt phing, alle benötigten phing-Pakete und optional ssh-Schlüssel für die EC2-Instanzen.

Vorschlag für a)

(Dies ist nur eine allgemeine Übersicht über die erforderlichen phing-Aufgaben)

  • Abrufen der Instanzliste (entweder Konfigurationsdatei oder Parameter)
  • Exportieren Sie den Appcode vom Repository zum Master-Server (z. B. SubVersion)
  • Tar-Appcode
  • %code% tarball an alle EC2-Instanzen (an einen Bereitstellungsordner)
  • Mit %code% entpacke Tarball auf EC2-Instanzen
  • Mit %code% update symbolischer Link auf EC2-Instanzen, so dass der Webserverordner auf den neuen Bereitstellungsordner
  • zeigt
  • Löschen Sie alle Caches auf dem Webserver

Das oben genannte könnte aufgerufen werden, nachdem Sie eine neue Version erstellt haben.

Vorschlag für b) Dies kann erreicht werden, indem das Phing-Skript alle paar Stunden ausgeführt wird, es sich bei den EC2-Instanzen anmeldet und nach dem Appcode sucht. Wenn es es nicht findet, wird es die neueste endgültige Version bereitstellen. Dies setzt natürlich voraus, dass die EC2-Instanzen korrekt in Bezug auf Webserver, Konfigurationsdateien usw. eingerichtet werden. (Dies kann jedoch auch per Remote-Shell über Phing erreicht werden.)

Ich habe vorher ähnliche Setups verwendet, aber nicht mit Services wie EC2 versucht.

    
___ qstnhdr ___ Bereitstellen einer PHP-Webanwendung für mehrere EC2-Instanzen hinter einem Elastic Load Balancer ___ answer12853461 ___

Phing ist ein großartiges Tool für die Verwaltung Ihrer Deployment-Aufgaben, das die meisten von (a) abdeckt.

Wir verwenden OpsCode Chef für das Infrastrukturmanagement. Es verfügt über ein deploy_revision-Target, das sowohl SVN- als auch Git-Repos für die Bereitstellung von Anwendungscode unterstützt, und Messer (das wichtigste Befehlszeilentool von Chef) verfügt über ein EC2-Plug-In, mit dem Sie mit einem Befehl ein neues EC2 hochfahren können Instanz mit den Rollen und Umgebungen, die Sie in Chef definiert haben, und stellen Sie Ihren Anwendungscode bereit.

Um dies mit mehreren EC2-Instanzen hinter einem ELB zu verwalten, haben wir die Python-Bibliothek boto verwendet, um sehr einfach zu schreiben Skripts, die eine Verbindung mit dem ELB herstellen, eine Liste aller mit diesem ELB verknüpften Instanzen abrufen und nacheinander eine Instanz aus dem ELB entfernen, führt das Chef-Update für diese Instanz aus (wodurch der neue Anwendungscode und alle Konfigurationsänderungen der Maschine implementiert werden) , verbindet die Instanz erneut mit dem ELB und geht zur nächsten Instanz über.

    
___ tag123deployment ___ Eine Reihe von Aktivitäten, die ein Programm für die Verwendung verfügbar machen (normalerweise in Test- oder Produktionsumgebungen) ___ tag123amazonec2 ___ Amazon EC2 steht für "Amazon Elastic Compute Cloud". Es ist Teil von Amazon Web Services (AWS) und ermöglicht Benutzern das Anmieten von VM-Instanzen. Sie können Instanzen erstellen, starten und über eine zentrale Schnittstelle, über eine Web-API oder über eine Konsole verwalten. ___ answer11173396 ___

Ich glaube, dass Phing ein gutes Werkzeug dafür ist. Capistrano könnte auch helfen.

Ich stelle meine Anwendung in einer sehr ähnlichen Umgebung bereit. Bis jetzt habe ich einfache Bash Scrpts verwendet, aber ich werde wahrscheinlich auf eine phingbasierte Lösung zugehen, hauptsächlich wegen der Schwierigkeit bei der Entwicklung von Shell Scripts (Sie müssen eine neue Syntax kennen, die nicht sehr flexibel ist, nicht zu plattformübergreifend erwähnen) und die Verfügbarkeit der Parallelverarbeitung, die in phing vorhanden ist.

    
___ tag123loadbalancing ___ Der Begriff Lastenausgleich wird verwendet, um eine Technologie zu beschreiben, mit der die Arbeit gleichmäßig auf mehrere Knoten innerhalb eines Netzwerks verteilt wird. ___ antwort5005341 ___

a) Werfen Sie einen Blick auf Capistrano und da Sie Ruby (und RoR) nicht verwenden, verwenden Sie railsless-deploy Plugin. Capistrano kann auf mehreren Servern bereitgestellt werden.

b) Hab noch keine Erfahrung damit gemacht, aber ich wäre nicht überrascht, wenn es nicht ein Plugin / Juwel für Capistrano gibt, das das für dich tun kann.

    
___ qstntxt ___

meine Frage ist im Grunde zwei Fragen, aber da sie eng verwandt sind, dachte ich, dass es Sinn macht, sie en-bloque zu fragen.

Fall:
Ich führe eine Webapplikation aus, die über mehrere AWS EC2-Instanzen hinter einem AWS Elastic Load Balancer verteilt ist

Geplante Ziele:
a) Bei der Bereitstellung von neuem App-Code (php) sollte dieser automatisch an alle EC2-Instanzen verteilt werden.
b) Wenn neue EC2-Instanzen hinzugefügt werden, sollten sie automatisch mit dem neuesten Appcode "bootstrappen"

Meine Gedanken soweit:
ad a)
phing (http://phing.info) ist wahrscheinlich die Antwort für diesen Teil. Ich würde wahrscheinlich mehrere Ziele für jede EC2-Instanz hinzufügen und bei der Ausführung einer Bereitstellung würde sie auf allen Computern bereitgestellt werden. wahrscheinlich leider nicht parallel. aber das könnte sogar nützlich sein, wenn man es so scriptet, dass die EC2-Instanz im Load-Balancer "pausiert" wird, aufgerüstet, wieder "pausiert" und weiter zur nächsten Instanz.

ad b)
nicht sicher, wie ich das erreichen würde. In einem herkömmlichen "Hardware-basierten Setup" hatte ich wahrscheinlich einen "App-Code" -Laufwerk auf einem Netzwerkspeichergerät und wenn ich einen neuen Server hinzufüge, würde ich einfach dieses Volume anhängen. Bei der Bereitstellung eines neuen Appcodes hatte ich nur eine Bereitstellungsoperation für dieses Volume. Also brauche ich einen "zentralen Speicher", von dem der neu bootstrappte Rechner / Instanz seinen Appcode herunterlädt. ich dachte über git nach, aber git ist doch kein deploy-tool und sollte wahrscheinlich nicht dazu gezwungen werden, als einer verwendet zu werden.

Ich würde mich freuen, Ihre Setups für solche Aufgaben zu sehen und Ihre Hinweise und Ideen für eine solche Situation zu hören.

Danke,

Joshua

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ tag123phing ___ Phing ist ein Projekt-Build-System auf der Basis von Apache Ant. Sie können mit Phing alles tun, was Sie mit einem herkömmlichen Build-System wie Gnu make tun können, und Phings einfache XML-Build-Dateien und erweiterbare PHP- "Task" -Klassen machen es zu einem einfach zu verwendenden und äußerst flexiblen Build-Framework. ___
Htbaa 15.02.2011 15:07
quelle
0

Ich glaube, dass Phing ein gutes Werkzeug dafür ist. Capistrano könnte auch helfen.

Ich stelle meine Anwendung in einer sehr ähnlichen Umgebung bereit. Bis jetzt habe ich einfache Bash Scrpts verwendet, aber ich werde wahrscheinlich auf eine phingbasierte Lösung zugehen, hauptsächlich wegen der Schwierigkeit bei der Entwicklung von Shell Scripts (Sie müssen eine neue Syntax kennen, die nicht sehr flexibel ist, nicht zu plattformübergreifend erwähnen) und die Verfügbarkeit der Parallelverarbeitung, die in phing vorhanden ist.

    
Muc 23.06.2012 22:13
quelle
0

Phing ist ein großartiges Tool für die Verwaltung Ihrer Deployment-Aufgaben, das die meisten von (a) abdeckt.

Wir verwenden OpsCode Chef für das Infrastrukturmanagement. Es verfügt über ein deploy_revision-Target, das sowohl SVN- als auch Git-Repos für die Bereitstellung von Anwendungscode unterstützt, und Messer (das wichtigste Befehlszeilentool von Chef) verfügt über ein EC2-Plug-In, mit dem Sie mit einem Befehl ein neues EC2 hochfahren können Instanz mit den Rollen und Umgebungen, die Sie in Chef definiert haben, und stellen Sie Ihren Anwendungscode bereit.

Um dies mit mehreren EC2-Instanzen hinter einem ELB zu verwalten, haben wir die Python-Bibliothek boto verwendet, um sehr einfach zu schreiben Skripts, die eine Verbindung mit dem ELB herstellen, eine Liste aller mit diesem ELB verknüpften Instanzen abrufen und nacheinander eine Instanz aus dem ELB entfernen, führt das Chef-Update für diese Instanz aus (wodurch der neue Anwendungscode und alle Konfigurationsänderungen der Maschine implementiert werden) , verbindet die Instanz erneut mit dem ELB und geht zur nächsten Instanz über.

    
PatL 12.10.2012 06:29
quelle