Tutorial: Erstellen einer PHP- und MySQL-App in AzureTutorial: Build a PHP and MySQL app in Azure

Hinweis

In diesem Artikel wird eine App in App Service unter Windows bereitgestellt.This article deploys an app to App Service on Windows. Informationen zur Bereitstellung in App Service unter Linux finden Sie unter Erstellen einer PHP- und MySQL-App in Azure App Service unter Linux.To deploy to App Service on Linux, see Build a PHP and MySQL app in Azure App Service on Linux.

Von Azure App Service wird ein hochgradig skalierbarer Webhostingdienst mit Self-Patching bereitgestellt.Azure App Service provides a highly scalable, self-patching web hosting service. In diesem Tutorial wird gezeigt, wie Sie eine PHP-App in Azure erstellen und mit einer MySQL-Datenbank verbinden.This tutorial shows how to create a PHP app in Azure and connect it to a MySQL database. Wenn Sie fertig sind, verfügen Sie über eine Laravel-App, die in Azure App Service ausgeführt wird.When you're finished, you'll have a Laravel app running on Azure App Service.

In Azure App Service ausgeführte PHP-App

In diesem Tutorial lernen Sie Folgendes:In this tutorial, you learn how to:

  • Erstellen einer MySQL-Datenbank in AzureCreate a MySQL database in Azure
  • Verbinden einer PHP-App mit MySQLConnect a PHP app to MySQL
  • Bereitstellen der Anwendung in AzureDeploy the app to Azure
  • Aktualisieren des Datenmodells und erneutes Bereitstellen der AppUpdate the data model and redeploy the app
  • Streamen von Diagnoseprotokollen aus AzureStream diagnostic logs from Azure
  • Verwalten der App im Azure-PortalManage the app in the Azure portal

Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

Für dieses Tutorial benötigen Sie Folgendes:To complete this tutorial:

Vorbereiten der lokalen MySQL-InstanzPrepare local MySQL

In diesem Schritt erstellen Sie eine Datenbank auf einem lokalen MySQL-Server für die Verwendung in diesem Tutorial.In this step, you create a database in your local MySQL server for your use in this tutorial.

Verbinden mit dem lokalen MySQL-ServerConnect to local MySQL server

Stellen Sie in einem Terminalfenster eine Verbindung mit Ihrem lokalen MySQL-Server her.In a terminal window, connect to your local MySQL server. Sie können dieses Terminalfenster verwenden, um alle Befehle dieses Tutorials auszuführen.You can use this terminal window to run all the commands in this tutorial.

mysql -u root -p

Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das Kennwort für das root-Konto ein.If you're prompted for a password, enter the password for the root account. Wenn Sie das Kennwort für Ihr Root-Konto vergessen haben, lesen Sie unter MySQL: How to Reset the Root Password (MySQL: Zurücksetzen des Root-Kennworts) nach.If you don't remember your root account password, see MySQL: How to Reset the Root Password.

Wenn der Befehl erfolgreich ausgeführt wurde, wird der MySQL-Server ausgeführt.If your command runs successfully, then your MySQL server is running. Stellen Sie andernfalls anhand der Nachinstallationsschritte für MySQL sicher, dass Ihr lokaler MySQL-Server gestartet wurde.If not, make sure that your local MySQL server is started by following the MySQL post-installation steps.

Lokales Erstellen einer DatenbankCreate a database locally

Erstellen Sie an der Eingabeaufforderung mysql eine Datenbank.At the mysql prompt, create a database.

CREATE DATABASE sampledb;

Beenden Sie die Serververbindung durch Eingabe von quit.Exit your server connection by typing quit.

quit

Lokales Erstellen einer PHP-AppCreate a PHP app locally

In diesem Schritt rufen Sie eine Laravel-Beispielanwendung ab, konfigurieren ihre Datenbankverbindung und führen sie lokal aus.In this step, you get a Laravel sample application, configure its database connection, and run it locally.

Klonen des BeispielsClone the sample

Wechseln Sie im Terminalfenster mit cd in ein Arbeitsverzeichnis.In the terminal window, cd to a working directory.

Führen Sie den folgenden Befehl aus, um das Beispielrepository zu klonen.Run the following command to clone the sample repository.

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

Wechseln Sie mit cd in das geklonte Verzeichnis.cd to your cloned directory. Installieren Sie die erforderlichen Pakete.Install the required packages.

cd laravel-tasks
composer install

Konfigurieren der MySQL-VerbindungConfigure MySQL connection

Erstellen Sie im Repositorystamm eine Textdatei mit dem Namen .env.In the repository root, create a text file named .env. Kopieren Sie die folgenden Variablen in die Datei .env.Copy the following variables into the .env file. Ersetzen Sie den Platzhalter <root_password> durch das Kennwort des MySQL-Root-Benutzers.Replace the <root_password> placeholder with the MySQL root user's password.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>

Informationen dazu, wie Laravel die ENV-Datei verwendet, finden Sie unter Laravel Environment Configuration (Konfigurieren der Laravel-Umgebung).For information on how Laravel uses the .env file, see Laravel Environment Configuration.

Lokales Ausführen des BeispielsRun the sample locally

Führen Sie Laravel-Datenbankmigrationen durch, um die von der Anwendung benötigten Tabellen zu erstellen.Run Laravel database migrations to create the tables the application needs. Im Verzeichnis database/migrations im Git-Repository können Sie sehen, welche Tabellen bei den Migrationen erstellt werden.To see which tables are created in the migrations, look in the database/migrations directory in the Git repository.

php artisan migrate

Generieren Sie einen neuen Anwendungsschlüssel für Laravel.Generate a new Laravel application key.

php artisan key:generate

Führen Sie die Anwendung aus.Run the application.

php artisan serve

Navigieren Sie in einem Browser zu http://localhost:8000.Navigate to http://localhost:8000 in a browser. Fügen Sie auf der Seite einige Aufgaben hinzu.Add a few tasks in the page.

Erfolgreiche Verbindung zwischen PHP und MySQL

Um den PHP-Server zu beenden, geben Sie Ctrl + C im Terminal ein.To stop the PHP server, type Ctrl + C in the terminal.

Verwenden von Azure Cloud ShellUse Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Starten von Azure Cloud Shell:To start Azure Cloud Shell:

OptionOption Beispiel/LinkExample/Link
Klicken Sie in der rechten oberen Ecke eines Codeblocks auf Ausprobieren.Select Try It in the upper-right corner of a code block. Durch die Auswahl von Ausprobieren wird der Code nicht automatisch in Cloud Shell kopiert.Selecting Try It doesn't automatically copy the code to Cloud Shell. Beispiel für „Testen Sie es.“ für Azure Cloud Shell
Rufen Sie https://shell.azure.com auf, oder wählen Sie die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. Starten von Cloud Shell in einem neuen FensterLaunch Cloud Shell in a new window
Wählen Sie im Azure-Portal oben rechts in der Menüleiste die Schaltfläche Cloud Shell.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Cloud Shell-Schaltfläche im Azure-Portal

Ausführen des Codes in diesem Artikel in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Starten Sie Cloud Shell.Start Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock, um den Code zu kopieren.Select the Copy button on a code block to copy the code.

  3. Fügen Sie den Code mit STRG+UMSCHALT+V unter Windows und Linux oder Cmd+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Drücken Sie die EINGABETASTE, um den Code auszuführen.Select Enter to run the code.

Erstellen von MySQL in AzureCreate MySQL in Azure

In diesem Schritt erstellen Sie eine MySQL-Datenbank in Azure Database for MySQL.In this step, you create a MySQL database in Azure Database for MySQL. Später konfigurieren Sie die PHP-Anwendung für eine Verbindung mit dieser Datenbank.Later, you configure the PHP application to connect to this database.

Erstellen einer RessourcengruppeCreate a resource group

Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen wie Web-Apps, Datenbanken und Speicherkonten bereitgestellt und verwaltet werden.A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. Sie können z.B. die gesamte Ressourcengruppe später in einem einfachen Schritt löschen.For example, you can choose to delete the entire resource group in one simple step later.

Erstellen Sie in Cloud Shell mit dem Befehl az group create eine Ressourcengruppe.In the Cloud Shell, create a resource group with the az group create command. Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort Europa, Westen.The following example creates a resource group named myResourceGroup in the West Europe location. Wenn Sie alle unterstützten Standorte für App Service im Free-Tarif anzeigen möchten, führen Sie den Befehl az appservice list-locations --sku FREE aus.To see all supported locations for App Service in Free tier, run the az appservice list-locations --sku FREE command.

az group create --name myResourceGroup --location "West Europe"

Im Allgemeinen erstellen Sie Ressourcengruppen und Ressourcen in einer Region in Ihrer Nähe.You generally create your resource group and the resources in a region near you.

Nach Ausführung dieses Befehls werden die Ressourcengruppeneigenschaften in einer JSON-Ausgabe angezeigt.When the command finishes, a JSON output shows you the resource group properties.

Erstellen eines MySQL-ServersCreate a MySQL server

Erstellen Sie in Cloud Shell mit dem Befehl az mysql server create einen Server in Azure Database for MySQL.In the Cloud Shell, create a server in Azure Database for MySQL with the az mysql server create command.

Ersetzen Sie im folgenden Befehl den Platzhalter <mysql_server_name> durch einen eindeutigen Servernamen, den Platzhalter <admin_user> durch einen Benutzernamen und den Platzhalter <admin_password> durch ein Kennwort.In the following command, substitute a unique server name for the <mysql_server_name> placeholder, a user name for the <admin_user>, and a password for the <admin_password> placeholder. Der Servername dient als Teil Ihres MySQL-Endpunkts (https://<mysql_server_name>.mysql.database.azure.com). Daher muss der Name auf allen Servern in Azure eindeutig sein.The server name is used as part of your MySQL endpoint (https://<mysql_server_name>.mysql.database.azure.com), so the name needs to be unique across all servers in Azure.

az mysql server create --resource-group myResourceGroup --name <mysql_server_name> --location "West Europe" --admin-user <admin_user> --admin-password <admin_password> --sku-name B_Gen5_1

Hinweis

Da mehrere Anmeldeinformationen in diesem Tutorial berücksichtigt werden müssen, sollten für --admin-user und --admin-password Platzhalterwerte festgelegt werden, um Verwirrung zu vermeiden.Since there are several credentials to think about in this tutorial, to avoid confusion, --admin-user and --admin-password are set to dummy values. Befolgen Sie in einer Produktionsumgebung die bewährten Sicherheitsmethoden, wenn Sie einen Benutzernamen und ein Kennwort für Ihren MySQL-Server in Azure auswählen.In a production environment, follow security best practices when choosing a good username and password for your MySQL server in Azure.

Nach dem Erstellen des MySQL-Servers zeigt die Azure-Befehlszeilenschnittstelle Informationen wie im folgenden Beispiel an:When the MySQL server is created, the Azure CLI shows information similar to the following example:

{
  "location": "westeurope",
  "name": "<mysql_server_name>",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "additionalProperties": {},
    "capacity": 1,
    "family": "Gen5",
    "name": "B_Gen5_1",
    "size": null,
    "tier": "GeneralPurpose"
  },
  "sslEnforcement": "Enabled",
  ...   +  
  -  < Output has been truncated for readability >
}

Konfigurieren der ServerfirewallConfigure server firewall

Erstellen Sie in Cloud Shell mit dem Befehl az mysql server firewall-rule create eine Firewallregel für Ihren MySQL-Server, um Clientverbindungen zuzulassen.In the Cloud Shell, create a firewall rule for your MySQL server to allow client connections by using the az mysql server firewall-rule create command. Wenn sowohl Start- als auch End-IP auf 0.0.0.0 festgelegt ist, wird die Firewall nur für andere Azure-Ressourcen geöffnet.When both starting IP and end IP are set to 0.0.0.0, the firewall is only opened for other Azure resources.

az mysql server firewall-rule create --name allAzureIPs --server <mysql_server_name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

Tipp

Sie können Ihre Firewallregel auch noch restriktiver gestalten und nur die ausgehenden IP-Adressen verwenden, die Ihre App verwendet.You can be even more restrictive in your firewall rule by using only the outbound IP addresses your app uses.

Führen Sie den Befehl in Cloud Shell erneut aus, um den Zugriff vom lokalen Computer zuzulassen. Ersetzen Sie dabei <your_ip_address> durch Ihre lokale IPv4-IP-Adresse.In the Cloud Shell, run the command again to allow access from your local computer by replacing <your_ip_address> with your local IPv4 IP address.

az mysql server firewall-rule create --name AllowLocalClient --server <mysql_server_name> --resource-group myResourceGroup --start-ip-address=<your_ip_address> --end-ip-address=<your_ip_address>

Lokales Verbinden mit dem MySQL-ProduktionsserverConnect to production MySQL server locally

Stellen Sie im lokalen Terminalfenster eine Verbindung mit dem MySQL-Server in Azure her.In the local terminal window, connect to the MySQL server in Azure. Verwenden Sie den Wert, den Sie zuvor für <mysql_server_name> angegeben haben.Use the value you specified previously for <mysql_server_name>. Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, verwenden Sie das Kennwort, das Sie bei der Datenbankerstellung in Azure angegeben haben.When prompted for a password, use the password you specified when you created the database in Azure.

mysql -u <admin_user>@<mysql_server_name> -h <mysql_server_name>.mysql.database.azure.com -P 3306 -p

Erstellen einer ProduktionsdatenbankCreate a production database

Erstellen Sie an der Eingabeaufforderung mysql eine Datenbank.At the mysql prompt, create a database.

CREATE DATABASE sampledb;

Erstellen eines Benutzers mit BerechtigungenCreate a user with permissions

Erstellen Sie einen Datenbankbenutzer mit dem Namen phpappuser, und weisen Sie ihm alle Berechtigungen in der Datenbank sampledb zu.Create a database user called phpappuser and give it all privileges in the sampledb database. Verwenden Sie zur Vereinfachung des Tutorials erneut MySQLAzure2017 als Kennwort.Again, for simplicity of the tutorial, use MySQLAzure2017 as the password.

CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; 
GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';

Beenden Sie die Serververbindung durch Eingabe von quit.Exit the server connection by typing quit.

quit

Verbinden der App mit Azure MySQLConnect app to Azure MySQL

In diesem Schritt verbinden Sie die PHP-Anwendung mit der MySQL-Datenbank, die Sie in Azure Database for MySQL erstellt haben.In this step, you connect the PHP application to the MySQL database you created in Azure Database for MySQL.

Konfigurieren der DatenbankverbindungConfigure the database connection

Erstellen Sie im Stammverzeichnis des Repositorys eine Datei .env.production, und kopieren Sie die folgenden Variablen in die Datei.In the repository root, create an .env.production file and copy the following variables into it. Ersetzen Sie den Platzhalter <mysql_server_name> sowohl in DB_HOST als auch in DB_USERNAME.Replace the placeholder <mysql_server_name> in both DB_HOST and DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=<mysql_server_name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql_server_name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Speichern Sie die Änderungen.Save the changes.

Tipp

Um Ihre MySQL-Verbindungsinformationen zu schützen, ist diese Datei bereits aus dem Git-Repository ausgeschlossen (siehe .gitignore im Repositorystamm).To secure your MySQL connection information, this file is already excluded from the Git repository (See .gitignore in the repository root). Später erfahren Sie, wie Sie die Umgebungsvariablen in App Service so konfigurieren, dass eine Verbindung mit Ihrer Datenbank in Azure Database for MySQL hergestellt wird.Later, you learn how to configure environment variables in App Service to connect to your database in Azure Database for MySQL. Bei Umgebungsvariablen benötigen Sie die ENV-Datei in App Service nicht.With environment variables, you don't need the .env file in App Service.

Konfigurieren des SSL-ZertifikatsConfigure SSL certificate

Standardmäßig erzwingt Azure-Datenbank für MySQL SSL-Verbindungen von Clients.By default, Azure Database for MySQL enforces SSL connections from clients. Zum Herstellen einer Verbindung mit Ihrer MySQL-Datenbank in Azure müssen Sie das PEM-Zertifikat verwenden, das von Azure Database for MySQL bereitgestellt wird.To connect to your MySQL database in Azure, you must use the .pem certificate supplied by Azure Database for MySQL.

Öffnen Sie config/database.php, und fügen Sie connections.mysql die Parameter sslmode und options hinzu, wie im folgenden Code gezeigt.Open config/database.php and add the sslmode and options parameters to connections.mysql, as shown in the following code.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem', 
    ] : []
],

Das Zertifikat BaltimoreCyberTrustRoot.crt.pem wird in diesem Tutorial der Einfachheit halber im Repository bereitgestellt.The certificate BaltimoreCyberTrustRoot.crt.pem is provided in the repository for convenience in this tutorial.

Lokales Testen der AnwendungTest the application locally

Führen Sie die Laravel-Datenbankmigrationen mit der Datei .env.production als Umgebungsdatei aus, um die Tabellen in der MySQL-Datenbank in Azure Database for MySQL zu erstellen.Run Laravel database migrations with .env.production as the environment file to create the tables in your MySQL database in Azure Database for MySQL. Beachten Sie, dass .env.production die Verbindungsinformationen für Ihre MySQL-Datenbank in Azure enthält.Remember that .env.production has the connection information to your MySQL database in Azure.

php artisan migrate --env=production --force

.env.production verfügt noch nicht über einen gültigen Anwendungsschlüssel..env.production doesn't have a valid application key yet. Generieren Sie im Terminal einen neuen.Generate a new one for it in the terminal.

php artisan key:generate --env=production --force

Führen Sie die Beispielanwendung mit .env.production als Umgebungsdatei aus.Run the sample application with .env.production as the environment file.

php artisan serve --env=production

Navigieren Sie zu http://localhost:8000.Navigate to http://localhost:8000. Wenn die Seite ohne Fehler geladen wird, ist die PHP-Anwendung mit der MySQL-Datenbank in Azure verbunden.If the page loads without errors, the PHP application is connecting to the MySQL database in Azure.

Fügen Sie auf der Seite einige Aufgaben hinzu.Add a few tasks in the page.

Erfolgreiche Verbindung zwischen PHP und Azure Database for MySQL

Geben Sie zum Beenden von PHP im Terminal Ctrl + C ein.To stop PHP, type Ctrl + C in the terminal.

Committen Ihrer ÄnderungenCommit your changes

Führen Sie die folgenden Git-Befehle aus, um für Ihre Änderungen einen Commit durchzuführen:Run the following Git commands to commit your changes:

git add .
git commit -m "database.php updates"

Ihre App kann jetzt bereitgestellt werden.Your app is ready to be deployed.

Bereitstellen in AzureDeploy to Azure

In diesem Schritt stellen Sie die mit MySQL verbundene PHP-Anwendung in Azure App Service bereit.In this step, you deploy the MySQL-connected PHP application to Azure App Service.

Konfigurieren eines BereitstellungsbenutzersConfigure a deployment user

Für die Bereitstellung in einer Azure-Web-App über FTP oder ein lokales Git kann ein Bereitstellungsbenutzer verwendet werden.FTP and local Git can deploy to an Azure web app by using a deployment user. Nach der Konfiguration des Bereitstellungsbenutzers können Sie ihn für alle Azure-Bereitstellungen verwenden.Once you configure your deployment user, you can use it for all your Azure deployments. Der Benutzername und das Kennwort für die Bereitstellung auf Kontoebene unterscheiden sich von den Anmeldeinformationen für Ihr Azure-Abonnement.Your account-level deployment username and password are different from your Azure subscription credentials.

Führen Sie zum Konfigurieren des Bereitstellungsbenutzers den Befehl az webapp deployment user set in Azure Cloud Shell aus.To configure the deployment user, run the az webapp deployment user set command in Azure Cloud Shell. Ersetzen Sie „<username>“ und „<password>“ durch Ihren Benutzernamen und Ihr Kennwort für die Bereitstellung.Replace <username> and <password> with a deployment user username and password.

  • Der Benutzername muss in Azure eindeutig sein und darf bei lokalen Git-Pushes nicht das Symbol „@“ enthalten.The username must be unique within Azure, and for local Git pushes, must not contain the ‘@’ symbol.
  • Das Kennwort muss mindestens acht Zeichen lang sein und zwei der folgenden drei Elemente enthalten: Buchstaben, Zahlen und Symbole.The password must be at least eight characters long, with two of the following three elements: letters, numbers, and symbols.
az webapp deployment user set --user-name <username> --password <password>

In der JSON-Ausgabe wird das Kennwort als null angezeigt.The JSON output shows the password as null. Wenn Sie den Fehler 'Conflict'. Details: 409 erhalten, müssen Sie den Benutzernamen ändern.If you get a 'Conflict'. Details: 409 error, change the username. Wenn Sie den Fehler 'Bad Request'. Details: 400 erhalten, müssen Sie ein sichereres Kennwort verwenden.If you get a 'Bad Request'. Details: 400 error, use a stronger password.

Notieren Sie Ihren Benutzernamen und Ihr Kennwort für die Bereitstellung Ihrer Web-Apps.Record your username and password to use to deploy your web apps.

Wie erstelle ich einen Plan?Create an App Service plan

Erstellen Sie in Cloud Shell mit dem Befehl az appservice plan create einen App Service-Plan.In the Cloud Shell, create an App Service plan with the az appservice plan create command.

Im folgenden Beispiel wird ein App Service-Plan namens myAppServicePlan mit dem Tarif Free erstellt:The following example creates an App Service plan named myAppServicePlan in the Free pricing tier:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

Nach Erstellung des App Service-Plans zeigt die Azure-Befehlszeilenschnittstelle Informationen wie im folgenden Beispiel an:When the App Service plan has been created, the Azure CLI shows information similar to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Erstellen einer Web-AppCreate a web app

Erstellen Sie eine Web-App im App Service-Plan myAppServicePlan.Create a web app in the myAppServicePlan App Service plan.

In Cloud Shell können Sie den Befehl az webapp create verwenden.In the Cloud Shell, you can use the az webapp create command. Ersetzen Sie im folgenden Beispiel <app-name> durch einen global eindeutigen App-Namen (gültige Zeichen sind a-z, 0-9 und -).In the following example, replace <app-name> with a globally unique app name (valid characters are a-z, 0-9, and -). Die Runtime ist auf PHP|7.0 festgelegt.The runtime is set to PHP|7.0. Führen Sie az webapp list-runtimes aus, um alle unterstützten Laufzeiten anzuzeigen.To see all supported runtimes, run az webapp list-runtimes.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.0" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.0" --deployment-local-git

Nach Erstellung der Web-App zeigt die Azure CLI eine Ausgabe wie im folgenden Beispiel an:When the web app has been created, the Azure CLI shows output similar to the following example:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Sie haben eine leere neue Web-App mit aktivierter Git-Bereitstellung erstellt.You’ve created an empty new web app, with git deployment enabled.

Hinweis

Die URL des Git-Remotespeicherorts wird in der deploymentLocalGitUrl-Eigenschaft im Format https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git angezeigt.The URL of the Git remote is shown in the deploymentLocalGitUrl property, with the format https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Speichern Sie diese URL, da Sie sie später noch benötigen.Save this URL as you need it later.

Konfigurieren der DatenbankeinstellungenConfigure database settings

Wie bereits erwähnt, können Sie mithilfe von Umgebungsvariablen in App Service eine Verbindung mit der Azure-MySQL-Datenbank herstellen.As pointed out previously, you can connect to your Azure MySQL database using environment variables in App Service.

Legen Sie in Cloud Shell mit dem Befehl az webapp config appsettings set Umgebungsvariablen als App-Einstellungen fest.In the Cloud Shell, you set environment variables as app settings by using the az webapp config appsettings set command.

Mit dem folgenden Befehl werden die App-Einstellungen DB_HOST, DB_DATABASE, DB_USERNAME und DB_PASSWORD konfiguriert.The following command configures the app settings DB_HOST, DB_DATABASE, DB_USERNAME, and DB_PASSWORD. Ersetzen Sie die Platzhalter <appname> und <mysql_server_name> .Replace the placeholders <appname> and <mysql_server_name>.

az webapp config appsettings set --name <app_name> --resource-group myResourceGroup --settings DB_HOST="<mysql_server_name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql_server_name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Sie können die PHP-Methode getenv verwenden, um auf die Einstellungen zuzugreifen.You can use the PHP getenv method to access the settings. Im Laravel-Code wird ein env-Wrapper für die PHP-Methode getenv verwendet.the Laravel code uses an env wrapper over the PHP getenv. Die MySQL-Konfiguration in config/database.php sieht beispielsweise wie im folgenden Code aus:For example, the MySQL configuration in config/database.php looks like the following code:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Konfigurieren der Laravel-UmgebungsvariablenConfigure Laravel environment variables

Für Laravel ist in App Service ein Anwendungsschlüssel erforderlich.Laravel needs an application key in App Service. Sie können ihn mit App-Einstellungen konfigurieren.You can configure it with app settings.

Verwenden Sie im lokalen Terminalfenster php artisan, um einen neuen Anwendungsschlüssel zu generieren, ohne ihn in der Datei .env zu speichern.In the local terminal window, use php artisan to generate a new application key without saving it to .env.

php artisan key:generate --show

Legen Sie in Cloud Shell mit dem Befehl az webapp config appsettings set den Anwendungsschlüssel in der App Service-App fest.In the Cloud Shell, set the application key in the App Service app by using the az webapp config appsettings set command. Ersetzen Sie die Platzhalter <appname> und <outputofphpartisankey:generate> .Replace the placeholders <appname> and <outputofphpartisankey:generate>.

az webapp config appsettings set --name <app_name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"

APP_DEBUG="true" weist Laravel an, Debuginformationen zurückzugeben, wenn die bereitgestellte App Fehler feststellt.APP_DEBUG="true" tells Laravel to return debugging information when the deployed app encounters errors. Legen Sie beim Ausführen einer Produktionsanwendung false fest, weil dies sicherer ist.When running a production application, set it to false, which is more secure.

Festlegen des virtuellen AnwendungspfadsSet the virtual application path

Legen Sie den virtuellen Anwendungspfad für die App fest.Set the virtual application path for the app. Dieser Schritt ist nur erforderlich, da der Lebenszyklus der Laravel-Anwendung im öffentlichen Verzeichnis anstatt im Stammverzeichnis der Anwendung beginnt.This step is required because the Laravel application lifecycle begins in the public directory instead of the application's root directory. Andere PHP-Frameworks, deren Lebenszyklus im Stammverzeichnis startet, können ohne manuelle Konfiguration des virtuellen Anwendungspfads ausgeführt werden.Other PHP frameworks whose lifecycle start in the root directory can work without manual configuration of the virtual application path.

Legen Sie in Cloud Shell mit dem Befehl az resource update den virtuellen Anwendungspfad fest.In the Cloud Shell, set the virtual application path by using the az resource update command. Ersetzen Sie den Platzhalter <appname> .Replace the <appname> placeholder.

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

Standardmäßig verweist Azure App Service im Stammverzeichnis des virtuellen Anwendungspfads ( / ) auf das Stammverzeichnis der bereitgestellten Anwendungsdateien (sites\wwwroot).By default, Azure App Service points the root virtual application path (/) to the root directory of the deployed application files (sites\wwwroot).

Übertragen von Git an Azure mithilfe von PushPush to Azure from Git

Kehren Sie zum lokalen Terminalfenster zurück, und fügen Sie Ihrem lokalen Git-Repository einen Azure-Remotespeicherort hinzu.Back in the local terminal window, add an Azure remote to your local Git repository. Ersetzen Sie <deploymentLocalGitUrl-from-create-step> durch die URL des Git-Remotespeicherorts, den Sie in Erstellen einer Web-App gespeichert haben.Replace <deploymentLocalGitUrl-from-create-step> with the URL of the Git remote that you saved from Create a web app.

git remote add azure <deploymentLocalGitUrl-from-create-step>

Führen Sie einen Pushvorgang zum Azure-Remotespeicherort durch, um Ihre App mit dem folgenden Befehl bereitzustellen.Push to the Azure remote to deploy your app with the following command. Wenn Sie von der Git-Anmeldeinformationsverwaltung zur Eingabe von Anmeldeinformationen aufgefordert werden, müssen Sie die Anmeldeinformationen eingeben, die Sie in „Konfigurieren eines Bereitstellungsbenutzers“ erstellt haben (nicht die Anmeldeinformationen, die Sie zur Anmeldung beim Azure-Portal verwenden).When prompted for credentials by Git Credential Manager, make sure that you enter the credentials you created in Configure a deployment user, not the credentials you use to sign in to the Azure portal.

git push azure master

Die Ausführung dieses Befehls kann einige Minuten in Anspruch nehmen.This command may take a few minutes to run. Während der Ausführung werden Informationen angezeigt, die den Informationen im folgenden Beispiel ähneln:While running, it displays information similar to the following example:

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a5e076db9c'.
remote: Running custom deployment command...
remote: Running deployment command...
...
< Output has been truncated for readability >

Hinweis

Sie werden feststellen, dass am Ende der Bereitstellung Composer-Pakete installiert werden.You may notice that the deployment process installs Composer packages at the end. App Service führt diese Automatisierungen nicht während der Bereitstellung aus. Daher enthält dieses Beispielrepository drei zusätzliche Dateien im Stammverzeichnis für die Aktivierung:App Service does not run these automations during default deployment, so this sample repository has three additional files in its root directory to enable it:

  • .deployment: Diese Datei weist App Service an, bash deploy.sh als benutzerdefiniertes Bereitstellungsskript auszuführen..deployment - This file tells App Service to run bash deploy.sh as the custom deployment script.
  • deploy.sh: Das Der benutzerdefinierte Bereitstellungsskript.deploy.sh - The custom deployment script. Wenn Sie die Datei überprüfen, sehen Sie, dass php composer.phar install nach npm install ausgeführt wird.If you review the file, you will see that it runs php composer.phar install after npm install.
  • composer.phar: Der Composer-Paket-Manager.composer.phar - The Composer package manager.

Mit diesem Ansatz können Sie der Git-basierten Bereitstellung in App Service beliebige Schritte hinzufügen.You can use this approach to add any step to your Git-based deployment to App Service. Weitere Informationen finden Sie unter Custom Deployment Script (Benutzerdefiniertes Bereitstellungsskript).For more information, see Custom Deployment Script.

Navigieren zur Azure-AppBrowse to the Azure app

Browsen Sie zu http://<app_name>.azurewebsites.net, und fügen Sie der Liste einige Aufgaben hinzu.Browse to http://<app_name>.azurewebsites.net and add a few tasks to the list.

In Azure App Service ausgeführte PHP-App

Glückwunsch! Sie führen eine datengesteuerte PHP-App in Azure App Service aus.Congratulations, you're running a data-driven PHP app in Azure App Service.

Lokales Aktualisieren und erneutes Bereitstellen des ModellsUpdate model locally and redeploy

In diesem Schritt nehmen Sie eine einfache Änderung am task-Datenmodell und der Web-App vor und veröffentlichen das Update dann in Azure.In this step, you make a simple change to the task data model and the webapp, and then publish the update to Azure.

Für das tasks-Szenario ändern Sie die Anwendung, damit Sie eine Aufgabe als abgeschlossen kennzeichnen können.For the tasks scenario, you modify the application so that you can mark a task as complete.

Hinzufügen eines SpaltennamensAdd a column

Navigieren Sie im lokalen Terminalfenster zum Stamm des Git-Repositorys.In the local terminal window, navigate to the root of the Git repository.

Generieren Sie eine neue Datenbankmigration für die Tabelle tasks:Generate a new database migration for the tasks table:

php artisan make:migration add_complete_column --table=tasks

Dieser Befehl zeigt den Namen der Migrationsdatei an, die generiert wird.This command shows you the name of the migration file that's generated. Suchen Sie unter database/migrations nach dieser Datei, und öffnen Sie sie.Find this file in database/migrations and open it.

Ersetzen Sie die up-Methode durch den folgenden Code:Replace the up method with the following code:

public function up()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->boolean('complete')->default(False);
    });
}

Mit dem obigen Code wird der Tabelle tasks die boolesche Spalte complete hinzugefügt.The preceding code adds a boolean column in the tasks table called complete.

Ersetzen Sie die down-Methode durch den folgenden Code für die Rollbackaktion:Replace the down method with the following code for the rollback action:

public function down()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->dropColumn('complete');
    });
}

Führen Sie im lokalen Terminalfenster Laravel-Datenbankmigrationen aus, um die Änderung in der lokalen Datenbank vorzunehmen.In the local terminal window, run Laravel database migrations to make the change in the local database.

php artisan migrate

Das Modell Task (siehe app/Task.php) wird basierend auf der Laravel-Namenskonvention standardmäßig der Tabelle tasks zugeordnet.Based on the Laravel naming convention, the model Task (see app/Task.php) maps to the tasks table by default.

Aktualisieren der AnwendungslogikUpdate application logic

Öffnen Sie die Datei routes/web.php.Open the routes/web.php file. Die Anwendung definiert hier die Routen und Geschäftslogik.The application defines its routes and business logic here.

Fügen Sie mit folgendem Code am Ende der Datei eine Route hinzu:At the end of the file, add a route with the following code:

/**
 * Toggle Task completeness
 */
Route::post('/task/{id}', function ($id) {
    error_log('INFO: post /task/'.$id);
    $task = Task::findOrFail($id);

    $task->complete = !$task->complete;
    $task->save();

    return redirect('/');
});

Der obige Code führt eine einfache Aktualisierung des Datenmodells durch, indem der Wert von complete geändert wird.The preceding code makes a simple update to the data model by toggling the value of complete.

Aktualisieren der AnsichtUpdate the view

Öffnen Sie die Datei resources/views/tasks.blade.php.Open the resources/views/tasks.blade.php file. Suchen Sie das öffnende Tag <tr>, und ersetzen Sie es durch Folgendes:Search for the <tr> opening tag and replace it with:

<tr class="{{ $task->complete ? 'success' : 'active' }}" >

Mit dem obigen Code wird die Zeilenfarbe abhängig davon geändert, ob die Aufgabe abgeschlossen ist.The preceding code changes the row color depending on whether the task is complete.

Die nächste Zeile enthält folgenden Code:In the next line, you have the following code:

<td class="table-text"><div>{{ $task->name }}</div></td>

Ersetzen Sie die gesamte Zeile durch den folgenden Code:Replace the entire line with the following code:

<td>
    <form action="{{ url('task/'.$task->id) }}" method="POST">
        {{ csrf_field() }}

        <button type="submit" class="btn btn-xs">
            <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i>
        </button>
        {{ $task->name }}
    </form>
</td>

Der obige Code fügt die Schaltfläche zum Übermitteln hinzu, die auf die zuvor definierte Route verweist.The preceding code adds the submit button that references the route that you defined earlier.

Lokales Testen der ÄnderungenTest the changes locally

Führen Sie den Entwicklungsserver im lokalen Terminalfenster aus dem Stammverzeichnis des Git-Repositorys aus.In the local terminal window, run the development server from the root directory of the Git repository.

php artisan serve

Navigieren Sie zu http://localhost:8000, um die Änderung des Aufgabenstatus anzuzeigen, und aktivieren Sie das Kontrollkästchen.To see the task status change, navigate to http://localhost:8000 and select the checkbox.

Hinzugefügtes Kontrollkästchen in der Aufgabe

Geben Sie zum Beenden von PHP im Terminal Ctrl + C ein.To stop PHP, type Ctrl + C in the terminal.

Veröffentlichen von Änderungen in AzurePublish changes to Azure

Führen Sie im lokalen Terminalfenster Laravel-Datenbankmigrationen mit der Produktions-Verbindungszeichenfolge aus, um die Änderung in Azure-Datenbank vorzunehmen.In the local terminal window, run Laravel database migrations with the production connection string to make the change in the Azure database.

php artisan migrate --env=production --force

Führen Sie für alle Änderungen in Git einen Commit aus, und übertragen Sie dann die Codeänderungen per Pushvorgang an Azure.Commit all the changes in Git, and then push the code changes to Azure.

git add .
git commit -m "added complete checkbox"
git push azure master

Wechseln Sie nach Abschluss des git push-Vorgangs zur Azure-App, und testen Sie die neuen Funktionen.Once the git push is complete, navigate to the Azure app and test the new functionality.

Auf Azure veröffentlichte Änderungen an Modell und Datenbank

Wenn Sie Aufgaben hinzugefügt haben, werden sie in der Datenbank beibehalten.If you added any tasks, they are retained in the database. Bei Updates des Datenschemas bleiben vorhandene Daten erhalten.Updates to the data schema leave existing data intact.

Streamen von DiagnoseprotokollenStream diagnostic logs

Wenn die PHP-Anwendung in Azure App Service ausgeführt wird, können Sie die Konsolenprotokolle auf Ihr Terminal umleiten.While the PHP application runs in Azure App Service, you can get the console logs piped to your terminal. Auf diese Weise erhalten Sie die gleichen Diagnosemeldungen, die Ihnen beim Debuggen von Anwendungsfehlern helfen.That way, you can get the same diagnostic messages to help you debug application errors.

Verwenden Sie zum Starten des Streamings von Protokolldateien den Befehl az webapp log tail in Cloud Shell.To start log streaming, use the az webapp log tail command in the Cloud Shell.

az webapp log tail --name <app_name> --resource-group myResourceGroup

Nachdem das Protokollstreaming gestartet wurde, aktualisieren Sie die Azure-App im Browser, um Webdatenverkehr zu generieren.Once log streaming has started, refresh the Azure app in the browser to get some web traffic. Sie können jetzt Konsolenprotokolle sehen, die auf das Terminal umgeleitet werden.You can now see console logs piped to the terminal. Falls Sie nicht sofort Konsolenprotokolle sehen, können Sie es nach 30 Sekunden noch einmal versuchen.If you don't see console logs immediately, check again in 30 seconds.

Zum Beenden des Protokollstreamings geben Sie Ctrl+C ein.To stop log streaming at anytime, type Ctrl+C.

Tipp

Eine PHP-Anwendung kann die Standardmethode error_log() für die Ausgabe an die Konsole verwenden.A PHP application can use the standard error_log() to output to the console. Die Beispielanwendung verwendet diesen Ansatz in app/Http/routes.php.The sample application uses this approach in app/Http/routes.php.

Als ein Webframework verwendet Laravel Monolog als Protokollierungsanbieter.As a web framework, Laravel uses Monolog as the logging provider. Was Sie tun müssen, damit Monolog ausgehende Nachrichten an der Konsole ausgibt, erfahren Sie unter PHP: How to use monolog to log to console (php://out) (Wie Sie Monolog zur Protokollierung auf der Konsole verwenden (php://out)).To see how to get Monolog to output messages to the console, see PHP: How to use monolog to log to console (php://out).

Verwalten der Azure-AppManage the Azure app

Wechseln Sie zum Azure-Portal, um die erstellte App zu verwalten.Go to the Azure portal to manage the app you created.

Klicken Sie im linken Menü auf App Services und anschließend auf den Namen Ihrer Azure-App.From the left menu, click App Services, and then click the name of your Azure app.

Portalnavigation zur Azure-App

Die Übersichtsseite Ihrer App wird angezeigt.You see your app's Overview page. Hier können Sie einfache Verwaltungsaufgaben wie Beenden, Starten, Neustarten, Durchsuchen und Löschen durchführen.Here, you can perform basic management tasks like stop, start, restart, browse, and delete.

Im linken Menü werden Seiten für die Konfiguration Ihrer App angezeigt.The left menu provides pages for configuring your app.

App Service-Seite im Azure-Portal

Bereinigen von RessourcenClean up resources

In den vorherigen Schritten haben Sie Azure-Ressourcen in einer Ressourcengruppe erstellt.In the preceding steps, you created Azure resources in a resource group. Wenn Sie diese Ressourcen in Zukunft nicht mehr benötigen, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in Cloud Shell ausführen:If you don't expect to need these resources in the future, delete the resource group by running the following command in the Cloud Shell:

az group delete --name myResourceGroup

Die Ausführung dieses Befehls kann eine Minute in Anspruch nehmen.This command may take a minute to run.

Nächste SchritteNext steps

In diesem Tutorial haben Sie Folgendes gelernt:In this tutorial, you learned how to:

  • Erstellen einer MySQL-Datenbank in AzureCreate a MySQL database in Azure
  • Verbinden einer PHP-App mit MySQLConnect a PHP app to MySQL
  • Bereitstellen der Anwendung in AzureDeploy the app to Azure
  • Aktualisieren des Datenmodells und erneutes Bereitstellen der AppUpdate the data model and redeploy the app
  • Streamen von Diagnoseprotokollen aus AzureStream diagnostic logs from Azure
  • Verwalten der App im Azure-PortalManage the app in the Azure portal

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie der App einen benutzerdefinierten DNS-Namen zuordnen.Advance to the next tutorial to learn how to map a custom DNS name to the app.