Självstudie: bygga en PHP-och MySQL-app i Azure App ServiceTutorial: Build a PHP and MySQL app in Azure App Service

Azure App Service ger en mycket skalbar och automatisk korrigering av webb värd tjänst med hjälp av Windows-operativsystemet.Azure App Service provides a highly scalable, self-patching web hosting service using the Windows operating system. I den här självstudien visas hur du skapar en PHP-app i Azure och ansluter den till en MySQL-databas.This tutorial shows how to create a PHP app in Azure and connect it to a MySQL database. När du är klar har du en Laravel -app som körs på Azure App Service i Windows.When you're finished, you'll have a Laravel app running on Azure App Service on Windows.

Azure App Service ger en mycket skalbar och automatisk korrigering av webb värd tjänst som använder Linux-operativsystemet.Azure App Service provides a highly scalable, self-patching web hosting service using the Linux operating system. I den här självstudien visas hur du skapar en PHP-app i Azure och ansluter den till en MySQL-databas.This tutorial shows how to create a PHP app in Azure and connect it to a MySQL database. När du är klar har du en Laravel -app som körs på Azure App Service på Linux.When you're finished, you'll have a Laravel app running on Azure App Service on Linux.

Skärm bild av ett exempel på en PHP-app med titeln uppgiftslista.

I den här guiden får du lära dig att:In this tutorial, you learn how to:

  • Skapa en MySQL-databas i AzureCreate a MySQL database in Azure
  • ansluta en PHP-app till MySQLConnect a PHP app to MySQL
  • distribuera appen till AzureDeploy the app to Azure
  • uppdatera datamodellen och distribuera om appenUpdate the data model and redeploy the app
  • strömma diagnostikloggar från AzureStream diagnostic logs from Azure
  • hantera appen i Azure-portalen.Manage the app in the Azure portal

Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.If you don't have an Azure subscription, create a free account before you begin.

KravPrerequisites

För att slutföra den här kursen behöver du:To complete this tutorial:

Förbereda lokal MySQLPrepare local MySQL

I det här steget skapar du en databas för självstudien på din lokala MySQL-server.In this step, you create a database in your local MySQL server for your use in this tutorial.

Ansluta till en lokal MySQL-serverConnect to local MySQL server

Anslut till din lokala MySQL-server via ett terminalfönster.In a terminal window, connect to your local MySQL server. Du kan använda det här terminalfönstret för att köra alla kommandon i den här självstudien.You can use this terminal window to run all the commands in this tutorial.

mysql -u root -p

Om du uppmanas att ange ett lösenord anger du lösenordet för root-kontot.If you're prompted for a password, enter the password for the root account. Se MySQL: Återställa rotlösenordet om du inte kommer ihåg rotlösenordet för ditt konto.If you don't remember your root account password, see MySQL: How to Reset the Root Password.

MySQL-servern är igång om kommandot körs utan problem.If your command runs successfully, then your MySQL server is running. Om inte, kontrollerar du att den lokala MySQL-servern är igång genom att följa anvisningarna efter installation av MySQL.If not, make sure that your local MySQL server is started by following the MySQL post-installation steps.

Skapa en lokal databasCreate a database locally

Skapa en databas i mysql-prompten.At the mysql prompt, create a database.

CREATE DATABASE sampledb;

Skriv quit för att avsluta serveranslutningen.Exit your server connection by typing quit.

quit

Skapa en PHP-app lokaltCreate a PHP app locally

I det här steget hämtar du en Laravel-exempelapp, konfigurerar dess databasanslutning och kör den lokalt.In this step, you get a Laravel sample application, configure its database connection, and run it locally.

Klona exempletClone the sample

Använd kommandot cd för att komma till en arbetskatalog i terminalfönstret.In the terminal window, cd to a working directory.

Klona exempellagringsplatsen med följande kommando.Run the following command to clone the sample repository.

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

cd till den klonade katalogen.cd to your cloned directory. Installera de paket som behövs.Install the required packages.

cd laravel-tasks
composer install

Konfigurera MySQL-anslutningenConfigure MySQL connection

Skapa en fil med namnet .env i lagringsplatsens rot.In the repository root, create a file named .env. Kopiera in följande variabler i .env-filen.Copy the following variables into the .env file. Ersätt plats hållaren för < root_password> med MySQL-rot användarens lösen ord.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>

Mer information om hur Laravel använder .env-filen finns i Laravel Environment Configuration (Konfiguration av Laravel-miljö).For information on how Laravel uses the .env file, see Laravel Environment Configuration.

Köra exemplet lokaltRun the sample locally

Kör Laravel-databasmigreringar för att skapa de tabeller som behövs för appen.Run Laravel database migrations to create the tables the application needs. Du kan se vilka tabeller som skapas i migreringarna i katalogen database/migrations (databas/migreringar) på Git-lagringsplatsen.To see which tables are created in the migrations, look in the database/migrations directory in the Git repository.

php artisan migrate

Generera en ny Laravel-programnyckel.Generate a new Laravel application key.

php artisan key:generate

Kör appen.Run the application.

php artisan serve

Gå till http://localhost:8000 i en webbläsare.Navigate to http://localhost:8000 in a browser. Lägg till några uppgifter på sidan.Add a few tasks in the page.

PHP ansluter till MySQL

Om du vill stoppa PHP skriver du Ctrl + C i terminalen.To stop PHP, type Ctrl + C in the terminal.

Skapa MySQL i AzureCreate MySQL in Azure

I det här steget skapar du en MySQL-databas i Azure Database for MySQL.In this step, you create a MySQL database in Azure Database for MySQL. Senare kommer du att konfigurera PHP-appen för att ansluta till den här databasen.Later, you configure the PHP application to connect to this database.

Skapa en resursgruppCreate a resource group

En resurs grupp är en logisk behållare där Azure-resurser, till exempel webbappar, databaser och lagrings konton, distribueras och hanteras.A resource group is a logical container into which Azure resources, such as web apps, databases, and storage accounts, are deployed and managed. Du kan exempelvis välja att ta bort hela resursgruppen i ett enkelt steg längre fram.For example, you can choose to delete the entire resource group in one simple step later.

I Cloud Shell skapar du en resurs grupp med az group create kommandot.In the Cloud Shell, create a resource group with the az group create command. I följande exempel skapas en resursgrupp med namnet myResourceGroup på platsen Europa, västra.The following example creates a resource group named myResourceGroup in the West Europe location. Om du vill se alla platser som stöds för App Service på Kostnadsfri nivå, kör du kommandot az appservice list-locations --sku FREE.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"

Du skapar vanligtvis din resursgrupp och resurserna i en region nära dig.You generally create your resource group and the resources in a region near you.

När kommandot har slutförts visar JSON-utdata resursgruppens egenskaper.When the command finishes, a JSON output shows you the resource group properties.

Skapa en MySQL-serverCreate a MySQL server

I Cloud Shell skapar du en server i Azure Database for MySQL med az mysql server create kommandot.In the Cloud Shell, create a server in Azure Database for MySQL with the az mysql server create command.

I följande kommando ersätter du ett unikt server namn för <mysql-server-name> plats hållaren, ett användar namn för <admin-user> och ett lösen ord för <admin-password> plats hållaren.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. Det här servernamnet används som en del av MySQL-slutpunkten (https://<mysql-server-name>.mysql.database.azure.com), så namnet måste vara unikt för alla servrar i Azure.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. Mer information om hur du väljer MySQL DB SKU finns i skapa en Azure Database for MySQL-server.For details on selecting MySQL DB SKU, see Create an Azure Database for MySQL server.

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

När MySQL-servern skapas visar Azure CLI information som ser ut ungefär så här:When the MySQL server is created, the Azure CLI shows information similar to the following example:

{
  "administratorLogin": "<admin-user>",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.mysql.database.azure.com",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "westeurope",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
  -  < Output has been truncated for readability >
}

Konfigurera serverbrandväggenConfigure server firewall

I Cloud Shell skapar du en brand Väggs regel för MySQL-servern för att tillåta klient anslutningar med hjälp av az mysql server firewall-rule create kommandot.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. När både start-IP och slut-IP har angetts till 0.0.0.0 öppnas brandväggen endast för andra Azure-resurser.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

Tips

Du kan begränsa brandväggsregeln ännu mer genom att endast använda de utgående IP-adresser som används av din app.You can be even more restrictive in your firewall rule by using only the outbound IP addresses your app uses.

Kör kommandot igen i Cloud Shell för att tillåta åtkomst från den lokala datorn genom att ersätta <your-ip-address> med din lokala IPv4 IP-adress.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>

Ansluta lokalt till MySQL-produktionsservernConnect to production MySQL server locally

Anslut till MySQL-server i Azure via det lokala terminalfönstret.In the local terminal window, connect to the MySQL server in Azure. Använd värdet du angav tidigare för < admin-user> och < mysql-Server-Name>.Use the value you specified previously for <admin-user> and <mysql-server-name>. När du uppmanas att ange ett lösenord använder du lösenordet som du angav när du skapade databasen i Azure.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

Skapa en produktionsdatabasCreate a production database

Skapa en databas i mysql-prompten.At the mysql prompt, create a database.

CREATE DATABASE sampledb;

Skapa en användare med behörigheterCreate a user with permissions

Skapa en databasanvändare med namnet phpappuser och ge användaren alla privilegier i sampledb-databasen.Create a database user called phpappuser and give it all privileges in the sampledb database. För enkelhetens skull använder du MySQLAzure2017 som lösen ord.For simplicity of the tutorial, use MySQLAzure2017 as the password.

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

Skriv quit för att avsluta serveranslutningen.Exit the server connection by typing quit.

quit

Ansluta appen till Azure MySQLConnect app to Azure MySQL

I det här steget ansluter du PHP-programmet till MySQL-databasen som du skapade i Azure Database for MySQL.In this step, you connect the PHP application to the MySQL database you created in Azure Database for MySQL.

Konfigurera databasanslutningenConfigure the database connection

Skapa en .env.production-fil i lagringsplatsens rot och kopiera in följande variabler i filen.In the repository root, create an .env.production file and copy the following variables into it. Ersätt placeholder_ < MySQL-server-name>_ i både DB_HOST och 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

Spara ändringarna.Save the changes.

Tips

För att skydda din MySQL-anslutningsinformation är den här filen redan undantagen från Git-lagringsplatsen (se .gitignore i lagringsplatsens rot).To secure your MySQL connection information, this file is already excluded from the Git repository (See .gitignore in the repository root). Senare får du lära dig hur du konfigurerar miljövariabler i App Service för att ansluta till din databas i Azure Database for MySQL.Later, you learn how to configure environment variables in App Service to connect to your database in Azure Database for MySQL. När du använder miljövariabler behöver du inte .env-filen i App Service.With environment variables, you don't need the .env file in App Service.

Konfigurera TLS/SSL-certifikatConfigure TLS/SSL certificate

Som standard tvingar Azure Database for MySQL TLS-anslutningar från klienter.By default, Azure Database for MySQL enforces TLS connections from clients. För att ansluta till din MySQL-databas i Azure måste du använda .pem-certifikatet som tillhandahålls av Azure Database for MySQL.To connect to your MySQL database in Azure, you must use the .pem certificate supplied by Azure Database for MySQL.

Öppna config/database.php och lägg till parametrarna sslmode och options i connections.mysql, som i följande kod.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', 
    ] : []
],
'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
    ] : []
],

I den här kursen finns certifikatet BaltimoreCyberTrustRoot.crt.pem på lagringsplatsen så att du enkelt kommer åt det.The certificate BaltimoreCyberTrustRoot.crt.pem is provided in the repository for convenience in this tutorial.

Testa appen lokaltTest the application locally

Kör Laravel-databasmigreringar med .env.production som miljöfil för att skapa tabellerna i din MySQL-databas i Azure Database for MySQL.Run Laravel database migrations with .env.production as the environment file to create the tables in your MySQL database in Azure Database for MySQL. Tänk på att anslutningsinformationen till din MySQL-databas i Azure finns i .env.production.Remember that .env.production has the connection information to your MySQL database in Azure.

php artisan migrate --env=production --force

.env.production innehåller inte någon giltig programnyckel ännu..env.production doesn't have a valid application key yet. Generera en ny nyckel för den i terminalen.Generate a new one for it in the terminal.

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

Kör exempelprogrammet med .env.production som miljöfil.Run the sample application with .env.production as the environment file.

php artisan serve --env=production

Navigera till http://localhost:8000.Navigate to http://localhost:8000. Om sidan läses in utan fel ansluter PHP-appen till MySQL-databasen i Azure.If the page loads without errors, the PHP application is connecting to the MySQL database in Azure.

Lägg till några uppgifter på sidan.Add a few tasks in the page.

PHP har anslutits till Azure Database for MySQL

Om du vill stoppa PHP skriver du Ctrl + C i terminalen.To stop PHP, type Ctrl + C in the terminal.

Genomföra ändringarnaCommit your changes

Kör följande Git-kommandon för att genomföra ändringarna:Run the following Git commands to commit your changes:

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

Din app är klar att distribuera.Your app is ready to be deployed.

Distribuera till AzureDeploy to Azure

I det här steget distribuerar du din MySQL-anslutna PHP-app till Azure App Service.In this step, you deploy the MySQL-connected PHP application to Azure App Service.

Konfigurera en distributionsanvändareConfigure a deployment user

FTP och lokal git kan distribueras till en Azure-webbapp med hjälp av en distributions användare.FTP and local Git can deploy to an Azure web app by using a deployment user. När du har konfigurerat din distributions användare kan du använda den för alla dina Azure-distributioner.Once you configure your deployment user, you can use it for all your Azure deployments. Ditt användar namn och lösen ord för distribution på konto nivå skiljer sig från dina autentiseringsuppgifter för Azure-prenumerationen.Your account-level deployment username and password are different from your Azure subscription credentials.

Konfigurera distributions användaren genom att köra kommandot AZ webapp Deployment User set i Azure Cloud Shell.To configure the deployment user, run the az webapp deployment user set command in Azure Cloud Shell. Ersätt <username> och <password> med ett användar namn och lösen ord för distributions användare.Replace <username> and <password> with a deployment user username and password.

  • Användar namnet måste vara unikt inom Azure, och för lokala git-push-meddelanden får inte innehålla @ symbolen.The username must be unique within Azure, and for local Git pushes, must not contain the ‘@’ symbol.
  • Lösen ordet måste innehålla minst åtta tecken, med två av följande tre element: bokstäver, siffror och symboler.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>

JSON-utdata visar lösen ordet som null .The JSON output shows the password as null. Om du ser felet 'Conflict'. Details: 409 ska du byta användarnamn.If you get a 'Conflict'. Details: 409 error, change the username. Om du ser felet 'Bad Request'. Details: 400 ska du använda ett starkare lösenord.If you get a 'Bad Request'. Details: 400 error, use a stronger password.

Registrera ditt användar namn och lösen ord som ska användas för att distribuera dina webb program.Record your username and password to use to deploy your web apps.

Skapa en App Service-planCreate an App Service plan

I Cloud Shell skapar du en App Service plan med az appservice plan create kommandot.In the Cloud Shell, create an App Service plan with the az appservice plan create command.

I följande exempel skapas en App Service-plan med namnet myAppServicePlan på prisnivån Kostnadsfri: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

När App Service-planen har skapats visas information av Azure CLI. Informationen ser ut ungefär som i följande exempel: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
} 

I Cloud Shell skapar du en App Service plan i resurs gruppen med az appservice plan create kommandot.In the Cloud Shell, create an App Service plan in the resource group with the az appservice plan create command.

I följande exempel skapas en App Service plan med namnet myAppServicePlan på den kostnads fria pris nivån ( --sku F1 ) och i en Linux-behållare ( --is-linux ).The following example creates an App Service plan named myAppServicePlan in the Free pricing tier (--sku F1) and in a Linux container (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku F1 --is-linux

När App Service-planen har skapats visas information av Azure CLI. Informationen ser ut ungefär som i följande exempel: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": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  <JSON data removed for brevity.>
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Skapa en webbappCreate a web app

Skapa en webbapp i myAppServicePlan App Service plan.Create a web app in the myAppServicePlan App Service plan.

I Cloud Shell kan du använda az webapp create kommandot.In the Cloud Shell, you can use the az webapp create command. Ersätt <app-name> med ett globalt unikt appnamn (giltiga tecken är a-z, 0-9 och -) i följande exempel.In the following example, replace <app-name> with a globally unique app name (valid characters are a-z, 0-9, and -). Körningen har angetts till PHP|7.2.The runtime is set to PHP|7.2. Om du vill se alla körningar som stöds kör du az webapp list-runtimes --linux .To see all supported runtimes, run az webapp list-runtimes --linux.

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

När webbappen har skapats visar Azure CLI utdata liknande den i följande exempel: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. >
}

Du har skapat en tom ny webbapp med git-distribution aktiverad.You’ve created an empty new web app, with git deployment enabled.

Anteckning

URL för fjärransluten Git visas i egenskapen deploymentLocalGitUrl med formatet https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git.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. Spara den här URL:en, eftersom du behöver den senare.Save this URL as you need it later.

Skapa en webbapp i myAppServicePlan App Service plan.Create a web app in the myAppServicePlan App Service plan.

I Cloud Shell kan du använda az webapp create kommandot.In the Cloud Shell, you can use the az webapp create command. Ersätt <app-name> med ett globalt unikt appnamn (giltiga tecken är a-z, 0-9 och -) i följande exempel.In the following example, replace <app-name> with a globally unique app name (valid characters are a-z, 0-9, and -). Körningen har angetts till PHP|7.2.The runtime is set to PHP|7.2. Om du vill se alla körningar som stöds kör du az webapp list-runtimes --linux .To see all supported runtimes, run az webapp list-runtimes --linux.

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

När webbappen har skapats visar Azure CLI utdata liknande den i följande exempel: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. >
}

Du har skapat en tom ny webbapp med git-distribution aktiverad.You’ve created an empty new web app, with git deployment enabled.

Anteckning

URL för fjärransluten Git visas i egenskapen deploymentLocalGitUrl med formatet https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git.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. Spara den här URL:en, eftersom du behöver den senare.Save this URL as you need it later.

Konfigurera databasinställningarnaConfigure database settings

I App Service ställer du in miljövariabler som appinställningar med kommandot az webapp config appsettings set.In App Service, you set environment variables as app settings by using the az webapp config appsettings set command.

Följande kommando konfigurerar appinställningarna DB_HOST, DB_DATABASE, DB_USERNAME och DB_PASSWORD.The following command configures the app settings DB_HOST, DB_DATABASE, DB_USERNAME, and DB_PASSWORD. Ersätt plats hållarnas < namn> och < mysql-Server-Name>.Replace the placeholders <app-name> 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"

Du kan komma åt inställningarna med PHP-metoden getenv.You can use the PHP getenv method to access the settings. I Laravel-koden används en env-omslutning över PHP getenv.the Laravel code uses an env wrapper over the PHP getenv. MySQL-konfigurationen i config/database.php ser till exempel ut som följande kod: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', ''),
    ...
],

Konfigurera Laravel-miljövariablerConfigure Laravel environment variables

Laravel måste ha en programnyckel i App Service.Laravel needs an application key in App Service. Du kan konfigurera den med appinställningar.You can configure it with app settings.

Gå till det lokala terminalfönstret och använd php artisan för att generera en ny programnyckel utan att spara den i .env.In the local terminal window, use php artisan to generate a new application key without saving it to .env.

php artisan key:generate --show

I Cloud Shell anger du program nyckeln i App Service-appen med hjälp av az webapp config appsettings set kommandot.In the Cloud Shell, set the application key in the App Service app by using the az webapp config appsettings set command. Ersätt plats hållarna < App-Name> och < outputofphpartisankey: generate>.Replace the placeholders <app-name> 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" säger åt Laravel att returnera felsökningsinformation när den distribuerade appen påträffar fel.APP_DEBUG="true" tells Laravel to return debugging information when the deployed app encounters errors. När du kör en produktionsapp anger du värdet false, vilket är säkrare.When running a production application, set it to false, which is more secure.

Ange sökväg till virtuella programSet the virtual application path

Ange den virtuella sökvägen för appen.Set the virtual application path for the app. Det här steget är nödvändigt eftersom Laravel-programmets livscykel börjar i den offentliga katalogen i stället för programmets rotkatalog.This step is required because the Laravel application lifecycle begins in the public directory instead of the application's root directory. Andra PHP-ramverk vilkas livscykel startar i rotkatalogen fungerar utan manuell konfiguration av den virtuella programsökvägen.Other PHP frameworks whose lifecycle start in the root directory can work without manual configuration of the virtual application path.

I Cloud Shell anger du den virtuella program Sök vägen med hjälp av az resource update kommandot.In the Cloud Shell, set the virtual application path by using the az resource update command. Ersätt < appens namn> plats hållaren.Replace the <app-name> 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

Som standard pekar Azure App Service den virtuella rot katalogen för programmet ( / ) till rot katalogen för de distribuerade programfilerna (sites\wwwroot).By default, Azure App Service points the root virtual application path (/) to the root directory of the deployed application files (sites\wwwroot).

Laravel program livs cykel börjar i den offentliga katalogen i stället för programmets rot Katalog.Laravel application lifecycle begins in the public directory instead of the application's root directory. PHP Docker-standardavbildningen för App Service använder Apache, och låter dig inte anpassa DocumentRoot för Laravel.The default PHP Docker image for App Service uses Apache, and it doesn't let you customize the DocumentRoot for Laravel. Däremot kan du använda .htaccess för att skriva om alla begäranden så att de pekar till /public i stället för rotkatalogen.However, you can use .htaccess to rewrite all requests to point to /public instead of the root directory. I lagringsplatsens rot har en .htaccess redan lagts till för detta ändamål.In the repository root, an .htaccess is added already for this purpose. Därmed är Laravel-appen klar att distribueras.With it, your Laravel application is ready to be deployed.

Mer information finns i ändra plats roten.For more information, see Change site root.

Skicka till Azure från GitPush to Azure from Git

I det lokala terminalfönstret kan du lägga till en Azure-fjärrdatabas till din lokala Git-databas.Back in the local terminal window, add an Azure remote to your local Git repository. Ersätt <deploymentLocalGitUrl-from-create-step> med URL: en för den git-fjärrserver som du sparade från skapa en webbapp.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>

Skicka till Azure-fjärrdatabasen för att distribuera appen med följande kommando.Push to the Azure remote to deploy your app with the following command. När git Credential Manager uppmanas att ange autentiseringsuppgifter, se till att du anger de autentiseringsuppgifter som du skapade i Konfigurera en distributions användare, inte de autentiseringsuppgifter som du använder för att logga in på Azure Portal.When Git Credential Manager prompts you for credentials, make sure 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

Det kan ett par minuter att köra kommandot.This command may take a few minutes to run. Medan det körs visas information liknande den i följande exempel: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 'main'.
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 >

Anteckning

Du kanske märker att distributionsprocessen installerar Composer-paket i slutet.You may notice that the deployment process installs Composer packages at the end. App Service kör inte dessa automatiseringar under standarddistributionen. Den här exempellagringsplatsen har tre extra filer i rotkatalogen för detta: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 – Den här filen skickar ett meddelande till App Service om att köra bash deploy.sh som anpassat distributionsskript..deployment - This file tells App Service to run bash deploy.sh as the custom deployment script.
  • deploy.sh – Det anpassade distributionsskriptet.deploy.sh - The custom deployment script. Om du granskar filen ser du att den kör php composer.phar install efter npm install.If you review the file, you will see that it runs php composer.phar install after npm install.
  • composer.phar – Composer-pakethanteraren.composer.phar - The Composer package manager.

Du kan använda den här metoden för att lägga till steg i den Git-baserade distributionen till App Service.You can use this approach to add any step to your Git-based deployment to App Service. Mer information finns i Anpassat distributionsskript.For more information, see Custom Deployment Script.

I det lokala terminalfönstret kan du lägga till en Azure-fjärrdatabas till din lokala Git-databas.Back in the local terminal window, add an Azure remote to your local Git repository. Ersätt <deploymentLocalGitUrl-from-create-step> med URL: en för den git-fjärrserver som du sparade från skapa en webbapp.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>

Skicka till Azure-fjärrdatabasen för att distribuera appen med följande kommando.Push to the Azure remote to deploy your app with the following command. När git Credential Manager uppmanas att ange autentiseringsuppgifter, se till att du anger de autentiseringsuppgifter som du skapade i Konfigurera en distributions användare, inte de autentiseringsuppgifter som du använder för att logga in på Azure Portal.When Git Credential Manager prompts you for credentials, make sure 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

Det kan ett par minuter att köra kommandot.This command may take a few minutes to run. Medan det körs visas information liknande den i följande exempel: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 'main'.
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 >

Bläddra till Azure-appenBrowse to the Azure app

Bläddra till http://<app-name>.azurewebsites.net och lägg till några uppgifter i listan.Browse to http://<app-name>.azurewebsites.net and add a few tasks to the list.

Skärm bild av Azure App-exemplet med titeln uppgiftslista visar nya aktiviteter tillagda.

Grattis! Du kör en datadriven PHP-app i Azure App Service.Congratulations, you're running a data-driven PHP app in Azure App Service.

Uppdatera modell lokalt och distribuera omUpdate model locally and redeploy

I det här steget gör du en enkel ändring i task-datamodellen och webbappen och publicerar sedan uppdateringen till 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 uppgiftsscenariot ändrar du programmet så att du kan markera en uppgift som slutförd.For the tasks scenario, you modify the application so that you can mark a task as complete.

Lägga till en kolumnAdd a column

Visa det lokala terminalfönstret och gå till roten för Git-lagringsplatsen.In the local terminal window, navigate to the root of the Git repository.

Generera en ny databasmigrering för tasks-tabellen:Generate a new database migration for the tasks table:

php artisan make:migration add_complete_column --table=tasks

Det här kommandot visar namnet på migreringsfilen som genereras.This command shows you the name of the migration file that's generated. Leta reda på filen i database/migrations och öppna den.Find this file in database/migrations and open it.

Ersätt metoden up med följande kod:Replace the up method with the following code:

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

Föregående kod lägger till en boolesk kolumn i tasks-tabellen med namnet complete.The preceding code adds a boolean column in the tasks table called complete.

Ersätt metoden down med följande kod för återställningsåtgärden:Replace the down method with the following code for the rollback action:

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

Visa det lokala terminalfönstret och kör Laravel-databasemigreringar för att göra ändringen i den lokala databasen.In the local terminal window, run Laravel database migrations to make the change in the local database.

php artisan migrate

Modellen Task (se app/Task.php) mappar till tasks-tabellen som standard, baserat på Laravel-namngivningskonventionen.Based on the Laravel naming convention, the model Task (see app/Task.php) maps to the tasks table by default.

Uppdatera programlogikUpdate application logic

Öppna filen routes/web.php.Open the routes/web.php file. Här definieras programmets vägar och affärslogik.The application defines its routes and business logic here.

I slutet av filen lägger du till en väg med följande kod: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('/');
});

Föregående kod gör en enkel uppdatering till datamodellen genom att ändra värdet för complete.The preceding code makes a simple update to the data model by toggling the value of complete.

Uppdatera vynUpdate the view

Öppna filen resources/views/tasks.blade.php.Open the resources/views/tasks.blade.php file. Leta reda på starttaggen <tr> och ersätt den med:Find the <tr> opening tag and replace it with:

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

Föregående kod ändrar färg på raden beroende på om uppgiften är slutförd.The preceding code changes the row color depending on whether the task is complete.

På nästa rad finns följande kod:In the next line, you have the following code:

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

Ersätt hela raden med följande kod: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>

Föregående kod lägger till knappen Skicka som refererar till den väg som du angav tidigare.The preceding code adds the submit button that references the route that you defined earlier.

Testa ändringarna lokaltTest the changes locally

Visa det lokala terminalfönstret och kör utvecklingsservern från rotkatalogen på Git-lagringsplatsen.In the local terminal window, run the development server from the root directory of the Git repository.

php artisan serve

Om du vill se ändringen i uppgiftsstatusen går du till http://localhost:8000 och markerar kryssrutan.To see the task status change, navigate to http://localhost:8000 and select the checkbox.

Kryssruta lades till för uppgift

Om du vill stoppa PHP skriver du Ctrl + C i terminalen.To stop PHP, type Ctrl + C in the terminal.

Publicera ändringar till AzurePublish changes to Azure

Gå till det lokala terminalfönstret och kör Laravel-databasmigreringar med produktionsanslutningssträngen för att genomföra ändringen i Azure-databasen.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

Genomför alla ändringar på Git och skicka sedan kodändringarna till 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 main

När git push har slutförts så kan du gå till Azure-appen och prova de nya funktionerna.Once the git push is complete, navigate to the Azure app and test the new functionality.

Modell- och databasändringar som är publicerade i Azure

Om du har lagt till några uppgifter finns de kvar i databasen.If you added any tasks, they are retained in the database. Uppdateringar i dataschemat påverkar inte befintliga data.Updates to the data schema leave existing data intact.

Strömma diagnostikloggarStream diagnostic logs

När PHP-appen körs i Azure App Service kan du skicka konsolloggarna till din terminal.While the PHP application runs in Azure App Service, you can get the console logs piped to your terminal. På så sätt kan du få samma diagnostikmeddelanden för att felsöka programfel.That way, you can get the same diagnostic messages to help you debug application errors.

Om du vill starta logg strömningen använder du az webapp log tail kommandot i 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

Uppdatera Azure-app i webbläsaren så hämtas webbtrafik när loggströmningen har startats.Once log streaming has started, refresh the Azure app in the browser to get some web traffic. Du kan nu se konsolloggarna som skickas till terminalen.You can now see console logs piped to the terminal. Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.If you don't see console logs immediately, check again in 30 seconds.

Skriv Ctrl+C när som helst för att stoppa loggströmningen.To stop log streaming at any time, type Ctrl+C.

Om du vill komma åt konsolloggarna som genereras i din programkod i App Service aktiverar du diagnostisk loggning genom att köra följande kommando i Cloud Shell:To access the console logs generated from inside your application code in App Service, turn on diagnostics logging by running the following command in the Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --application-logging true --level Verbose

Möjliga värden för --level är: Error, Warning, Info och Verbose.Possible values for --level are: Error, Warning, Info, and Verbose. Varje efterföljande nivå omfattar den föregående nivån.Each subsequent level includes the previous level. Exempel: Error omfattar endast felmeddelanden och Verbose omfattar alla meddelanden.For example: Error includes only error messages, and Verbose includes all messages.

När diagnostisk loggning har aktiverats kör du följande kommando för att visa loggströmmen:Once diagnostic logging is turned on, run the following command to see the log stream:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.If you don't see console logs immediately, check again in 30 seconds.

Anteckning

Du kan även granska loggfilerna från din webbläsare via https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Skriv Ctrl+C när som helst för att stoppa loggströmningen.To stop log streaming at any time, type Ctrl+C.

Tips

Ett PHP-program kan använda standarden error_log() för att skapa utdata till konsolen.A PHP application can use the standard error_log() to output to the console. Exempelprogrammet använder den här metoden i app/Http/routes.php.The sample application uses this approach in app/Http/routes.php.

Laravel använder Monolog som loggningsprovider i webbramverket.As a web framework, Laravel uses Monolog as the logging provider. Information om hur du får Monolog att skicka meddelanden till konsolen finns i artikeln om PHP och hur du använder monolog för att skicka loggar till konsolen (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).

Hantera Azure-appenManage the Azure app

Gå till Azure-portalen för att hantera den app som du skapade.Go to the Azure portal to manage the app you created.

I den vänstra menyn, klickar du på App Services och därefter på namnet på din Azure-app.From the left menu, click App Services, and then click the name of your Azure app.

Portalnavigering till Azure-app

Nu visas översiktssidan för din app.You see your app's Overview page. Här kan du utföra grundläggande hanteringsåtgärder som att stoppa, starta, starta om, bläddra och ta bort.Here, you can perform basic management tasks like stop, start, restart, browse, and delete.

Menyn till vänster innehåller sidor för att konfigurera appen.The left menu provides pages for configuring your app.

App Service-sidan på Azure Portal

Rensa resurserClean up resources

I de föregående stegen skapade du Azure-resurser i en resursgrupp.In the preceding steps, you created Azure resources in a resource group. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell: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

Det kan några minuter att köra kommandot.This command may take a minute to run.

Nästa stegNext steps

I den här självstudiekursen lärde du dig att:In this tutorial, you learned how to:

  • Skapa en MySQL-databas i AzureCreate a MySQL database in Azure
  • ansluta en PHP-app till MySQLConnect a PHP app to MySQL
  • distribuera appen till AzureDeploy the app to Azure
  • uppdatera datamodellen och distribuera om appenUpdate the data model and redeploy the app
  • strömma diagnostikloggar från AzureStream diagnostic logs from Azure
  • hantera appen i Azure-portalen.Manage the app in the Azure portal

Gå vidare till nästa självstudie där du får lära dig att mappa ett anpassat DNS-namn till appen.Advance to the next tutorial to learn how to map a custom DNS name to the app.

Eller kolla ut andra resurser:Or, check out other resources: