Heim Backend-Entwicklung PHP-Tutorial Teil: Bereitstellung einer PHP-Anwendung (Laravel) in Amazon ECS

Teil: Bereitstellung einer PHP-Anwendung (Laravel) in Amazon ECS

Oct 20, 2024 am 06:07 AM

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"]
Nach dem Login kopieren

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
Nach dem Login kopieren
  • 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;
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Erklärung dieser Website
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

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ßer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1669
14
PHP-Tutorial
1273
29
C#-Tutorial
1256
24
Erklären Sie sicheres Kennwort -Hashing in PHP (z. B. password_hash, password_verify). Warum nicht MD5 oder SHA1 verwenden? Erklären Sie sicheres Kennwort -Hashing in PHP (z. B. password_hash, password_verify). Warum nicht MD5 oder SHA1 verwenden? Apr 17, 2025 am 12:06 AM

In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP in Aktion: Beispiele und Anwendungen in realer Welt PHP in Aktion: Beispiele und Anwendungen in realer Welt Apr 14, 2025 am 12:19 AM

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen? Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen? Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Apr 14, 2025 am 12:12 AM

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO) Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO) Apr 15, 2025 am 12:15 AM

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

See all articles