suchen
HeimBackend-EntwicklungPHP-TutorialTeil: Bereitstellung einer PHP-Anwendung (Laravel) in Amazon ECS

In diesem ersten Teil unserer Tutorialreihe gehen wir die Schritte zum Bereitstellen einer PHP-Anwendung (Laravel) in Amazon ECS durch. Wir beginnen damit, ein Docker-Image zu erstellen, es an Amazon ECR zu übertragen, eine ECS-Aufgabendefinition, einen ECS-Cluster und einen ECS-Dienst zu erstellen und einen Domänennamen mit dem Dienst zu verbinden.

Arbeiten mit Docker und ECR

Erstellen Sie eine Docker-Datei und eine Nginx-Konfiguration

Erstellen Sie im Stammverzeichnis Ihres Git-Repositorys eine Docker-Datei mit folgendem Inhalt:

# Use the official PHP-FPM image as the base
FROM public.ecr.aws/docker/library/php:fpm

# Define a user variable
ARG user=www-data

# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
    git curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip unzip libzip-dev \
    nginx \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install \
        pdo_mysql \
        mbstring \
        exif \
        pcntl \
        bcmath \
        gd \
        zip

# Install Composer
COPY --from=public.ecr.aws/composer/composer:latest-bin /usr/bin/composer /usr/bin/composer

# Create a system user for running Composer and Artisan commands
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Copy Nginx configuration and entrypoint script
COPY ./docker/default.conf /etc/nginx/sites-enabled/default
COPY ./docker/entrypoint.sh /etc/entrypoint.sh

# Make the entrypoint script executable
RUN chmod +x /etc/entrypoint.sh

# Set the working directory
WORKDIR /var/www

# Copy the application code
COPY --chown=www-data:www-data . /var/www

# Install PHP dependencies
RUN composer install

# Expose port 80
EXPOSE 80

# Define the entrypoint
ENTRYPOINT ["/etc/entrypoint.sh"]

Erstellen Sie einen neuen Ordner mit dem Namen Docker und legen Sie die folgenden zwei Dateien darin ab.

  • docker/entrypoint.sh
#!/usr/bin/env bash

# Start Nginx service
service nginx start

# Run Laravel migrations
php artisan migrate --force

# Create symbolic link for storage
php artisan storage:link

# Clear and optimize the application cache
php artisan optimize:clear
php artisan optimize

# Start PHP-FPM
php-fpm
  • docker/default.conf
server {
    listen 80 default_server;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_hide_header X-Powered-By;

        # Tells PHP we're using a reverse proxy with TLS termination
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_X_FORWARDED_PROTO $scheme;
        fastcgi_param HTTP_X_FORWARDED_SSL on;
        add_header Content-Security-Policy "upgrade-insecure-requests" always;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

Und machen Sie Entrypoint.sh ausführbar, indem Sie chmod x docker/entrypoint.sh ausführen.

Übertragen des Bildes an Amazon ECR

Der erste Schritt besteht darin, das Bild an ECR zu übertragen. Sie müssen diesen Schritt zunächst manuell ausführen, bevor Sie mit der Bereitstellung der Anwendung im ECS fortfahren können.

Erstellen Sie ein ECR-Repository

Erstellen Sie ein ECR-Repository, indem Sie zur Amazon ECR-Konsole gehen, auf Repository erstellen klicken und einen Repository-Namen eingeben. Für dieses Beispiel verwenden wir die Demo-App.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Kopieren Sie nach der Erstellung den URI des Repositorys. Diesen URI benötigen Sie später.

Schieben Sie das Bild an ECR

Wählen Sie das gerade erstellte Repository aus, klicken Sie auf Push-Befehle anzeigen und führen Sie die Befehle in Ihrem Terminal aus. Die Befehle sehen folgendermaßen aus (stellen Sie sicher, dass Sie die richtige Region auswählen und die richtige Konto-ID verwenden):

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker build -t demo-app .
docker tag demo-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest

Sobald die Befehle erfolgreich ausgeführt wurden, kehren Sie zur Amazon ECR-Konsole zurück, geben Sie das Repository ein und bestätigen Sie mit dem Tag „latest“, dass das Image erfolgreich übertragen wurde.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Arbeiten mit Amazon ECS

Erstellen Sie eine ECS-Aufgabendefinition

Der nächste Schritt besteht darin, eine ECS-Aufgabendefinition mit dem Docker-Image zu erstellen, das wir gerade an ECR übertragen haben.
Gehen Sie zunächst zur Amazon ECS-Konsole und klicken Sie unter Aufgabendefinitionen auf Neue Aufgabendefinition erstellen.

Wählen Sie einen eindeutigen Namen für die Aufgabendefinition (wir verwenden die Demo-App) und stellen Sie sicher, dass Fargate als Starttyp ausgewählt ist. Ändern Sie in diesem Abschnitt vorerst nichts anderes.

Scrollen Sie nach unten zum Abschnitt Container – 1 und geben Sie die folgenden Werte ein:

  • Name: Demo-App
  • Bild: 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest (ersetzen Sie es durch Ihren eigenen ECR-URI, den wir zuvor kopiert haben)

Später möchten Sie wahrscheinlich die Speicher- und CPU-Einstellungen je nach Anwendung anpassen. Bei Bedarf können Sie hier auch Umgebungsvariablen und EFS-Volumes hinzufügen. Wir werden es in einem separaten Tutorial behandeln.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Ändern Sie in diesem Abschnitt vorerst nichts anderes. Scrollen Sie nach unten und klicken Sie auf Erstellen.

Erstellen Sie einen ECS-Cluster

Wir müssen jetzt einen ECS-Cluster erstellen. Im Cluster führen wir den Dienst aus, der in der soeben erstellten Aufgabendefinition definiert ist.

Gehen Sie zur Amazon ECS-Konsole, klicken Sie unter Cluster auf Cluster erstellen, geben Sie einen Clusternamen ein und stellen Sie sicher, dass Sie AWS auswählen Fargate (serverlos) als Infrastruktur:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Die Erstellung des Clusters dauert einige Minuten. Die Clustererstellung kann gelegentlich fehlschlagen, insbesondere bei neuen Konten; Warten Sie einfach ein paar Minuten und versuchen Sie es erneut, indem Sie einen anderen Clusternamen wählen.

Erstellen Sie einen ECS-Dienst

Öffnen Sie den soeben erstellten Cluster, scrollen Sie nach unten zur Tabelle Dienste, klicken Sie auf Erstellen und geben Sie die folgenden Werte ein:

  • Familie: Demo-App
  • Überarbeitung: 1 (diese unverändert lassen)
  • Dienstname: Demo-App

Part  Deploying a PHP (Laravel) application to Amazon ECS

Klicken Sie noch nicht auf Erstellen.

Fügen Sie einen Load Balancer hinzu

Da wir die Anwendung wahrscheinlich über HTTPS bereitstellen, möchten wir einen Load Balancer hinzufügen. Sie können dies später nicht mehr tun.

Scrollen Sie nach unten zum Abschnitt Netzwerk und wählen Sie eine VPC aus, auf der Sie den Dienst bereitstellen möchten. Stellen Sie sicher, dass die VPC über ein öffentliches Subnetz verfügt, an das ein Internet-Gateway angeschlossen ist. Wenn Sie keine VPC haben, können Sie eine erstellen, indem Sie auf Neue VPC erstellen klicken und dem Assistenten folgen.

Sobald Sie eine VPC ausgewählt haben, lesen Sie weiter.

Scrollen Sie nach unten zum Abschnitt Lastausgleich, wählen Sie Application Load Balancer und wählen Sie die Option Neuen Lastausgleich erstellen.

Wenn diese Option nicht verfügbar ist, haben Sie im vorherigen Schritt wahrscheinlich keine VPC ausgewählt.

Passen Sie die folgenden Werte an:

  • Load-Balancer-Name: demo-app-alb
  • Kulanzfrist für die Gesundheitsprüfung: 300 (Ich empfehle die Einstellung auf 300 Sekunden, also 5 Minuten, damit Ihre App starten und stabilisieren kann)

Lassen Sie im Abschnitt Listener die Option Neuen Listener erstellen ausgewählt, passen Sie die Werte jedoch so an, dass Port 443 und das HTTPS-Protokoll verwendet werden. Um diese Auswahl zu bestätigen, benötigen Sie ein ACM-Zertifikat für die Domain, die Sie verwenden möchten; Weitere Informationen zum Erhalt finden Sie in der AWS-Dokumentation.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Passen Sie im Abschnitt Zielgruppe die folgenden Werte an:

  • Protokoll: HTTP (das ist die Standardeinstellung, stellen Sie sicher, dass Sie sie beibehalten, da unser Nginx-Container Port 80 überwacht)
  • Abmeldeverzögerung: 60 (Ich empfehle, diese auf 60 Sekunden statt der standardmäßigen 5 Minuten einzustellen, um die Bereitstellung etwas schneller zu machen)
  • Gesundheitsprüfungspfad: / (Ich empfehle, dies auf eine Route festzulegen, z. B. /healthcheck, die Sie speziell in Ihrer App erstellen; Sie können es vorerst als Standard belassen)

Part  Deploying a PHP (Laravel) application to Amazon ECS

Klicken Sie auf Erstellen.

Überprüfen Sie den Servicestatus

Es kann einige Minuten dauern, bis Dienste in der Tabelle Dienste angezeigt werden. Warten Sie einfach ein wenig und aktualisieren Sie die Seite, wenn Sie den neuen Dienst nicht sofort sehen.

Wenn alles gut gelaufen ist, sollten Sie den Dienst in der Tabelle Dienste mit dem Status Aktiv und Bereitstellungen und Aufgaben mit 1/1 sehen laufende Aufgabe.

Bereitstellungsfehler werden wie folgt angezeigt:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Um Bereitstellungsfehler zu beheben, öffnen Sie den Dienst und klicken Sie dann auf die Registerkarte Bereitstellungen. Scrollen Sie nach unten zum Abschnitt Ereignisse und klicken Sie auf die ID der zuletzt gestarteten Aufgabe. Der Abschnitt Protokolle der Aufgabenausführung zeigt Ihnen weitere Details darüber, was schief gelaufen ist.

Laravel beschwert sich normalerweise über eine unvollständige Speicherordnerstruktur (z. B. fehlendes Framework, Cache, Sitzungen). Wir werden in einem separaten Tutorial sehen, wie man ein EFS-Volume an die Aufgabendefinition anfügt, um dieses Problem zu beheben.

Verbinden Sie einen Domänennamen mit dem Dienst

Sie möchten wahrscheinlich einen Domänennamen mit dem Dienst verbinden, den wir gerade bereitgestellt haben. In den vorherigen Schritten haben wir bereits einen Application Load Balancer erstellt, die AWS-Komponente, die für die Weiterleitung des Internetverkehrs an den Dienst verantwortlich ist.

Wir haben außerdem bereits ein ACM-Zertifikat bereitgestellt, das zur Verschlüsselung des Datenverkehrs zwischen den Endbenutzern und dem Load Balancer verwendet wird.

Um den Vorgang abzuschließen und Ihre Anwendung über HTTPS aus dem öffentlichen Internet zugänglich zu machen, müssen Sie einen DNS-Eintrag erstellen, der Ihren Domänennamen auf den Load Balancer verweist. Dieser Vorgang unterscheidet sich je nachdem, welchen DNS-Anbieter Sie verwenden. Weitere Informationen finden Sie in der Dokumentation.

Ermitteln Sie zunächst den DNS-Namen des Application Load Balancers. Navigieren Sie zur Suchleiste in der AWS-Konsole (Option S unter macOS), geben Sie Load Balancer ein und wählen Sie Load Balancers (EC2 Feature). Sie sehen eine Tabelle mit dem Load Balancer, mit dem wir unseren Domainnamen verbinden müssen:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Kopieren Sie den DNS-Namen des Load Balancers.

Wenn Sie Route 53 verwenden, befolgen Sie diese Anweisungen:

  • Navigieren Sie zur Route 53-Konsole, klicken Sie auf Gehostete Zonen und wählen Sie Ihren Domainnamen aus.
  • Klicken Sie auf die Schaltfläche Datensatz erstellen.
  • Setzen Sie den Datensatztyp auf A.
  • Aktivieren Sie die Option Alias.
  • Wählen Sie im Feld Datenverkehr weiterleiten an die Option Alias ​​für Anwendung und klassischen Load Balancer aus und wählen Sie die Region des Load Balancers aus.
  • Wählen Sie im Dropdown-Menü Load Balancer auswählen den Load Balancer aus, mit dem wir unseren Domänennamen verbinden müssen. Wenn Sie über mehrere Load Balancer verfügen, überprüfen Sie, ob der aus der Dropdown-Liste ausgewählte Load Balancer mit dem DNS-Namen des Load Balancers übereinstimmen muss, den wir zuvor kopiert haben.
  • Deaktivieren Sie Zielgesundheit bewerten.
  • Klicken Sie auf Datensätze erstellen.

Wenn Sie nicht die Route 53 nutzen:

Weitere Informationen finden Sie in der Dokumentation Ihres DNS-Anbieters. Sie müssen wahrscheinlich einen CNAME-Eintrag erstellen, dessen Ziel/Wert der DNS-Name des Load Balancers ist.

Glückwunsch

Sobald Sie den DNS-Eintrag erstellt haben, warten Sie einige Minuten, bis er sich verbreitet, und versuchen Sie dann, über den Domänennamen auf Ihre Anwendung zuzugreifen.

Herzlichen Glückwunsch!Sie haben jetzt erfolgreich eine PHP-Anwendung (Laravel) in AWS ECS bereitgestellt.

Demnächst in dieser Tutorial-Reihe verfügbar

  • Anhängen eines EFS-Volumes an die Aufgabendefinition, um das Problem mit der Speicherordnerstruktur von Laravel zu beheben
  • Mit AWS CodePipeline automatisch neuen Code für den Service bereitstellen
  • Automatisierung der Infrastrukturbereitstellung mit AWS CDK

Das obige ist der detaillierte Inhalt vonTeil: Bereitstellung einer PHP-Anwendung (Laravel) in Amazon ECS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was sind einige häufige Probleme, die dazu führen können, dass PHP -Sitzungen scheitern?Was sind einige häufige Probleme, die dazu führen können, dass PHP -Sitzungen scheitern?Apr 25, 2025 am 12:16 AM

Gründe für einen Phpessionsfehler sind Konfigurationsfehler, Cookie -Probleme und Sitzungsablauf. 1. Konfigurationsfehler: Überprüfen Sie die richtige Sitzung und setzen Sie die korrekte Sitzung. 2. Kookie -Problem: Stellen Sie sicher, dass der Cookie korrekt eingestellt ist. 3.Sesion läuft ab: Passen Sie die Sitzung an.

Wie debuggen Sie Probleme im Zusammenhang mit Sitzungen in PHP?Wie debuggen Sie Probleme im Zusammenhang mit Sitzungen in PHP?Apr 25, 2025 am 12:12 AM

Zu den Methoden zur Debugg -Sitzungsprobleme in PHP gehören: 1. Überprüfen Sie, ob die Sitzung korrekt gestartet wird. 2. Überprüfen Sie die Lieferung der Sitzungs -ID; 3. Überprüfen Sie den Speicher und das Lesen von Sitzungsdaten. 4. Überprüfen Sie die Serverkonfiguration. Durch Ausgabe von Sitzungs-ID und Daten, Anzeigen von Sitzungsdateiinhalten usw. können Sie effektiv Diagnose und Lösen von Sitzungen im Zusammenhang mit Sitzungen diagnostizieren und lösen.

Was passiert, wenn Session_Start () mehrmals aufgerufen wird?Was passiert, wenn Session_Start () mehrmals aufgerufen wird?Apr 25, 2025 am 12:06 AM

Mehrere Anrufe bei Session_Start () führen zu Warnmeldungen und möglichen Datenüberschreibungen. 1) PHP wird eine Warnung ausstellen und veranlassen, dass die Sitzung gestartet wurde. 2) Dies kann zu unerwarteten Überschreibungen von Sitzungsdaten führen. 3) Verwenden Sie Session_Status (), um den Sitzungsstatus zu überprüfen, um wiederholte Anrufe zu vermeiden.

Wie konfigurieren Sie die Sitzungslebensdauer in PHP?Wie konfigurieren Sie die Sitzungslebensdauer in PHP?Apr 25, 2025 am 12:05 AM

Das Konfigurieren des Sitzungslebenszyklus in PHP kann durch Einstellen von Sitzungen erreicht werden. 1) Session.gc_maxLifetime steuert die Überlebenszeit der serverseitigen Sitzungsdaten, 2) Sitzung.cookie_Lifetime steuert den Lebenszyklus von Client-Cookies. Wenn der Keks auf 0 eingestellt ist, läuft es, wenn der Browser geschlossen ist.

Was sind die Vorteile der Verwendung einer Datenbank zum Speichern von Sitzungen?Was sind die Vorteile der Verwendung einer Datenbank zum Speichern von Sitzungen?Apr 24, 2025 am 12:16 AM

Die Hauptvorteile der Verwendung von Datenbankspeichersitzungen sind Persistenz, Skalierbarkeit und Sicherheit. 1. Persistenz: Auch wenn der Server neu gestartet wird, können die Sitzungsdaten unverändert bleiben. 2. Skalierbarkeit: Anwendbar für verteilte Systeme, um sicherzustellen, dass Sitzungsdaten zwischen mehreren Servern synchronisiert werden. 3. Sicherheit: Die Datenbank bietet verschlüsselten Speicher zum Schutz vertraulicher Informationen.

Wie implementieren Sie eine benutzerdefinierte Sitzung in PHP?Wie implementieren Sie eine benutzerdefinierte Sitzung in PHP?Apr 24, 2025 am 12:16 AM

Das Implementieren der benutzerdefinierten Sitzung in PHP kann durch die Implementierung der SessionHandlerInterface -Schnittstelle durchgeführt werden. Die spezifischen Schritte umfassen: 1) Erstellen einer Klasse, die SessionHandlerInterface wie CustomSessionHandler implementiert; 2) Umschreiben von Methoden in der Schnittstelle (z. B. offen, schließen, lesen, schreiben, zerstören, GC), um die Lebenszyklus- und Speichermethode von Sitzungsdaten zu definieren; 3) Registrieren Sie einen benutzerdefinierten Sitzungsprozessor in einem PHP -Skript und starten Sie die Sitzung. Auf diese Weise können Daten in Medien wie MySQL und Redis gespeichert werden, um Leistung, Sicherheit und Skalierbarkeit zu verbessern.

Was ist eine Sitzungs -ID?Was ist eine Sitzungs -ID?Apr 24, 2025 am 12:13 AM

SessionID ist ein Mechanismus, der in Webanwendungen verwendet wird, um den Benutzersitzstatus zu verfolgen. 1. Es handelt sich um eine zufällig generierte Zeichenfolge, mit der die Identitätsinformationen des Benutzers während mehrerer Interaktionen zwischen dem Benutzer und dem Server aufrechterhalten werden. 2. Der Server generiert und sendet ihn über Cookies- oder URL -Parameter an den Client, um diese Anforderungen in mehreren Anforderungen des Benutzers zu identifizieren und zu verknüpfen. 3. Die Erzeugung verwendet normalerweise zufällige Algorithmen, um Einzigartigkeit und Unvorhersehbarkeit zu gewährleisten. 4. In der tatsächlichen Entwicklung können In-Memory-Datenbanken wie Redis verwendet werden, um Sitzungsdaten zu speichern, um die Leistung und Sicherheit zu verbessern.

Wie gehen Sie mit Sitzungen in einer staatenlosen Umgebung (z. B. API) um?Wie gehen Sie mit Sitzungen in einer staatenlosen Umgebung (z. B. API) um?Apr 24, 2025 am 12:12 AM

Das Verwalten von Sitzungen in staatenlosen Umgebungen wie APIs kann durch Verwendung von JWT oder Cookies erreicht werden. 1. JWT ist für Staatenlosigkeit und Skalierbarkeit geeignet, aber es ist groß, wenn es um Big Data geht. 2. Kookies sind traditioneller und einfacher zu implementieren, müssen jedoch mit Vorsicht konfiguriert werden, um die Sicherheit zu gewährleisten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor