Freigeben über


Tutorial: Erstellen einer PHP (Laravel) und Azure Database for MySQL – Flexible Server-Anwendung auf Azure App Service

Azure App Service bietet einen hochgradig skalierbaren Webhostingdienst mit Self-Patching unter dem Linux-Betriebssystem. 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). 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

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer sicheren standardmäßigen PHP- und MySQL-App in Azure
  • Konfigurieren von Verbindungsschlüsseln in MySQL mithilfe von App-Einstellungen
  • Bereitstellen von Anwendungscode mithilfe von GitHub Actions
  • Aktualisieren und erneutes Bereitstellen der App
  • Sichere Durchführung von Datenbankmigrationen
  • Streamen von Diagnoseprotokollen aus Azure
  • Verwalten der App im Azure-Portal

Voraussetzungen

Beispielanwendung

Führen Sie für dieses Tutorial das Klonen oder Herunterladen der Beispielanwendung 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_USERNAME undDB_PASSWORD) mithilfe von Einstellungen in Ihrer lokalen Azure Database for MySQL flexible Serverdatenbank. Sie benötigen eine lokale Azure Database for MySQL für die flexible Serverinstanz, 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 Azure Database for MySQL für flexible Serverressourcen

In diesem Schritt erstellen Sie die Azure-Ressourcen. Mit den Schritten in diesem Tutorial erstellen Sie eine flexible Serverkonfiguration für App Service und Azure Database for MySQL, 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.

Anweisungen Screenshot
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 und Datenbank“ zu finden
Füllen Sie das Formular auf der Seite Web-App + 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.0.

    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.

  5. Beachten Sie den Datenbanknamen, der für Sie generiert wird (<App-Name-Datenbank>). Sie benötigen die Information später.

  6. Klicken Sie auf Überprüfen + erstellen.

Wenn die Überprüfung abgeschlossen ist, wählen Sie Erstellen aus.
Screenshot: Konfigurieren einer neuen App und Datenbank im Assistenten „Web-App und Datenbank“
Die Bereitstellung dauert einige Minuten, bis die Bereitstellung abgeschlossen ist, und erstellt die folgenden Ressourcen:
  • Ressourcengruppe → Der Container für alle erstellten Ressourcen.
  • App Service-Plan → Definiert die Berechnungsressourcen für App Service. Ein Linux-Plan auf der P1v2-Ebene 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.
  • Azure Database for MySQL – Flexible Server → Nur über das virtuelle Netzwerk zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
  • Privates DNS Zone → Aktiviert die DNS-Auflösung des MySQL-Datenbankservers im virtuellen Netzwerk.
Wählen Sie nach Abschluss der Bereitstellung die Schaltfläche Zu Ressource wechseln aus. Sie werden direkt zur App Service App weitergeleitet.
Screenshot: Formular zum Erstellen einer Web-App in Azure

2 – Einrichten der Datenbankkonnektivität

Der Erstellungsassistent generierte App-Einstellungen, die Sie zum Herstellen einer Verbindung mit der Datenbank verwenden können, aber nicht in einem Format, das derzeit für Ihren Code brauchbar ist. In diesem Schritt bearbeiten und aktualisieren Sie App-Einstellungen in das Format, das Ihre App benötigt.

Anweisungen Screenshot
Wählen Sie im linken Menü auf der App Service-Seite Konfiguration aus. Screenshot: Öffnen der Konfigurationsseite in App Service
Klicken Sie auf der Registerkarte Anwendungseinstellungen der Seite Konfiguration bei jeder der folgenden Einstellungen auf Bearbeiten, aktualisieren Sie das Feld Name mit neuen Werten, und klicken Sie auf OK.
Aktueller Name Neuer Name
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Screenshot: Anzeigen der automatisch generierten Verbindungszeichenfolge
Erstellen Sie eine neue MYSQL_ATTR_SSL_CA-Datenbankeinstellung:
  1. Klicken Sie auf Neue Anwendungseinstellung.

  2. Geben sie im Feld Name den Wert MYSQL_ATTR_SSL_CA ein.

  3. Geben Sie im Feld Wert den Wert /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem ein.

    Diese App-Einstellung verweist auf den Pfad des TLS/SSL-Zertifikats, das Sie benötigen, um auf den MySQL-Server zuzugreifen. Es ist praktischerweise im Beispiel-Repository enthalten.

  4. Klicken Sie auf OK.

Screenshot: Erstellen einer App-Einstellung
Erstellen Sie die folgenden zusätzlichen App-Einstellungen, indem Sie die gleichen Schritte durchführen, und klicken Sie dann auf Speichern.
  • APP_DEBUG: Verwenden Sie true als Wert. Dies ist eine Laravel-Debugvariable.

  • APP_KEY: Verwenden Sie base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= als Wert. Dies ist eine Laravel-Verschlüsselungsvariable.

    Wichtig

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

Screenshot: Alle erforderlichen App-Einstellungen auf der Konfigurationsseite

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.

Anweisungen Screenshot
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: Erstellen einer Fork des GitHub-Beispielrepositorys
Öffnen Sie auf der GitHub-Seite Visual Studio Code im Browser, indem Sie die .-Taste drücken. Screenshot: Öffnen der Visual Studio Code-Browseroberfläche in GitHub
Öffnen Sie in Visual Studio Code im Browser config/database.php im Explorer. Sehen Sie, dass in der mysql-Verbindung die App-Einstellungen, die Sie zuvor für die MySQL-Verbindung erstellt haben, bereits verwendet werden (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). Screenshot: Visual Studio Code im Browser und eine geöffnete Datei
Wählen Sie, wenn Sie wieder auf der App Service-Seite sind, im linken Menü Bereitstellungscenter aus. Screenshot: Öffnen des Bereitstellungscenters in App Service
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 Repositorydie Option Laravel-Aufgaben 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: Konfigurieren von CI/CD mit GitHub Actions
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.

    Sie werden an Ihr GitHub-Repository weitergeleitet und sehen, dass die GitHub-Aktion ausgeführt wird. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen.

Screenshot: Öffnen von Bereitstellungsprotokollen im Bereitstellungscenter
Um Änderungen an Ihrem Code vorzunehmen, gehen Sie im Browser zu Visual Studio Code:
  1. Wählen Sie die Quellsteuerungserweiterung aus.

  2. Wählen Sie neben der geänderten database.php die Option + aus, um Ihre Änderungen zu stufen.

  3. Geben Sie im Textfeld eine Commitnachricht ein, z.B. add certificate.

  4. Aktivieren Sie das Häkchen zum Commit und Push an GitHub.

Wenn Sie zur Seite „Bereitstellungscenter“ zurückkehren, wird ein neuer Protokolleintrag angezeigt, da eine andere Ausführung gestartet wird. Warten Sie, bis die Ausführung abgeschlossen ist. Das Upgrade dauert ca. 15 Minuten.

Tipp

Die GitHub-Aktion wird durch die Datei im GitHub-Repository in .github/workflow definiert. Sie können es schneller machen, indem Sie die Datei anpassen.

Screenshot: Committen Ihrer Änderungen in der Visual Studio Code-Browseroberfläche

4 – Generieren des Datenbankschemas

Der Erstellungsassistent stellt die flexible Serverinstanz von Azure Database for MySQL hinter einen privaten Endpunkt, sodass sie 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.

Anweisungen Screenshot
Auf der App Service-Seite:
  1. Klicken Sie im linken Menü auf SSH.

  2. Klicken Sie auf Starten.

Eine SSH-Sitzung mit Ihrem App Service-Container wird im Browser geöffnet. Wenn Sie möchten, können Sie stattdessen direkt zu https://<app-name>.scm.azurewebsites.net/webssh/host navigieren.
Screenshot: Öffnen der SSH-Shell für Ihre App über das Azure-Portal
Im SSH-Terminal:
  1. CD im Stamm des Anwendungscodes:

    cd /home/site/wwwroot
    
  2. Führen Sie Datenbankmigrationen aus Ihrem Anwendungsstamm aus.

    php artisan migrate --force
    

    Hinweis

    Nur Änderungen an Dateien in /home können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von /home werden nicht beibehalten.

Screenshot: 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 8.0-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 8.0-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 Ihre Änderungen nach einem App-Neustart verloren gehen.

Anweisungen Screenshot
Auf der App Service-Seite:
  1. Klicken Sie im linken Menü auf Konfiguration.

  2. Wählen Sie die Registerkarte Allgemeine Einstellungen aus.

Screenshot: Öffnen der Registerkarte „Allgemeine Einstellungen“ der Seite „Konfiguration“in App Service
In 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.

    Er ersetzt die Nginx-Konfigurationsdatei im PHP 8.0-Container und startet Nginx neu. Diese Konfiguration stellt sicher, dass diese Änderung jedes Mal an den Container vorgenommen wird, wenn sie gestartet wird.

  2. Wählen Sie Speichern.

Screenshot: Konfigurieren eines Startupbefehls in App Service

6 – Navigieren zur App

Anweisungen Screenshot
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: Starten von App Service über das Azure-Portal
Glückwunsch! Sie führen eine datengesteuerte PHP-App in Azure App Service aus. Screenshot: Laravel-App, die in App Service ausgeführt wird

7. Streamen von Diagnoseprotokollen

Anweisungen Screenshot
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: Aktivieren von nativen Protokollen in App Service im Azure-Portal
Klicken Sie im linken Menü auf Protokollstream. Daraufhin werden die Protokolle für Ihre App angezeigt, einschließlich der Plattformprotokolle und Protokolle innerhalb des Containers. Screenshot: Anzeigen des Protokollstreams im Azure-Portal

Bereinigen von Ressourcen

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

Anweisungen Screenshot
In der Suchleiste oben im Azure-Portal:
  1. Geben Sie den Ressourcengruppennamen ein.

  2. Wählen Sie die Ressourcengruppe aus.

Screenshot: Suchen nach und Navigieren zu einer Ressourcengruppe im Azure-Portal
Wählen Sie auf der Seite „Ressourcengruppe“ die Option Ressourcengruppe löschen aus. Screenshot: Position der Schaltfläche „Ressourcengruppe löschen“ im Azure-Portal
  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 auf Premium V2-Ebene erstellt und kann nach oben oder unten skaliert werden. Informationen dazu finden Sie unter App Service – Preise.
  • Die flexible Serverinstanz von Azure Database for MySQL wird in der 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. Siehe Azure Database for MySQL flexible Serverpreise.
  • 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 einer flexiblen Azure-Serverdatenbank for MySQL herstellen, die hinter einem virtuellen Netzwerk gesichert ist?

Um eine Verbindung mit einer flexiblen Azure-Database for MySQL herzustellen, können Sie verschiedene Methoden basierend auf den Tools und Umgebungen verwenden, die Ihnen zur Verfügung stehen:

  • Zugriff auf das Befehlszeilentool:
    • Verwenden Sie den Befehl mysql über das SSH-Terminal der App für den einfachen Zugriff.
  • Desktoptools (z. B. MySQL Workbench):
    • Verwenden von SSH-Tunneling mit der Azure CLI:
      • Erstellen Sie mithilfe der Azure CLI eine SSH-Sitzung für die Web-App.
      • Verwenden Sie die SSH-Sitzung, um den Datenverkehr zu MySQL zu tunneln.
    • Verwenden von Site-to-Site-VPN oder Azure VM:
      • Ihr Computer muss Teil des virtuellen Netzwerks sein.
      • Mögliche Verwendung von:
        • Eine Azure VM, die mit einem der Subnetze verknüpft ist.
        • Ein Rechner in einem lokalen Netzwerk, der über eine Site-to-Site-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verbunden ist.
  • Azure Cloud Shell-Integration:

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.

Zusammenfassung

In diesem Tutorial haben Sie Folgendes gelernt:

  • Erstellen einer sicheren standardmäßigen PHP- und Azure-Database for MySQL flexibler Server-App in Azure
  • Konfigurieren von Verbindungsgeheimnissen mit Azure Database for MySQL flexiblen Server mithilfe von App-Einstellungen
  • Bereitstellen von Anwendungscode mithilfe von GitHub Actions
  • Aktualisieren und erneutes Bereitstellen der App
  • Sichere Durchführung von Datenbankmigrationen
  • Streamen von Diagnoseprotokollen aus Azure
  • Verwalten der App im Azure-Portal