Zelfstudie: een PHP- en MySQL-app bouwen in Azure App Service
Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie via het Windows-besturingssysteem. In deze zelfstudie wordt getoond hoe u een PHP-app in Azure maakt en hoe u deze verbinding laat maken met een MySQL-database. Wanneer u klaar bent, hebt u een Laravel-app die in Azure App Service op Windows wordt uitgevoerd.
Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie via het Linux-besturingssysteem. In deze zelfstudie wordt getoond hoe u een PHP-app in Azure maakt en hoe u deze verbinding laat maken met een MySQL-database. Wanneer u klaar bent, hebt u een Laravel-app die in Azure App Service op Linux wordt uitgevoerd.
In deze zelfstudie leert u het volgende:
- Een MySQL-database in Azure maken
- Een PHP-app verbinden met MySQL
- De app implementeren in Azure
- Het gegevensmodel bijwerken en de app opnieuw implementeren
- Logboeken met diagnostische gegevens vanaf Azure streamen
- De app in Azure Portal beheren
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
Vereisten voor het voltooien van deze zelfstudie:
- Git installeren
- Installeer PHP 5.6.4 of hoger
- Composer installeren
- Schakel de volgende PHP-extensies in die nodig zijn voor Laravel: OpenSSL, PDO-MySQL, Mbstring, Tokenizer, XML
- MySQL installeren en starten
Gebruik de bash-omgeving in Azure Cloud shell.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Lokale MySQL voorbereiden
In deze stap maakt u een database in uw lokale MySQL-server voor gebruik in deze zelfstudie.
Verbinding maken met lokale MySQL-server
Maak in een terminalvenster verbinding met uw lokale MySQL-server. U kunt dit terminalvenster gebruiken om alle opdrachten in deze zelfstudie uit te voeren.
mysql -u root -p
Als u wordt gevraagd om een wachtwoord, voert u het wachtwoord in voor het root-account. Als u het wachtwoord van uw hoofdaccount niet meer weet, raadpleegt u MySQL: Het hoofdwachtwoord opnieuw instellen.
Als uw opdracht succesvol is uitgevoerd, wordt uw MySQL-server uitgevoerd. Als dit niet het geval is, zorgt u ervoor dat de lokale MySQL-server is gestart door de Stappen na installatie van MySQL te volgen.
Lokaal een database maken
Maak een database bij de prompt
mysql.CREATE DATABASE sampledb;Sluit uw serververbinding door
quitte typen.quit
Lokaal een PHP-app maken
In deze stap krijgt u een Laravel-voorbeeld-app, configureert u de databaseverbinding en voert u deze lokaal uit.
Het voorbeeld klonen
Voer in het terminalvenster de opdracht cd naar een werkmap uit.
Kloon de voorbeeldopslagplaats en wijzig in de hoofdmap van de opslagplaats.
git clone https://github.com/Azure-Samples/laravel-tasks cd laravel-tasksZorg ervoor dat de standaard branch
mainis.git branch -m mainTip
De naamswijziging van de vertakking is niet vereist door App Service. Omdat veel opslagplaatsen hun standaardvertakking echter wijzigen in , laat deze zelfstudie u ook zien hoe u een opslagplaats
mainimplementeert vanuitmain. Zie Change deployment branch (Implementatiebranche wijzigen) voor meer informatie.Installeer de vereiste pakketten.
composer install
MySQL-verbinding configureren
Maak een bestand met de naam .env in de hoofdmap van de opslagplaats. Kopieer de volgende variabelen in het bestand .env. Vervang de tijdelijke aanduiding <root_password> met het wachtwoord van de MySQL-hoofdgebruiker.
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>
Zie Laravel-omgeving configureren voor informatie over hoe Laravel het .env-bestand gebruikt.
Het voorbeeld lokaal uitvoeren
Voer Laravel-databasemigraties uit om de tabellen te maken die de toepassing nodig heeft. Als u wilt zien welke tabellen worden gemaakt in de migraties, zoek dan in de map database/migrations in de Git-opslagplaats.
php artisan migrateGenereer een nieuwe sleutel voor de Laravel-toepassing.
php artisan key:generateVoer de toepassing uit.
php artisan serveGa naar
http://localhost:8000in een browser. Voeg een paar taken op de pagina toe.
Typ
Ctrl + Cin de terminal om PHP te stoppen.
MySQL in Azure maken
In deze stap maakt u een MySQL-database in Azure Database for MySQL. Later configureert u de PHP-toepassing om verbinding te maken met deze database.
Een resourcegroep maken
Een resourcegroep is een logische container waarin Azure-resources, zoals web-apps, databases en opslagaccounts, worden geïmplementeerd en beheerd. U kunt bijvoorbeeld later de hele resourcegroep in één stap verwijderen.
Maak een resourcegroep in Cloud Shell met de opdracht az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie Europa - west. Als u alle ondersteunde locaties voor App Service in de Gratis laag wilt zien, voert u de opdracht az appservice list-locations --sku FREE uit.
az group create --name myResourceGroup --location "West Europe"
In het algemeen maakt u een resourcegroep en resources in een regio bij u in de buurt.
Wanneer de opdracht is voltooid, laat een JSON-uitvoer u de eigenschappen van de resource-groep zien.
Een MySQL-server maken
Maak vanuit Cloud Shell een server in Azure Database for MySQL met behulp van de opdracht az mysql server create.
Met de volgende opdracht vervangt u de tijdelijke aanduiding <mysql-server-name> door een unieke servernaam, de <admin-user> door een gebruikersnaam en de tijdelijke aanduiding <admin-password> door een wachtwoord. De servernaam wordt gebruikt als onderdeel van het MySQL-eindpunt (https://<mysql-server-name>.mysql.database.azure.com). De naam moet dus uniek zijn voor alle servers in Azure. Zie Een Azure Database for MySQL-server maken voor meer informatie over het selecteren van de MySQL DB-SKU.
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
Wanneer de MySQL-server is gemaakt, toont de Azure CLI informatie die lijkt op de informatie in het volgende voorbeeld:
{
"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 >
}
Een serverfirewall configureren
Maak in de Cloud Shell een firewallregel voor uw MySQL-server om clientverbindingen toe te staan met behulp van de opdracht
az mysql server firewall-rule create. Als zowel het IP-beginadres als het IP-eindadres zijn ingesteld op 0.0.0.0, wordt de firewall alleen geopend voor andere 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.0Tip
U kunt uw firewallregel nog beperkender maken door alleen de uitgaande IP-adressen te gebruiken die in uw app worden gebruikt.
Voer in Cloud Shell de opdracht opnieuw uit om toegang vanaf uw lokale computer mogelijk te maken door <your-ip-address> te vervangen door uw lokale IPv4 IP-adres.
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>
Een productiedatabase maken
Maak in het lokale terminalvenster verbinding met de MySQL-server in Azure. Gebruik de waarde die u eerder hebt opgegeven voor <admin-user> en <mysql-server-name> . Wanneer u wordt gevraagd om een wachtwoord, gebruikt u het wachtwoord dat u hebt opgegeven bij het maken van de database in Azure.
mysql -u <admin-user>@<mysql-server-name> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -pMaak een database bij de prompt
mysql.CREATE DATABASE sampledb;Maak een databasegebruiker met de naam phpappuser en geef deze alle bevoegdheden in de
sampledb-database. Gebruik ten behoeve van de eenvoud van de zelfstudie MySQLAzure2017 als wachtwoord.CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';Sluit uw serververbinding door
quitte typen.quit
App verbinden met Azure MySQL
In deze stap verbindt u de PHP-toepassing met de MySQL-database die u in Azure Database for MySQL hebt gemaakt.
Verbinding met de database configureren
Maak in de hoofdmap van de opslagplaats een .env.production-bestand en kopieer de volgende variabelen ernaartoe. Vervang de tijdelijke aanduiding <mysql-server-name>_ in zowel DB_HOST als 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
Sla de wijzigingen op.
Tip
Dit bestand is voor het beveiligen van uw MySQL-verbindingsgegevens al uitgesloten van de Git-opslagplaats (zie .gitignore in de hoofdmap van de opslagplaats). Later leert u hoe u omgevingsvariabelen in App Service configureert om verbinding te maken met uw database in Azure Database for MySQL. Met omgevingsvariabelen heeft u het .env-bestand in App Service niet nodig.
TLS-/SSL-certificaat configureren
Azure Database for MySQL dwingt standaard TLS-verbindingen van clients af. Voor verbinding met uw MySQL-database in Azure moet u het .pem-certificaat gebruiken dat is opgegeven door Azure Database for MySQL.
Open config/database.php en voeg de parameters sslmode en options toe aan connections.mysql, zoals wordt weergegeven in de volgende 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',
] : []
],
Het certificaat BaltimoreCyberTrustRoot.crt.pem is in deze zelfstudie voor uw gemak in de opslagplaats opgenomen.
De toepassing lokaal testen
Voer Laravel-databasemigraties uit met .env.production als het omgevingsbestand om de tabellen te maken in uw MySQL-database in Azure Database for MySQL. Vergeet niet dat . env.production de verbindingsgegevens heeft voor uw MySQL-database in Azure.
php artisan migrate --env=production --force. env.production heeft nog geen geldige toepassingssleutel. Genereer hiervoor een nieuwe in de terminal.
php artisan key:generate --env=production --forceVoer de voorbeeldtoepassing uit met . env.production als het omgevingsbestand.
php artisan serve --env=productionNavigeer naar
http://localhost:8000. Als de pagina zonder fouten wordt geladen, maakt de PHP-toepassing verbinding met de MySQL-database in Azure.Voeg een paar taken op de pagina toe.

Typ
Ctrl + Cin de terminal om PHP te stoppen.
Uw wijzigingen doorvoeren
Voer de volgende Git-opdrachten uit om uw wijzigingen door te voeren:
git add .
git commit -m "database.php updates"
Uw app kan worden geïmplementeerd.
Implementeren in Azure
In deze stap implementeert u de met MySQL verbonden PHP-toepassing naar Azure App Service.
Een implementatiegebruiker configureren
FTP en lokale Git kunnen worden geïmplementeerd in een Azure-web-app met behulp van een implementatiegebruikers. Zodra u deze implementatiegebruiker hebt gemaakt, kunt u deze voor al uw Azure-implementaties gebruiken. Uw gebruikersnaam en wachtwoord voor implementatie op accountniveau verschillen van de referenties voor uw Azure-abonnement.
Als u de implementatiegebruiker wilt configureren, voert u de opdracht az webapp deployment user set uit in Azure Cloud Shell. Vervang <username> en <password> door de gebruikersnaam en het wachtwoord van de gebruiker van de implementatie.
- De gebruikersnaam moet uniek zijn binnen Azure en voor lokale Git-pushes en mag het symbool '@' niet bevatten.
- Het wachtwoord moet ten minste acht tekens lang zijn en minimaal twee van de volgende drie typen elementen bevatten: letters, cijfers en symbolen.
az webapp deployment user set --user-name <username> --password <password>
De JSON-uitvoer toont het wachtwoord als null. Als er een 'Conflict'. Details: 409-fout optreedt, wijzigt u de gebruikersnaam. Als er een 'Bad Request'. Details: 400-fout optreedt, kiest u een sterker wachtwoord.
Noteer uw gebruikersnaam en wachtwoord om te gebruiken bij het implementeren van uw web-apps.
Een App Service-plan maken
Maak in Cloud Shell een App Service-plan met de opdracht az appservice plan create.
In het volgende voorbeeld wordt een App Service-plan gemaakt met de naam myAppServicePlan en de prijscategorie Gratis:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
Wanneer het App Service-plan is gemaakt, toont de Azure CLI soortgelijke informatie als in het volgende voorbeeld:
{
"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
}
Maak in Cloud Shell een App Service-plan met de opdracht az appservice plan create.
In het volgende voorbeeld wordt een App Service-plan gemaakt met de naam myAppServicePlan en de prijscategorie Gratis:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux
Wanneer het App Service-plan is gemaakt, toont de Azure CLI soortgelijke informatie als in het volgende voorbeeld:
{
"freeOfferExpirationTime": null,
"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
}
Een webtoepassing maken
Een web-app maken in het App Service-plan myAppServicePlan.
In Cloud Shell kunt u de opdracht az webapp create gebruiken. Vervang in het volgende voorbeeld <app-name> door een unieke naam (geldige tekens zijn a-z, 0-9, en -). De runtime is ingesteld op PHP|7.2. Voer az webapp list-runtimes --linux uit als u alle ondersteunde runtimes wilt zien.
# 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
Wanneer de web-app is gemaakt, toont de Azure CLI soortgelijke uitvoer als in het volgende voorbeeld:
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. >
}
U hebt een nieuwe lege web-app gemaakt, met Git-implementatie ingeschakeld.
Notitie
De URL van de externe Git wordt weergegeven in de eigenschap deploymentLocalGitUrl, met de indeling https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Sla deze URL op, want u hebt deze later nodig.
Een web-app maken in het App Service-plan myAppServicePlan.
In Cloud Shell kunt u de opdracht az webapp create gebruiken. Vervang in het volgende voorbeeld <app-name> door een unieke naam (geldige tekens zijn a-z, 0-9, en -). De runtime is ingesteld op PHP|7.2. Voer az webapp list-runtimes --linux uit als u alle ondersteunde runtimes wilt zien.
# 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
Wanneer de web-app is gemaakt, toont de Azure CLI soortgelijke uitvoer als in het volgende voorbeeld:
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. >
}
U hebt een nieuwe lege web-app gemaakt, met Git-implementatie ingeschakeld.
Notitie
De URL van de externe Git wordt weergegeven in de eigenschap deploymentLocalGitUrl, met de indeling https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Sla deze URL op, want u hebt deze later nodig.
Database-instellingen configureren
In App Service stelt u de omgevingsvariabelen in op app-instellingen met behulp van de opdracht az webapp config appsettings set.
De volgende opdracht configureert de app-instellingen DB_HOST, DB_DATABASE, DB_USERNAME, en DB_PASSWORD. Vervang de tijdelijke aanduidingen <app-name> en <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"
U kunt de PHP-methode getenv gebruiken voor toegang tot de instellingen. De Laravel-code gebruikt een env-wrapper boven de PHP getenv. Zo is de MySQL-configuratie in config/database.php bijvoorbeeld vergelijkbaar met de volgende code:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
...
],
Laravel-omgevingsvariabelen configureren en instellen
Laravel heeft een toepassingssleutel nodig in App Service. U kunt deze configureren met app-instellingen.
In het lokale terminalvenster gebruikt u
php artisanvoor het genereren van een nieuwe toepassingssleutel zonder deze op te slaan in .env.php artisan key:generate --showIn de Cloud Shell stelt u de toepassingssleutel in de App Service-app in met behulp van de opdracht
az webapp config appsettings set. Vervang de tijdelijke aanduidingen <app-name> en <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"geeft Laravel de opdracht foutopsporingsinformatie te retourneren wanneer de geïmplementeerde app fouten tegenkomt. Als een productietoepassing wordt uitgevoerd, stelt u deze in opfalse, wat een veiliger optie is.
Het pad van de virtuele toepassing instellen
Stel het pad van de virtuele toepassing voor de app in. Deze stap is vereist omdat de levenscyclus van de Laravel-toepassing in de openbare map begint en niet in de hoofdmap van de toepassing. Andere PHP-frameworks waarvan de levenscyclus start in de hoofdmap, kunnen functioneren zonder handmatige configuratie van het pad voor de virtuele toepassing.
Stel in de Cloud Shell het pad voor de virtuele toepassing in met behulp van de opdracht az resource update. Vervang de tijdelijke aanduiding <app-name> .
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
Azure App Service wijst standaard het hoofdpad voor de virtuele toepassing ( / ) toe aan de hoofdmap van de geïmplementeerde toepassingsbestanden (sites\wwwroot).
Levenscyclus van de Laravel-toepassing begint in de map public en niet in de hoofdmap van de toepassing. De standaardinstallatiekopie van PHP Docker voor App Service maakt gebruik van Apache, dit laat u de DocumentRoot niet aanpassen voor Laravel. U kunt echter .htaccess gebruiken om alle aanvragen te herschrijven, zodat zij verwijzen naar /openbaar in plaats van naar de hoofdmap. In de hoofdmap van de opslagplaats is voor dit doel al een .htaccess toegevoegd. Uw Laravel-toepassing is hiermee gereed om te worden geïmplementeerd.
Zie Sitehoofdmap wijzigen voor meer informatie.
Pushen naar Azure vanaf Git
Omdat u de vertakking implementeert, moet u de standaardimplementatievertakking voor uw
mainApp Service-app instellenmainop (zie Implementatievertakking wijzigen). Stel in Cloud ShellDEPLOYMENT_BRANCHapp-instelling in met de opdrachtaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'Voeg, eenmaal terug in het lokale terminalvenster, een externe Azure-instantie toe aan uw lokale Git-opslagplaats. Vervang <deploymentLocalGitUrl-from-create-step> door de URL van de externe Git-instantie die u hebt opgeslagen bij Een web-app maken.
git remote add azure <deploymentLocalGitUrl-from-create-step>Push naar de externe Azure-instantie om uw app te implementeren met de volgende opdracht. Wanneer Git Credential Manager u om referenties vraagt, geeft u de referenties op die u hebt gemaakt in Een implementatiegebruiker configureren, en niet de referenties die u gebruikt om u aan te melden bij de Azure-portal.
git push azure mainHet kan enkele minuten duren voor deze opdracht is uitgevoerd. De opdracht geeft informatie weer die lijkt op het volgende voorbeeld:
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 >
Notitie
U merkt dat het implementatieproces aan het einde Composer-pakketten installeert. In App Service worden deze automatische taken tijdens de standaardimplementatie niet uitgevoerd, dus bevat deze voorbeeldopslagplaats drie extra bestanden in de hoofdmap om deze in te schakelen:
.deployment- Dit bestand draagt App Service op ombash deploy.shuit te voeren als het aangepaste implementatiescript.deploy.sh: het aangepaste implementatiescript. Als u het bestand bekijkt, ziet u datphp composer.phar installwordt uitgevoerd nanpm install.composer.phar- Het Composer-pakketbeheer.
U kunt deze aanpak gebruiken om een stap toe te voegen aan de op Git gebaseerde implementatie naar App Service. Zie het Script voor aangepaste implementatie voor meer informatie.
Omdat u de vertakking implementeert, moet u de standaardimplementatievertakking voor uw
mainApp Service-app instellenmainop (zie Implementatievertakking wijzigen). Stel in Cloud ShellDEPLOYMENT_BRANCHapp-instelling in met de opdrachtaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'Voeg, eenmaal terug in het lokale terminalvenster, een externe Azure-instantie toe aan uw lokale Git-opslagplaats. Vervang <deploymentLocalGitUrl-from-create-step> door de URL van de externe Git-instantie die u hebt opgeslagen bij Een web-app maken.
git remote add azure <deploymentLocalGitUrl-from-create-step>Push naar de externe Azure-instantie om uw app te implementeren met de volgende opdracht. Wanneer Git Credential Manager u om referenties vraagt, geeft u de referenties op die u hebt gemaakt in Een implementatiegebruiker configureren, en niet de referenties die u gebruikt om u aan te melden bij de Azure-portal.
git push azure mainHet kan enkele minuten duren voor deze opdracht is uitgevoerd. De opdracht geeft informatie weer die lijkt op het volgende voorbeeld:
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 >
Naar de Azure-app bladeren
Blader naar http://<app-name>.azurewebsites.net en voeg een paar taken toe aan de lijst.
U voert nu een gegevensgestuurde PHP-app uit in Azure App Service.
Het model lokaal bijwerken en opnieuw implementeren
In deze stap maakt u een eenvoudige wijziging in het task-gegevensmodel en de web-app en publiceert u de update vervolgens naar Azure.
Voor het takenscenario wijzigt u de toepassing, zodat u een taak als voltooid kunt markeren.
Een kolom toevoegen
Ga in het lokale terminalvenster naar de hoofdmap van de Git-opslagplaats.
Genereer een nieuwe databasemigratie voor de
tasks-tabel:php artisan make:migration add_complete_column --table=tasksDeze opdracht laat u de naam zien van het migratiebestand dat wordt gegenereerd. Zoek dit bestand in database/migrations en open het.
Vervang de
up-methode door de volgende code:public function up() { Schema::table('tasks', function (Blueprint $table) { $table->boolean('complete')->default(False); }); }De bovenstaande code voegt een Booleaanse kolom toe aan de tabel
tasksmet de naamcomplete.Vervang de methode
downdoor de volgende code voor de terugdraaiactie:public function down() { Schema::table('tasks', function (Blueprint $table) { $table->dropColumn('complete'); }); }Voer in het lokale terminalvenster Laravel-database-migraties uit om de wijziging in de lokale database te maken.
php artisan migrateOp basis van de Laravel-naamgevingsconventie wordt het model
Task(zie app/Task.php) standaard toegewezen aan detasks-tabel.
Toepassingslogica bijwerken
Open het bestand routes/web.php. De toepassing definieert hier de routes en bedrijfslogica.
Voeg aan het einde van het bestand een route toe met de volgende 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('/'); });De bovenstaande code voert een eenvoudige update uit op het gegevensmodel door het omschakelen van de waarde van
complete.
De weergave bijwerken
Open het bestand resources/views/tasks.blade.php. Zoek de
<tr>-openingstag en vervang deze door:<tr class="{{ $task->complete ? 'success' : 'active' }}" >De bovenstaande code verandert de rijkleur, afhankelijk van of de taak voltooid is.
U hebt de volgende code in deze regel:
<td class="table-text"><div>{{ $task->name }}</div></td>Vervang de gehele regel door de volgende 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>De bovenstaande code voegt de verzendknop toe die verwijst naar de route die u eerder hebt gedefinieerd.
De wijzigingen lokaal testen
Voer in het lokale terminalvenster de ontwikkelaarsserver uit vanuit de hoofdmap van de Git-opslagplaats.
php artisan serveOm de status van de taak te zien wijzigen, gaat u naar
http://localhost:8000en selecteert u het selectievakje.
Typ
Ctrl + Cin de terminal om PHP te stoppen.
Wijzigingen publiceren in Azure
Voer in het lokale terminalvenster Laravel-databasemigraties uit met de productieverbindingsreeks om de wijziging te maken in de Azure-database.
php artisan migrate --env=production --forceVoer uw wijzigingen door in Git en push de codewijzigingen vervolgens naar Azure.
git add . git commit -m "added complete checkbox" git push azure mainZodra
git pushis voltooid, gaat u naar de Azure-app en probeert u de nieuwe functionaliteit uit.
Als u taken hebt toegevoegd, worden deze in de database bewaard. Updates van het gegevensschema laten bestaande gegevens intact.
Diagnostische logboeken streamen
Terwijl uw PHP-toepassing in Azure App Service wordt uitgevoerd, kunt u de consolelogboeken doorgesluisd krijgen naar uw terminal. Op die manier krijgt u de dezelfde diagnostische berichten om toepassingsfouten op te sporen.
Gebruik voor het starten van logboekstreaming de opdracht az webapp log tail in de Cloud Shell.
az webapp log tail --name <app_name> --resource-group myResourceGroup
Nadat logboekstreaming is gestart, vernieuwt u de Azure-app in de browser om wat webverkeer te genereren. U kunt nu zien dat consolelogboeken worden doorgegeven aan de terminal. Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
U kunt op elk gewenst moment Ctrl+C typen om te stoppen met logboekstreaming.
Als u toegang wilt tot de consolelogboeken die worden gegenereerd binnen uw toepassingscode in de App Service, schakelt u diagnostische logboekregistratie in door de volgende opdracht in de Cloud Shell uit te voeren:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Mogelijk waarden voor --level zijn: Error, Warning, Info en Verbose. Elk hoger niveau omvat het vorige niveau. Bijvoorbeeld: Error omvat alleen foutberichten en Verbose omvat alle berichten.
Nadat diagnostische logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
Notitie
U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker.
U kunt op elk gewenst moment Ctrl+C typen om te stoppen met logboekstreaming.
Tip
Een PHP-toepassing kan gebruikmaken van de standaard error_log() voor uitvoer naar de console. De voorbeeldtoepassing hanteert deze benadering in app/Http/routes.php.
Als webframework maakt Laravel gebruik van Monolog als provider voor logboekregistratie. Als u wilt weten hoe u met Monolog berichten uitvoert naar de console, raadpleegt u PHP: Met Monolog berichten registreren bij de console (php://out).
De Azure-app beheren
Ga naar Azure Portal om de app te beheren die u hebt gemaakt.
Klik in het linkermenu op App Services en klik op de naam van uw Azure-app.

De pagina Overzicht van uw app wordt weergegeven. Hier kunt u algemene beheertaken uitvoeren, zoals stoppen, starten, opnieuw starten, bladeren en verwijderen.
Het linkermenu bevat een aantal pagina's voor het configureren van uw app.

Resources opschonen
In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:
az group delete --name myResourceGroup
Het kan een minuut duren voordat deze opdracht is uitgevoerd.
Volgende stappen
In deze zelfstudie heeft u het volgende geleerd:
- Een MySQL-database in Azure maken
- Een PHP-app verbinden met MySQL
- De app implementeren in Azure
- Het gegevensmodel bijwerken en de app opnieuw implementeren
- Logboeken met diagnostische gegevens vanaf Azure streamen
- De app in Azure Portal beheren
Ga door naar de volgende zelfstudie om te leren hoe u een aangepaste DNS-naam aan een web-app kunt toewijzen.
U kunt ook andere resources bekijken:
