


Teil: 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.
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.
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.
Ä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:
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
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.
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)
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:
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:
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











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 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 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.

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.

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 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.

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 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.
