View a markdown version of this page

Bereitstellen einer Laravel-Anwendung in Elastic Beanstalk - AWS Elastic Beanstalk

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bereitstellen einer Laravel-Anwendung in Elastic Beanstalk

Bei Laravel handelt es sich um ein Open-Source-Framework mit Model-View-Controller (MVC) für PHP. Dieses Tutorial führt Sie durch den Prozess der Generierung einer Laravel-Anwendung, ihrer Bereitstellung in einer AWS Elastic Beanstalk Umgebung und der Konfiguration für die Verbindung mit einer Amazon Relational Database Service (Amazon RDS) Datenbank-Instance.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Sie die grundlegenden Elastic Beanstalk-Operationen und die Elastic Beanstalk-Konsole kennen. Sofern noch nicht geschehen, starten Sie anhand der Anleitung in Erfahren Sie, wie Sie mit Elastic Beanstalk loslegen die erste Elastic-Beanstalk-Umgebung.

Für die Verfahren in diesem Leitfaden benötigen Sie ein Befehlszeilen-Terminal oder eine Shell für die Ausführung der Befehle. Befehle werden ggf. in Auflistungen mit einem vorangestellten Eingabeaufforderungssymbol ($) und dem Namen des aktuellen Verzeichnisses angezeigt.

~/eb-project$ this is a command this is output

In Linux und macOS können Sie Ihren bevorzugten Shell- und Paket-Manager verwenden. Unter Windows können Sie das Windows-Subsystem für Linux installieren, um eine Windows-integrated Version von Ubuntu und Bash zu erhalten.

Laravel 6 erfordert PHP 7.2 oder höher. Außerde werden die PHP-Erweiterungen benötigt, die unter dem Thema Serveranforderungen in der offiziellen Laravel-Dokumentation aufgeführt sind. Folgen Sie den Anweisungen zur Installation von PHP und Composer.

Weitere Informationen zu Support und Wartung von Laravel finden Sie im Thema Support-Richtlinie in der offiziellen Laravel-Dokumentation.

Starten einer Elastic Beanstalk-Umgebung

Erstellen Sie mit der Elastic Beanstalk-Konsole, eine Elastic Beanstalk-Umgebung. Wählen Sie die Plattform PHP und übernehmen Sie die Standardeinstellungen und den Beispielcode.

So starten Sie eine Umgebung (Konsole)
  1. Öffnen Sie die Elastic Beanstalk-Konsole über diesen vorkonfigurierten Link: console.aws.amazon. com/elasticbeanstalk/home #/Neue Anwendung? Anwendungsname=Tutorials&EnvironmentType= LoadBalanced

  2. Wählen Sie unter Platform (Plattform) die Plattform und die Plattformvariante aus, die mit der Sprache Ihrer Anwendung übereinstimmen.

  3. Wählen Sie unter Application code (Anwendungscode) die Option Sample application (Beispielanwendung) aus.

  4. Klicken Sie auf Review and launch (Überprüfen und starten).

  5. Sehen Sie sich die verfügbaren Optionen an. Wählen Sie die gewünschte verfügbare Option aus und wählen Sie Create App (App erstellen) aus.

Das Erstellen der Umgebung benötigt etwa fünf Minuten. Dabei werden die folgenden Ressourcen erstellt:

  • Beanstalk Standard — Für eine Umgebung, die auf Amazon Elastic Compute Cloud (Amazon EC2) ausgeführt wird, stellt Elastic Beanstalk die folgenden Ressourcen bereit:

    • EC2-Instance — Eine virtuelle Amazon EC2-Maschine, die für die Ausführung von Webanwendungen auf der von Ihnen ausgewählten Plattform konfiguriert ist.

      Jede Plattform führt eine spezifische Gruppe von Software, Konfigurationsdateien und Skripts zur Unterstützung einer bestimmten Sprachversion, eines Frameworks, Webcontainers oder einer Kombination daraus aus. Die meisten Plattformen verwenden entweder Apache oder NGINX als Reverse-Proxy, der vor der Web-App platziert ist, Anforderungen weiterleitet, statische Komponenten bedient und Zugriffs- und Fehlerprotokolle generiert.

    • Instance security group (Instance-Sicherheitsgruppe): Eine Amazon EC2-Sicherheitsgruppe, die so konfiguriert ist, dass eingehender Datenverkehr auf Port 80 erlaubt ist. Mit dieser Ressource kann HTTP-Datenverkehr vom Load Balancer die EC2-Instance mit Ihrer Web-App erreichen. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.

    • Load balancer security group (Load Balancer-Sicherheitsgruppe): Eine Amazon EC2-Sicherheitsgruppe, die so konfiguriert ist, dass eingehender Datenverkehr auf Port 80 erlaubt ist. Diese Ressource ermöglicht, dass HTTP-Datenverkehr aus dem Internet den Load Balancer erreicht. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.

    • Auto Scaling group (Auto Scaling-Gruppe) – Eine Auto Scaling-Gruppe, die so konfiguriert ist, dass sie eine Instance ersetzt, wenn diese beendet wird oder nicht verfügbar ist.

    • CloudWatch Amazon-Alarme — Zwei CloudWatch Alarme, die die Auslastung der Instances in Ihrer Umgebung überwachen und ausgelöst werden, wenn die Last zu hoch oder zu niedrig ist. Wenn ein Alarm ausgelöst wird, wird Ihre Auto Scaling-Gruppe nach oben oder nach unten skaliert.

  • Beanstalk Cluster — Für eine Umgebung, die auf Amazon EKS ausgeführt wird, stellt Elastic Beanstalk die folgenden Ressourcen bereit:

    • Amazon EKS-Cluster — Ein Amazon EKS-Cluster, den Elastic Beanstalk erstellt und betreibt. Umgebungen im selben Konto, die dieselben Subnetze verwenden, teilen sich einen Cluster.

    • Compute — Knotenkapazität, die vom Amazon EKS Auto Mode bereitgestellt wird. Dabei werden Knoten hinzugefügt und entfernt, sodass sie zu den im Cluster geplanten Anwendungsreplikaten passen.

    • IAM-Rollen — Die Cluster- und Node-Rollen, die Sie für Amazon EKS bereitstellen, und die Observability-Rolle, die Elastic Beanstalk verwendet, um die Metriken, Logs und Traces der Umgebung zu veröffentlichen.

    Weitere Informationen zu dieser Infrastruktur finden Sie unter. Beanstalk Cluster-Architektur

  • Load Balancer — Ein Load Balancer, der eingehende Anfragen auf Ihre Anwendung verteilt. Ein Load Balancer macht es auch überflüssig, Ihre Anwendung direkt dem Internet auszusetzen.

  • Amazon S3-Bucket – Ein Speicherort für Ihren Quellcode, Protokolle und andere Artefakte, die bei der Verwendung von Elastic Beanstalk erstellt werden.

  • CloudFormation Stack — Elastic Beanstalk verwendet CloudFormation es, um die Ressourcen in Ihrer Umgebung zu starten und Konfigurationsänderungen zu verbreiten. Die Ressourcen werden in einer Vorlage definiert, die Sie in der CloudFormation -Konsole anzeigen können.

  • Domainname — Ein Domainname, der im Formular zu Ihrer Web-App weitergeleitet wird. subdomain region.elasticbeanstalk.com.

    Sicherheit der Domain

    Um die Sicherheit Ihrer Elastic-Beanstalk-Anwendungen zu erhöhen, ist die Domain elasticbeanstalk.com in der Public Suffix List (PSL) registriert.

    Wenn Sie jemals vertrauliche Cookies im Standard-Domainnamen für Ihre Elastic Beanstalk-Anwendungen setzen müssen, empfehlen wir Ihnen, Cookies mit einem Präfix zu verwenden, um die Sicherheit zu erhöhen. __Host- Diese Vorgehensweise schützt Ihre Domain vor Cross-Site-Request-Forgery-Versuchen (CSRF). Weitere Informationen finden Sie auf der Set-Cookie Seite im Mozilla Developer Network.

All diese Ressourcen werden von Elastic Beanstalk verwaltet. Wenn Sie die Umgebung beenden, werden alle darin enthaltenen Ressourcen von Elastic Beanstalk beendet.

Anmerkung

Der von Elastic Beanstalk erstellte Amazon S3-Bucket wird von den Umgebungen gemeinsam genutzt und beim Beenden einer Umgebung nicht gelöscht. Weitere Informationen finden Sie unter Verwenden von Elastic Beanstalk mit Amazon S3.

Installieren von Laravel und Erstellen einer Website

Composer kann Laravel installieren und ein Arbeitsprojekt mit einem Befehl erstellen:

~$ composer create-project --prefer-dist laravel/laravel eb-laravel

Composer installiert Laravel und seine Abhängigkeiten und generiert ein Standardprojekt.

Wenn Sie Probleme bei der Installation von Laravel haben, lesen Sie das Installationsthema in der offiziellen Dokumentation:. https://laravel.com/docs/6.x

Bereitstellen der Anwendung

Erstellen Sie mit den Dateien, die von Composer erstellt wurden, ein Quell-Bundle . Der folgende Befehl erstellt ein Quell-Bundle mit dem Namen laravel-default.zip. Die Dateien im Ordner vendor werden ausgeschlossen, weil sie viel Platz benötigen und zum Bereitstellen der Anwendung für Elastic Beanstalk nicht erforderlich sind.

~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"

Laden Sie das Quell-Bundle nach Elastic Beanstalk hoch, um Laravel in der Umgebung bereitzustellen.

So stellen Sie ein Quell-Bundle bereit
  1. Öffnen Sie die Elastic Beanstalk-Konsole und wählen Sie in der Liste der Regionen Ihre aus. AWS-Region

  2. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

  3. Wählen Sie auf der Umgebungsübersichtsseite die Option Upload and deploy (Hochladen und bereitstellen).

  4. Verwenden Sie das Dialogfeld auf dem Bildschirm, um das Quellpaket hochzuladen.

  5. Wählen Sie Deploy (Bereitstellen) aus.

  6. Wenn die Bereitstellung abgeschlossen ist, wählen Sie die Website-URL, um Ihre Website in einer neuen Registerkarte zu öffnen.

Anmerkung

Um das Quell-Bundle weiter zu optimieren, initialisieren Sie ein Git-Repository und verwenden den Befehl git archive, um das Quell-Bundle zu erstellen. Das Laravel-Standardprojekt enthält eine .gitignore-Datei, die Git anweist, den Ordner vendor sowie andere Dateien, die für die Bereitstellung nicht benötigt werden, auszuschließen.

Konfigurieren von Composer-Einstellungen

Klicken Sie nach Abschluss der Bereitstellung auf die URL, um die Laravel-Anwendung im Browser zu öffnen:

Die Fehlerseite 403 Forbidden gibt an, dass der Benutzer nicht berechtigt ist, auf die angeforderte Ressource zuzugreifen.

Was ist das? Elastic Beanstalk bedient das Stammverzeichnis Ihres Projekts standardmäßig auf dem Stammpfad der Website. In diesem Fall liegt die Standardseite (index.php) jedoch eine Ebene weiter unten im public-Ordner. Das können Sie überprüfen, indem Sie /public zur URL hinzufügen. Beispiel, http://laravel.us-east-2.elasticbeanstalk.com/public.

Damit die Anwendung Laravel im Stammverzeichnis verwendet werden kann, konfigurieren Sie mit der Elastic Beanstalk-Konsole das Dokumentenstammverzeichnis der Website.

So konfigurieren Sie das Stammverzeichnis Ihrer Website
  1. Öffnen Sie die Elastic Beanstalk-Konsole und wählen Sie in der Liste der Regionen Ihre aus. AWS-Region

  2. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

  3. Wählen Sie im Navigationsbereich Configuration (Konfiguration) aus.

  4. Wählen Sie in der Konfigurationskategorie Updates, monitoring and logging  (Updates, Überwachung und Protokolle) die Option Edit (Bearbeiten) aus.

  5. Geben Sie für Document root (Basisverzeichnis) /public ein.

  6. Wählen Sie unten auf der Seite die Option Apply (Anwenden) aus, um die Änderungen zu speichern.

  7. Wenn die Aktualisierung abgeschlossen ist, klicken Sie auf die URL, um Ihre Website erneut im Browser zu öffnen.

Laravel-Logo mit Elementen im Navigationsmenü: Dokumentation, Laracasts, News, Forge,. GitHub

So weit, so gut. Jetzt fügen Sie eine Datenbank zu Ihrer Umgebung hinzu und konfigurieren eine Verbindung mit Laravel.

Hinzufügen einer Datenbank zu Ihrer Umgebung

Starten Sie eine RDS-DB-Instance in Ihrer Elastic Beanstalk-Umgebung. Sie können in Elastic Beanstalk MySQL-, SQLServer- oder PostgreSQL-Datenbanken für Laravel verwenden. In diesem Beispiel wird MySQL verwendet.

So fügen Sie Ihrer Elastic Beanstalk-Umgebung eine RDS-DB-Instance hinzu
  1. Öffnen Sie die Elastic Beanstalk-Konsole und wählen Sie in der Liste der Regionen Ihre aus. AWS-Region

  2. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

  3. Wählen Sie im Navigationsbereich Configuration (Konfiguration) aus.

  4. Wählen Sie in der Konfigurationskategorie Database (Datenbank) die Option Edit (Bearbeiten) aus.

  5. Wählen Sie für Engine mysql aus.

  6. Geben Sie einen Master-username (Benutzernamen) und ein Master-password (Passwort) ein. Elastic Beanstalk stellt diese Werte für Ihre Anwendung mithilfe von Umgebungseigenschaften bereit.

  7. Wählen Sie unten auf der Seite die Option Apply (Anwenden) aus, um die Änderungen zu speichern.

Das Erstellen einer Datenbank-Instance dauert ca. zehn Minuten. Weitere Informationen zu Datenbanken, die mit einer Elastic-Beanstalk-Umgebung gekoppelt sind, finden Sie unter Hinzufügen einer Datenbank zu Ihrer Elastic Beanstalk-Umgebung.

In der Zwischenzeit können Sie Ihren Quell-Code aktualisieren, um Verbindungsinformationen aus der Umgebung zu lesen. Elastic Beanstalk bietet Verbindungsdetails mithilfe von Umgebungsvariablen an, wie z. B. RDS_HOSTNAME, auf die Sie in Ihrer Anwendung zugreifen können.

Die Laravel-Datenbankkonfiguration ist in einer Datei mit dem Namen database.php im config-Ordner im Projektcode gespeichert. Suchen Sie den Eintrag mysql und ändern Sie die Variablen host, database, username und and password, damit sie die entsprechenden Werte aus Elastic Beanstalk lesen:

Beispiel~/Eb-laravel/config/database.php
... 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('RDS_HOSTNAME', '127.0.0.1'), 'port' => env('RDS_PORT', '3306'), 'database' => env('RDS_DB_NAME', 'forge'), 'username' => env('RDS_USERNAME', 'forge'), 'password' => env('RDS_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ...

Um zu überprüfen, ob die Datenbankverbindung ordnungsgemäß konfiguriert ist, fügen Sie index.php den Code hinzu, um eine Verbindung zur Datenbank herzustellen und fügen Code zur Standardantwort hinzu:

Beispiel~/Eb-laravel/public/index.php
... if(DB::connection()->getDatabaseName()) { echo "Connected to database ".DB::connection()->getDatabaseName(); } $response->send(); ...

Wenn die DB-Instance den Start abgeschlossen hat, bündeln Sie die aktualisierte Anwendung und stellen Sie sie in Ihrer Umgebung bereit.

So aktualisieren Sie Ihre Elastic Beanstalk-Umgebung
  1. Erstellen Sie ein neues Quell-Bundle:

    ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. Öffnen Sie die Elastic Beanstalk-Konsole und wählen Sie in der Liste der Regionen Ihre aus. AWS-Region

  3. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

  4. Klicken Sie auf die Schaltfläche Upload and Deploy (Hochladen und bereitstellen).

  5. Wählen Sie Browse (Durchsuchen) und laden Sie laravel-v2-rds.zip hoch.

  6. Wählen Sie Bereitstellen.

Die Bereitstellung einer neuen Version Ihrer Anwendung dauert weniger als eine Minute. Wenn die Bereitstellung abgeschlossen ist, aktualisieren Sie die Webseite erneut, um zu überprüfen, ob die Datenbankverbindung erfolgreich war:

Die Homepage der Laravel-Anwendung zeigt eine erfolgreiche Datenbankverbindung zu ebdb.

Bereinigen

Nachdem Sie die Arbeit mit dem Demo-Code beendet haben, können Sie Ihre Umgebung beenden. Elastic Beanstalk löscht alle zugehörigen AWS Ressourcen wie Amazon EC2-Instances, Datenbank-Instances, Load Balancer , Sicherheitsgruppen und Alarme.

Durch das Entfernen von Ressourcen wird die Elastic Beanstalk-Anwendung nicht gelöscht, sodass Sie jederzeit neue Umgebungen für Ihre Anwendung erstellen können.

Um Ihre Elastic Beanstalk-Umgebung von der Konsole aus zu beenden
  1. Öffnen Sie die Elastic Beanstalk-Konsole und wählen Sie in der Liste der Regionen Ihre aus. AWS-Region

  2. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

  3. Klicken Sie auf Actions (Aktionen) und dann auf Terminate Environment (Umgebung beenden).

  4. Verwenden Sie das Dialogfeld auf dem Bildschirm, um die Beendigung der Umgebung zu bestätigen.

Außerdem können Sie Datenbankressourcen beenden, die außerhalb der Elastic Beanstalk-Umgebung erstellt wurden. Beim Beenden einer Amazon RDS-DB-Instance können Sie einen Snapshot erstellen und die Daten zu einem späteren Zeitpunkt in einer anderen Instance wiederherstellen.

So beenden Sie Ihre RDS DB-Instance
  1. Öffnen Sie die Amazon RDS-Konsole.

  2. Wählen Sie Datenbanken aus.

  3. Wählen Sie Ihre DB-Instance aus.

  4. Wählen Sie Aktionen und anschließend Löschen aus.

  5. Wählen Sie, ob Sie einen Snapshot erstellen, und wählen Sie anschließend Delete (Löschen).

Nächste Schritte

Weitere Informationen über Laravel finden Sie auf der offiziellen Laravel-Website unter laravel.com.

Im weiteren Verlauf der Anwendungsentwicklung können Sie Umgebungen verwalten und Anwendungen bereitstellen, ohne manuell eine ZIP-Datei zu erstellen und diese in die Elastic Beanstalk-Konsole hochzuladen. Die Elastic Beanstalk Command Line Interface (Elastic Beanstalk Befehlszeilenschnittstelle) (EB CLI) stellt benutzerfreundliche Befehle zum Erstellen, Konfigurieren und Bereitstellen von Anwendungen in Elastic Beanstalk-Umgebungen über die Befehlszeile bereit.

In diesem Tutorial haben Sie die Composer-Optionen mit der Elastic Beanstalk-Konsole konfiguriert. Um diese Konfiguration zum Teil der Anwendungsquelle zu machen, können Sie eine Konfigurationsdatei wie diese verwenden.

Beispiel. ebextensions/composer.config
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public

Weitere Informationen finden Sie unter Erweiterte Anpassung der Umgebung mit Konfigurationsdateien (.ebextensions).

Das Ausführen einer Amazon RDS-DB-Instance in Ihrer Elastic Beanstalk-Umgebung eignet sich hervorragend für Entwicklung und Tests, sie bindet jedoch den Lebenszyklus Ihrer Datenbank an Ihre Umgebung. Anweisungen zum Herstellen einer Verbindung mit einer Datenbank, die außerhalb der Umgebung ausgeführt wird, finden Sie unter Hinzufügen einer Amazon RDS-DB-Instance zu Ihrer PHP Elastic Beanstalk Beanstalk-Umgebung.

Sofern Sie planen, die Anwendung in einer Produktionsumgebung einzusetzen, konfigurieren Sie einen benutzerdefinierten Domainnamen für die Umgebung und aktivieren dann HTTPS für sichere Verbindungen.