Teilen über


Tutorial: Bereitstellen einer PHP-, MySQL- und Redis-App für Azure App Service

In diesem Tutorial wird gezeigt, wie Sie eine sichere PHP-App in Azure App Service erstellen, die mit einer MySQL-Datenbank verbunden ist (mit einem flexiblen Server von Azure Database for MySQL). Darüber hinaus stellen Sie eine Azure Cache for Redis bereit, um den Zwischenspeicherungscode in Ihrer Anwendung zu aktivieren. Azure App Service ist ein hochgradig skalierbarer Webhostingdienst mit Self-Patching, der Apps problemlos unter Windows oder Linux bereitstellen kann. Wenn Sie fertig sind, verfügen Sie über eine Laravel-App, die in Azure App Service für Linux ausgeführt wird.

Screenshot: Azure-App-Beispiel mit dem Titel „Aufgabenliste“, das zeigt, wie neue Aufgaben hinzugefügt werden

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Beispielanwendung

Führen Sie für dieses Tutorial das Klonen oder Herunterladen der Beispielanwendung Laravel aus dem Repository durch:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Wenn Sie die Anwendung lokal ausführen möchten, gehen Sie wie folgt vor:

  • Konfigurieren Sie in .env die Datenbankeinstellungen (wie DB_DATABASE, DB_USERNAMEund DB_PASSWORD) mithilfe von Einstellungen in Ihrer lokalen MySQL-Datenbank. Sie benötigen einen lokalen MySQL-Server, um dieses Beispiel auszuführen.

  • Starten Sie aus dem Stamm des Repositorys Laravel mit den folgenden Befehlen:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 – Erstellen von App Service- und MySQL-Ressourcen

In diesem Schritt erstellen Sie die Azure-Ressourcen. Die in diesem Tutorial verwendeten Schritte erstellen eine App Service- und Azure Database for MySQL-Konfiguration, die standardmäßig sicher ist. Für den Erstellungsprozess geben Sie Folgendes an:

  • Den Namen für die Web-App. Dieser Name wird als Teil des DNS-Namens für Ihre Web-App im Format https://<app-name>.azurewebsites.net verwendet.
  • Die Runtime für die App. Hier wählen Sie die Version von PHP aus, die für Ihre App verwendet werden soll.
  • Die Ressourcengruppe für die App. Mit einer Ressourcengruppe können Sie (in einem logischen Container) alle für die Anwendung benötigten Azure-Ressourcen gruppieren.

Melden Sie sich beim Azure-Portal an, und führen Sie die folgenden Schritte aus, um Ihre Azure App Service-Ressourcen zu erstellen.

Schritt 1: Im Azure-Portal:

  1. Geben Sie auf der Suchleiste oben im Azure-Portal „Web App Datenbank“ ein.
  2. Wählen Sie das Element mit der Bezeichnung Web-App + Datenbank unter der Überschrift Marketplace aus. Sie können auch direkt zum Erstellungs-Assistenten navigieren.

Screenshot: Verwenden des Suchfelds auf der oberen Symbolleiste, um den Erstellungs-Assistenten „Web-App + Datenbank“ zu finden.

Schritt 2: Füllen Sie das Formular auf der Seite Web-App und Datenbank erstellen wie folgt aus.

  1. Ressourcengruppe → Wählen Sie die Option Neu erstellen aus, und verwenden Sie einen Namen wie msdocs-expressjs-mongodb-tutorial.
  2. Region: Eine beliebige Azure-Region in Ihrer Nähe.
  3. Namemsdocs-expressjs-mongodb-XYZ, wobei XYZ für drei beliebige Zeichen steht. Dieser Name muss innerhalb von Azure eindeutig sein.
  4. Runtimestapel.NET 8.2.
  5. Hinzufügen von Azure Cache for Redis?Ja.
  6. HostingplanBasic. Wenn Sie bereit sind, können Sie später auf einen Produktionstarif hochskalieren.
  7. MySQL – Flexibler Server ist standardmäßig als Datenbankmodul ausgewählt. Azure Database for MySQL ist eine vollständig verwaltete MySQL-Datenbank als Dienst auf Azure, kompatibel mit den neuesten Community-Editionen.
  8. Klicken Sie auf Überprüfen + erstellen.
  9. Wenn die Überprüfung abgeschlossen ist, wählen Sie Erstellen aus.

Screenshot: wie eine neue App und Datenbank im „Web-App + Datenbank“-Assistenten konfiguriert wird.

Schritt 3: Die Durchführung der Bereitstellung dauert einige Minuten. Wählen Sie nach Abschluss der Bereitstellung die Schaltfläche Zu Ressource wechseln aus. Sie werden direkt zur App Service App weitergeleitet, aber die folgenden Ressourcen werden erstellt:

  • Ressourcengruppe → Der Container für alle erstellten Ressourcen.
  • App Service-Plan → Definiert die Berechnungsressourcen für App Service. Ein Linux-Plan im Basic-Tarif wird erstellt.
  • App Service → Stellt Ihre App dar und wird im App Service Plan ausgeführt.
  • Virtuelles Netzwerk → Integriert mit der App Service App und isoliert den Backend-Netzwerkdatenverkehr.
  • Private Endpunkte → Access-Endpunkte für den Datenbankserver und den Redis-Cache im virtuellen Netzwerk.
  • Netzwerkschnittstellen → Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
  • Azure Datenbankserver für MySQL flexibler Server → Nur von hinter seinem privaten Endpunkt aus zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
  • Azure Cache for Redis → Nur von hinter seinem privaten Endpunkt aus zugänglich.
  • Privates DNS Zonen → Aktivieren der DNS-Auflösung des Datenbankservers und des Redis-Caches im virtuellen Netzwerk.

Screenshot: Abgeschlossener Bereitstellungsprozess

2 – Einrichten der Datenbankkonnektivität

Schritt 1: Wählen Sie auf der App Service-Seite im linken Menü Konfiguration aus.

Screenshot: wie die Konfigurationsseite in App Service geöffnet wird.

Schritt 2:

  1. Finden Sie App-Einstellungen, die mit AZURE_MYSQL_ beginnen. Diese wurden vom Erstellungsassistenten aus der neuen MySQL-Datenbank generiert.
  2. Finden Sie auch App-Einstellungen, die mit AZURE_REDIS_ beginnen. Diese wurden vom Erstellungsassistenten aus dem neuen Redis-Cache generiert. Um Ihre Anwendung einzurichten, benötigen Sie nur diesen Namen.
  3. Wenn Sie möchten, können Sie rechts neben jeder Einstellung die Schaltfläche Bearbeiten auswählen und deren Wert anzeigen oder kopieren. Später ändern Sie Ihren Anwendungscode, um diese Einstellungen zu verwenden.

Screenshot: wie eine App-Einstellung erstellt wird.

Schritt 3: Erstellen Sie auf der Registerkarte Anwendungseinstellungen auf der Seite Konfiguration eine CACHE_DRIVER-Einstellung:

  1. Klicken Sie auf Neue Anwendungseinstellung.
  2. Geben Sie in das Feld Name den Namen CACHE_DRIVER ein.
  3. Geben Sie redis in das Feld Wert ein.
  4. Klicken Sie auf OK. CACHE_DRIVER wird bereits im Laravel-Anwendungscode verwendet. Diese Einstellung weist Laravel an, Redis als Cache zu verwenden.

Screenshot: wie Sie die automatisch generierte Zeichenfolge sehen können.

Schritt 4: Erstellen Sie mit denselben Schritten wie in Schritt 3 die folgenden App-Einstellungen:

  • MYSQL_ATTR_SSL_CA: Verwenden Sie /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem als Wert. Diese App-Einstellung verweist auf den Pfad des TLS/SSL-Zertifikats, auf das Sie auf den MySQL-Server zugreifen müssen. Es ist praktischerweise im Beispiel-Repository enthalten.
  • LOG_CHANNEL: Verwenden Sie stderr als Wert. Diese Einstellung weist Laravel an, Protokolle an stderr zu übergeben, sodass sie für die App Service-Protokolle verfügbar sind.
  • APP_DEBUG: Verwenden Sie true als Wert. Es handelt sich um eine Laravel-Debugvariable, die Debugmodusseiten aktiviert.
  • APP_KEY: Verwenden Sie base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= als Wert. Dies ist eine Laravel-Verschlüsselungsvariable.
  1. Klicken Sie oben auf der Menüleiste auf Speichern.
  2. Wählen Sie bei entsprechender Aufforderung Weiter aus.

Screenshot: Speichern von Einstellungen auf der Konfigurationsseite

Wichtig

Der APP_KEY-Wert wird hier praktischerweise verwendet. Für Produktionsszenarien sollte er speziell für Ihre Bereitstellung mit php artisan key:generate --show in der Befehlszeile generiert werden.

3 – Bereitstellen von Beispielcode

In diesem Schritt konfigurieren Sie die GitHub-Bereitstellung mithilfe von GitHub Actions. Es ist nur eine der vielen Möglichkeiten, um App Service bereitzustellen, aber auch eine hervorragende Möglichkeit, eine kontinuierliche Integration in Ihren Bereitstellungsprozess zu haben. Standardmäßig startet jede git push in Ihrem GitHub-Repository die Build- und Bereitstellungsaktion. Sie nehmen einige Änderungen an Ihrer Codebase mit Visual Studio Code direkt im Browser vor und lassen dann GitHub Actions automatisch für Sie bereitstellen.

Schritt 1: In einem neuen Browserfenster:

  1. Melden Sie sich bei Ihrem GitHub-Konto an.
  2. Navigiere zu https://github.com/Azure-Samples/laravel-tasks.
  3. Wählen Sie Fork aus.
  4. Wählen Sie Fork erstellen aus.

Screenshot: wie eine Verzweigung des Beispiel-GitHub-Repositorys erstellt wird.

Schritt 2: Öffnen Sie auf der GitHub-Seite Visual Studio Code im Browser, indem Sie die .-Taste drücken.

Screenshot: wie die Visual Studio Code-Browseroberfläche in GitHub geöffnet wird.

Schritt 3: Öffnen Sie im Browser in Visual Studio Code config/database.php im Explorer. Nehmen Sie im Abschnitt mysql die folgenden Änderungen vor:

  1. Ersetzen Sie DB_HOST durch AZURE_MYSQL_HOST.
  2. Ersetzen Sie DB_DATABASE durch AZURE_MYSQL_DBNAME.
  3. Ersetzen Sie DB_USERNAME durch AZURE_MYSQL_USERNAME.
  4. Ersetzen Sie DB_PASSWORD durch AZURE_MYSQL_PASSWORD.
  5. Ersetzen Sie DB_PORT durch AZURE_MYSQL_PORT. Denken Sie daran, dass diese AZURE_MYSQL_-Einstellungen vom Erstellungsassistenten für Sie erstellt wurden.

Screenshot von Visual Studio Code im Browser mit einer geöffneten Datei mit angepassten MySQL-Variablen.

Schritt 4: Scrollen Sie in config/database.php zum Abschnitt cache (Redis), und nehmen Sie die folgenden Änderungen vor:

  1. Ersetzen Sie REDIS_HOST durch AZURE_REDIS_HOST.
  2. Ersetzen Sie REDIS_PASSWORD durch AZURE_REDIS_PASSWORD.
  3. Ersetzen Sie REDIS_PORT durch AZURE_REDIS_PORT.
  4. Ersetzen Sie REDIS_CACHE_DB durch AZURE_REDIS_DATABASE.
  5. Fügen Sie im selben Abschnitt eine Zeile mit 'scheme' => 'tls', hinzu. Diese Konfiguration weist Laravel an, die Verschlüsselung zu verwenden, um eine Verbindung mit Redis herzustellen. Denken Sie daran, dass diese AZURE_REDIS_-Einstellungen vom Erstellungsassistenten für Sie erstellt wurden.

Screenshot von Visual Studio Code im Browser mit einer geöffneten Datei mit angepassten Redis-Variablen.

Schritt 5:

  1. Wählen Sie die Quellsteuerungserweiterung aus.
  2. Geben Sie im Textfeld eine Commitnachricht ein, z. B. Configure DB & Redis variables.
  3. Wählen Sie dann Commit und Push aus.

Screenshot der Änderungen, die committet und an GitHub gepusht werden.

Schritt 6: Wählen Sie, wenn Sie wieder auf der App Service-Seite sind, im linken Menü Bereitstellungscenter aus.

Screenshot: wie das Bereitstellungscenter in App Service geöffnet wird.

Schritt 7: Auf der Seite „Bereitstellungscenter“:

  1. Wählen Sie in Quelle die Option GitHub aus. Standardmäßig wird GitHub Actions als Buildanbieter ausgewählt.
  2. Melden Sie sich bei Ihrem GitHub-Konto an und folgen Sie der Aufforderung, Azure zu autorisieren.
  3. Wählen Sie in Organisation Ihr Konto aus.
  4. Wählen Sie im Repository die Option Laravel-Aufgabe aus.
  5. Wählen Sie in Branch die Option Hauptbereich aus.
  6. Wählen Sie im oberen Menü Speichern aus. App Service committet eine Workflowdatei in das ausgewählte GitHub-Repository im .github/workflows-Verzeichnis.

Screenshot: wie CI/CD mit GitHub Actions konfiguriert wird.

Schritt 8: Auf der Seite „Bereitstellungscenter“:

  1. Wählen Sie Protokolle aus. Eine Bereitstellungsausführung wird bereits gestartet.
  2. Wählen Sie im Protokollelement für die Bereitstellungsausführung die Option Build/Deploy Logs aus.

Screenshot: wie das Bereitstellungscenter in App Service geöffnet wird.

Schritt 9: Sie werden zu Ihrem GitHub-Repository weitergeleitet und sehen, dass die GitHub-Aktion ausgeführt wird. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen. Warten Sie, bis die GitHub-Ausführung den Status Abgeschlossen anzeigt. Das Upgrade dauert ca. 15 Minuten.

Screenshot: Aktive GitHub-Ausführung

4 – Generieren des Datenbankschemas

Der Erstellungs-Assistent legt den MySQL-Datenbankserver hinter einen privaten Endpunkt, sodass er nur über das virtuelle Netzwerk zugänglich ist. Da die App Service-App bereits mit dem virtuellen Netzwerk integriert ist, ist die einfachste Möglichkeit, Datenbankmigrationen mit Ihrer Datenbank direkt im App Service-Container auszuführen.

Schritt 1: Wählen Sie auf der App Service-Seite im Menü auf der linken Seite SSH aus.

Screenshot: wie sie die SSH-Shell für Ihre App über das Azure-Portal öffnen.

Schritt 2: Im SSH-Terminal:

  1. Führen Sie cd /home/site/wwwroot aus. Hier finden Sie alle Ihre bereitgestellten Dateien.
  2. php artisan migrate --force ausführen. Wenn dies erfolgreich ist, stellt App Service erfolgreich eine Verbindung mit der MySQL-Datenbank her. Nur Änderungen an Dateien in /home können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von /home bleiben nicht erhalten.

Screenshot: die Befehle, die in der SSH-Shell ausgeführt werden, und ihre Ausgaben.

5 – Ändern des Sitestammverzeichnisses

Der Lebenszyklus der Laravel-Anwendung beginnt im öffentlichen Verzeichnis anstatt im Stammverzeichnis der Anwendung. Der Standard-PHP-Container für App Service verwendet Nginx, das im Stammverzeichnis der Anwendung beginnt. Um den Websitestamm zu ändern, müssen Sie die Nginx-Konfigurationsdatei im PHP-Container (/etc/nginx/sites-available/default) ändern. Praktischerweise enthält das Beispiel-Repository eine benutzerdefinierte Konfigurationsdatei namens Standard. Wie zuvor erwähnt, sollten Sie diese Datei nicht mithilfe der SSH-Shell ersetzen, da die Änderung außerhalb von /home liegt und nach einem App-Neustart verloren gehen.

Schritt 1:

  1. Klicken Sie im linken Menü auf Konfiguration.
  2. Wählen Sie die Registerkarte Allgemeine Einstellungen aus.

Screenshot: wie die Registerkarte „Allgemeine Einstellungen“ auf der Konfigurationsseite von App Service geöffnet wird.

Schritt 2: Auf der Registerkarte „Allgemeine Einstellungen“:

  1. Geben Sie im Feld Startbefehl den folgenden Befehl ein: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. Wählen Sie Speichern. Der Befehl ersetzt die Nginx-Konfigurationsdatei im PHP-Container und startet Nginx neu. Diese Konfiguration stellt sicher, dass dieselbe Änderung jedes Mal am Container vorgenommen wird, wenn er gestartet wird.

Screenshot: wie ein Startupbefehl in App Service erstellt wird.

6 – Navigieren zur App

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im Menü auf der linken Seite die Option Übersicht aus.
  2. Wählen Sie die URL Ihrer App aus. Sie können auch direkt zu https://<app-name>.azurewebsites.net navigieren.

Screenshot: wie ein App Service vom Azure-Portal gestartet wird.

Schritt 2: Fügen Sie der Liste einige Aufgaben hinzu. Glückwunsch! Sie führen eine sichere datengesteuerte PHP-App in Azure App Service aus.

Screenshot: die Laravel-App, die in App Service ausgeführt wird.

Tipp

Die Beispielanwendung implementiert das Cache-Aside-Muster. Wenn Sie die Seite nach Datenänderungen erneut laden, wird die Antwortzeit auf der Webseite als viel schneller angezeigt, da die Daten aus dem Cache und nicht aus der Datenbank geladen werden.

7. Streamen von Diagnoseprotokollen

Azure App Service erfasst alle Nachrichten, die an der Konsole protokolliert werden, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Die Beispiel-App gibt Konsolenprotokollmeldungen an jedem ihrer Endpunkte aus, um diese Funktion zu veranschaulichen. Standardmäßig wird die Protokollierungsfunktion von Laravel (z. B. Log::info()) in eine lokale Datei ausgegeben. Ihre frühere LOG_CHANNEL App-Einstellung ermöglicht den Zugriff auf Protokolleinträge aus dem App Service-Protokolldatenstrom.

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im linken Menü App Service-Protokolle aus.
  2. Wählen Sie unter Anwendungsprotokollierung die Option Dateisystem aus.

Screenshot: wie native Protokolle in App Service im Azure-Portal aktiviert werden.

Schritt 2: Wählen Sie im Menü auf der linken Seite die Option Protokollstream aus. Sie sehen die Protokolle für Ihre App, einschließlich Plattformprotokolle und Protokolle innerhalb des Containers.

Screenshot: wie der Protokollstream im Azure-Portal angezeigt wird.

Bereinigen von Ressourcen

Wenn Sie fertig sind, können Sie alle Ressourcen aus Ihrem Azure-Abonnement löschen, indem Sie die Ressourcengruppe löschen.

Schritt 1: In der Suchleiste oben im Azure-Portal:

  1. Geben Sie den Ressourcengruppennamen ein.
  2. Wählen Sie die Ressourcengruppe aus.

Screenshot: Suchen nach einer Ressourcengruppe und Navigieren zu einer Ressourcengruppe im Azure-Portal

Schritt 2: Wählen Sie auf der Seite „Ressourcengruppe“ die Option Ressourcengruppe löschen aus.

Screenshot: Position der Schaltfläche „Ressourcengruppe löschen“ im Azure-Portal.

Schritt 3:

  1. Geben Sie den Namen der Ressourcengruppe ein, um Ihre Löschung zu bestätigen.
  2. Klicken Sie auf Löschen.

Screenshot: Bestätigungsdialogfeld für das Löschen einer Ressourcengruppe im Azure-Portal :

Häufig gestellte Fragen

Wie viel kostet diese Einrichtung?

Die Preise für die Erstellungsressourcen sind wie folgt:

  • Der App Service-Plan wird im Tarif Basic erstellt und kann hoch- oder herunterskaliert werden. Informationen dazu finden Sie unter App Service – Preise.
  • Der flexible MySQL-Server wird auf B1ms-Ebene erstellt und kann nach oben oder unten skaliert werden. Mit einem kostenlosen Azure-Konto ist die B1ms-Stufe für 12 Monate bis zu den monatlichen Grenzwerten kostenlos. Azure Database for MySQL: Preise
  • Die Azure Cache for Redis wird in der Ebene Basic mit der minimalen Cachegröße erstellt. Diese Ebene ist mit geringen Kosten verbunden. Sie können sie auf leistungsstärkere Ebenen für eine höhere Verfügbarkeit, für Clustering und andere Features hochskalieren. Siehe Azure Cache for Redis: Preise.
  • Das virtuelle Netzwerk hat keine Gebühr, es sei denn, Sie konfigurieren zusätzliche Funktionen, z. B. Peering. Siehe Azure Virtual Network Preise.
  • Die private DNS-Zone verursacht eine kleine Gebühr. Siehe Azure DNS-Preise.

Wie kann ich eine Verbindung mit der MySQL-Datenbank herstellen, die hinter dem virtuellen Netzwerk mit anderen Tools gesichert ist?

  • Für den einfachen Zugriff aus einem Befehlszeilentool können Sie mysql über das SSH-Terminal der App ausführen.
  • Um eine Verbindung mit einem Desktoptool wie MySQL Workbench herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Es könnte beispielsweise eine Azure-VM sein, die mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, das über eine Standort-zu-Standort-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verfügt.
  • Sie können Azure Cloud Shell auch in das virtuelle Netzwerk integrieren.

Wie funktioniert die lokale App-Entwicklung mit GitHub Actions?

Nehmen Sie die automatisch generierte Workflowdatei von App Service als Beispiel; jede git push startet eine neue Build- und Bereitstellungsausführung. Aus einem lokalen Klon des GitHub-Repositorys können Sie die gewünschten Updates zu GitHub pushen. Beispiel:

git add .
git commit -m "<some-message>"
git push origin main

Warum ist die GitHub Actions-Bereitstellung so langsam?

Die automatisch generierte Workflowdatei aus App Service definiert die Zwei-Aufträge-Ausführung „Erstellen, dann bereitstellen“. Da jeder Auftrag in einer eigenen sauberen Umgebung ausgeführt wird, stellt die Workflowdatei sicher, dass der deploy-Auftrag Zugriff auf die Dateien aus dem build-Auftrag hat:

  • Laden Sie am Ende des build-Auftrags Dateien als Artefakte hoch.
  • Laden Sie am Anfang des deploy-Auftrags die Artefakte herunter.

Die meiste Zeit wird vom Zweiauftragsprozess darauf verwendet, Artefakte hoch- und herunterzuladen. Wenn Sie möchten, können Sie die Workflowdatei vereinfachen, indem Sie die beiden Aufträge in einen kombinieren, wodurch die Notwendigkeit für das Hochladen und Herunterladen entfernt wird.

Nächste Schritte

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre App mit einer benutzerdefinierten Domäne und einem Zertifikat schützen.

Oder sehen Sie sich weitere Ressourcen an: