Bereitstellen von Laravel auf Amazon Web Services: Eine detaillierte schrittweise Anleitung

UPDIVISION baut Einhörner. Unsere Entwickler haben viel durchgemacht. Das sind ihre Geschichten. Dieser wird von Cristi, einer unserer erfahrenen App-Entwickler, erzählt.

Wenn Sie ein Webentwickler sind, haben Sie wahrscheinlich schon von Laravel gehört. Ich für meinen Teil benutze es oft. Laravel ist ein Open-Source-Framework für Model-View-Controller für PHP.

Und wenn es um das Hosten von Laravel-basierten Apps geht, verwende ich häufig Amazon Web Services (AWS), insbesondere Elastic Beanstalk. Es ist eine solide Hosting-Lösung mit nahezu der gesamten benötigten Infrastruktur (Load Balancer, automatische Skalierung, relationale Datenbank, benutzerdefinierte VPC).

Laravel auf AWS ist eine Kombination, die sehr gut funktioniert, was sie bei Webentwicklern sehr beliebt macht. Dies macht die Bereitstellung nicht einfach. Es hilft nicht, dass es nur begrenzte Informationen gibt. Es gibt den seltenen Blogpost, der nur Teile des gesamten Prozesses anspricht. Ja, Amazon hat einige Unterlagen herausgebracht, aber Sie kratzen sich öfter am Kopf, als es klärt.

Ich habe oft versucht, unsere von Laravel erstellten Projekte auf AWS bereitzustellen. Ich habe diesen Artikel geschrieben, damit Sie es nicht müssen.

Bevor wir beginnen, wollte ich sagen, dass ich versucht habe, dieses Handbuch so benutzerfreundlich wie möglich für Personen zu gestalten, die wenig oder keine Erfahrung mit der Konfiguration von Servern haben. Ich habe eine Reihe von Referenzlinks hinzugefügt, damit Sie mehr darüber erfahren, was hier erklärt wird.

Obwohl dieser Blogpost ausreicht, um Ihre App zum Laufen zu bringen, können Sie möglicherweise weitere Anpassungen vornehmen, indem Sie die Dokumentation lesen.

0. Voraussetzungen

Sie sollten bereits ein Konto bei AWS haben. Wenn Sie dies nicht tun, erstellen Sie eine und lesen Sie weiter.

Schritt 0.1 Umgebung erstellen

  • Greifen Sie auf Ihre AWS-Konsole zu
  • Gehe zur elastischen Bohnenstange
  • Klicken Sie auf "Antrag erstellen" und füllen Sie das Formular aus
  • Für Sie neue Anwendungsaktionen Aktionen> Umgebung erstellen
  • Wählen Sie im neuen Fenster die Webserver-Umgebung aus und klicken Sie auf Auswählen
  • Füllen sie das Formular aus:
  • → Wählen Sie PHP als vorkonfigurierte Plattform
  • → Wählen Sie unter Anwendungscode die Option Beispielanwendung
  • → Klicken Sie auf Umgebung erstellen
  • Wenn Sie weitere Einstellungen ändern möchten, klicken Sie auf Weitere Optionen konfigurieren
  • Nehmen Sie die gewünschten Änderungen vor (vorzugsweise das für ssh verwendete Schlüsselpaar festlegen / erstellen)
  • Klicken Sie auf Umgebung erstellen

Schritt 0.2 Umgebung konfigurieren

  • Klicken Sie auf die neu erstellte Umgebung
  • Klicken Sie im Menü auf der linken Seite auf Konfiguration
  • Klicken Sie auf Von Software ändern
  • In Containeroptionen:
  • → Setzen Sie Document root auf / public
  • → Nehmen Sie andere erforderliche Konfigurationen vor
  • Tragen Sie in den Umgebungseigenschaften alle Konfigurationsinformationen in die ENV-Datei Ihres Projekts ein
  • Klicken Sie auf Übernehmen

1. Laden Sie das Archiv über den Webbrowser hoch

  • Wechseln Sie auf Ihrem lokalen Computer in den Stammordner Ihres Projekts
  • Archivieren Sie das Projekt in einer ZIP-Datei
  • Stellen Sie sicher, dass der Herstellerordner enthalten ist
  • Für Git-bezogene Dateien ist der Ordner tests nicht erforderlich
cd //
zip -r .zip
  • Greifen Sie auf Ihre AWS-Konsole zu
  • Gehe zur elastischen Bohnenstange
  • Wechseln Sie zum Dasboard Ihrer Anwendung
  • Klicken Sie auf Hochladen und bereitstellen
  • Wählen Sie für die Anwendung zum Hochladen das soeben erstellte Archiv aus
  • Geben Sie als Versionsbezeichnung die neue Versionsnummer ein
  • Klicken Sie auf Bereitstellen

2. Verwenden von Code Deploy

Schritt 2.1 Konfigurieren der Code Deploy-Anwendung in AWS

  • Greifen Sie auf Ihre AWS-Konsole zu
  • Gehen Sie zu CodeDeploy
  • Klicken Sie auf Anwendung erstellen
  • Füllen sie das Formular aus:

→ Geben Sie den gewünschten Anwendungsnamen ein

→ Wählen Sie EC2 / On-Premises als Compute Platform

→ Geben Sie den gewünschten Namen der Bereitstellungsgruppe ein

→ Der Bereitstellungstyp ist In-Place-Bereitstellung

→ Umgebungskonfiguration:

  • → Wenn Ihre Webanwendung den Lastenausgleich verwendet> Wählen Sie die Gruppe Automatische Skalierung des Lastenausgleichs aus
  • → Wenn Ihre Webanwendung keinen Lastenausgleich verwendet> Wählen Sie die Amazon EC2-Instanz aus

→ Wählen Sie für die Bereitstellungskonfiguration CodeDeployDefault.OneAtATime aus

→ Wählen Sie für Servicerolle eine Servicerolle aus, die AWS CodeDeploy Zugriff auf die Instanzen gewährt (z. B. arn: aws: iam :: 34325423432: role / elasticbeanstalk-ec2-role).

  • Klicken Sie auf Speichern
  • Jetzt haben Sie Ihre Bereitstellungsgruppe (eine Sammlung von EC2-Instanzen, auf denen CodeDeploy für jede Bereitstellung ausgeführt wird).

Schritt 2.2 Konfigurieren von Code Deploy in Bitbucket

  • Installieren Sie das CodeDeploy-Add-On in Bitbucket
  • Klicken Sie in Ihrem Bitbucket-Projekt-Repository auf Einstellungen
  • Klicken Sie auf CodeDeploy-Einstellungen
  • Wenn Sie keine AWS-Rolle haben
  • → Befolgen Sie die Anweisungen, um eine neue AWS-Rolle zu erstellen
  • → Wählen Sie aus den Dropdown-Listen die Rolle ARN und Region aus
  • → Klicken Sie auf Speichern und fortfahren
  • Wenn Sie eine AWS-Rolle haben
  • → Wählen Sie die AWS-Anwendung (die Sie oben in Schritt 2.1 erstellt haben) und den zu verwendenden S3-Bucket aus
  • → Klicken Sie auf Speichern

Schritt 2.3 Konfiguration der YML-Datei

Sie müssen CodeDeploy mitteilen, wie es mithilfe einer appspec.yml auf Ihren Instanzen bereitgestellt werden soll. Fügen Sie anschließend "appspec.yml" zum Stammverzeichnis Ihres Projekts hinzu (siehe Beispiel unten).

Version: 0.0
os: linux
Dateien:
    - Quelle: /
      Ziel: / var / www / html /
Haken:
    Vor der Installation:
        - Speicherort: scripts / BeforeInstall.sh
    AfterInstall:
        - Speicherort: scripts / AfterInstall.sh
  • Erstellen Sie einen Skriptordner im Stammverzeichnis Ihres Projekts und fügen Sie die Skripts hinzu, die Sie ausführen möchten
  • AfterInstall.sh aus dem obigen Beispiel könnte ungefähr so ​​aussehen
#! / bin / bash
# Legen Sie die Berechtigungen für Speicher und Bootstrap-Cache fest
sudo chmod -R 0777 / var / www / html / storage
sudo chmod -R 0777 / var / www / html / bootstrap / cache
#
cd / var / www / html
#
# Führen Sie den Komponisten aus
sudo /usr/bin/composer.phar install --no-ansi --no-dev --no-suggest --no-interact --no-progress --prefer-dist --no-scripts -d / var / www / html
#
# Führen Sie handwerkliche Befehle aus
php / var / www / html / artisan migrieren

Schritt 2.4 Bereitstellung in einer Einzelinstanzumgebung

  • SSH in Ihre EC2-Instanz
ssh -i ~ / .pem ec2-user@ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
  • Überprüfen Sie, ob der CodeDeploy-Agent installiert ist und ausgeführt wird
sudo service codedeploy-agent status
  • Wenn die folgende Meldung angezeigt wird: Es wird kein AWS CodeDeploy-Agent ausgeführt, starten Sie den Service
sudo service codedeploy-agent start
  • Wenn eine Fehlermeldung wie "codedeploy-agent: befehl nicht gefunden" angezeigt wird, müssen Sie den CodeDeploy-Agenten installieren. Führen Sie dazu den folgenden Code aus:
cd / home / ec2-benutzer
curl -O https://aws-codedeploy-.s3.amazonaws.com/latest/install
chmod + x ./install
sudo ./install auto
  • Wenn der CodeDeploy-Agent erfolgreich installiert wurde, rufen Sie Bitbucket auf und führen Sie Ihre erste Bereitstellung durch

Schritt 2.5 In einer Umgebung mit Lastenausgleich bereitstellen

  • Greifen Sie auf Ihre AWS-Konsole zu
  • Gehe zu EC2
  • Klicken Sie im linken Menü auf Auto Scaling Groups
  • Wählen Sie die Gruppe aus, die Ihrem Load Balancer entspricht
  • Notieren Sie sich den Namen der Startkonfiguration, die der Auto Scaling-Gruppe entspricht
  • Klicken Sie im linken Menü auf Konfigurationen starten
  • Wählen Sie die Konfiguration aus, die Sie benötigen
  • Klicken Sie auf Aktionen> Startkonfiguration kopieren
  • Klicken Sie auf der neuen Seite auf Details bearbeiten
  • Klicken Sie auf Erweiterte Details und im Textbereich Benutzerdaten nach Inhaltsdisposition: Anhang; Dateiname = "user-data.txt" hinzufügen:
#! / bin / bash
sudo yum install -y nodejs npm --enablerepo = epel
 
Pip installieren awscli
 
php -r "copy ('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php - --install-dir = / home / ec2-user --filename = composer
sudo rm composer-setup.php
 
yum -y update
yum install -y ruby
 
cd / home / ec2-benutzer
curl -O https://aws-codedeploy-.s3.amazonaws.com/latest/install
chmod + x ./install
./install auto
  • Klicken Sie auf Zum Überprüfen überspringen
  • Klicken Sie auf Laungh-Konfiguration erstellen
  • Wählen Sie ein Schlüsselpaar
  • Aktivieren Sie das Kontrollkästchen Ich bestätige, dass ich Zugriff auf die ausgewählte private Schlüsseldatei habe und dass ich mich ohne diese Datei nicht bei meiner Instanz anmelden und auf Startkonfiguration erstellen klicken kann
  • Klicken Sie im linken Menü auf Auto Scaling Groups und wählen Sie dann die Gruppe Ihres Balancers aus
  • Klicken Sie auf Aktionen> Bearbeiten
  • Wählen Sie auf der Registerkarte Details für Konfiguration starten die neu erstellte Konfiguration aus und klicken Sie auf Speichern
  • Jetzt müssen Sie die Datei appspec.yml in Ihrem Projektstamm mit dem folgenden Code aktualisieren
ApplicationStart:
- Speicherort: Skripte / RegisterWithELB.sh
ApplicationStop:
- Speicherort: scripts / DeregisterFromELB.sh
  • Fügen Sie im Skriptordner Ihres Projekts RegisterWithELB.sh und DeregisterFromELB.sh hinzu
  • Änderungen an Bitbucket senden

Schritt 2.6 Bereitstellen von Bitbucket

  • Wechseln Sie in das Projekt-Repository von Bitbucket
  • Klicken Sie auf Zweige
  • Klicken Sie auf den Zweig, den Sie für AWS bereitstellen möchten
  • Klicken Sie auf In AWS bereitstellen
  • Wählen Sie die gewünschte Bereitstellungsgruppe
  • Klicken Sie auf Bereitstellung starten
  • Jetzt können Sie den Status der Bereitstellung in der CodeDeploy-Konsole überprüfen

Fazit

Mit etwas Glück sollten Sie an dieser Stelle eine Laravel-App haben, die auf Elastic Beanstalk läuft. Fühlen Sie sich frei, die Setup- und Konfigurationsdateien an Ihre Bedürfnisse anzupassen. Was kommt als nächstes? Wenn Sie Ihre Umgebung überwachen oder sich in andere AWS-Services integrieren möchten, lesen Sie die Elastic Beanstalk-Dokumentation.

Ich hoffe, Ihnen hat dieser Artikel über die Bereitstellung von Laravel auf AWS mithilfe von Elastic Beanstalk gefallen. Hast du irgendwelche Tipps oder Tricks? Oder vielleicht ein paar Fragen? Fühlen Sie sich frei, in den Kommentaren zu fragen.

Oder vielleicht versuchst du andere coole Sachen mit Laravel zu machen. Ich habe. Weitere schrittweise Anleitungen zur Bereitstellung einer Laravel-App in Heroku, in Google Compute Engine unter LINUX, in Google App Engine oder zum Einrichten einer Laravel-basierten E-Commerce-Plattform.

Viel Spaß beim Codieren!

Wenn Ihnen das gefallen hat, könnten Sie auch an unseren anderen Projekten interessiert sein. Lesen Sie mehr in unserem Blog. Folgen Sie uns auf @updivision und auf Facebook.