Zelfstudie: Een PHP-, MySQL- en Redis-app implementeren in Azure-app Service

Deze zelfstudie laat zien hoe u een beveiligde PHP-app maakt in Azure-app Service die is verbonden met een MySQL-database (met behulp van een flexibele Azure Database for MySQL-server). U implementeert ook een Azure Cache voor Redis om de cachecode in te schakelen in uw toepassing. Azure-app Service is een uiterst schaalbare webhostingservice die eenvoudig apps kan implementeren in Windows of Linux. Wanneer u klaar bent, hebt u een Laravel-app die in Azure App Service op Linux wordt uitgevoerd.

Screenshot of the Azure app example titled Task List showing new tasks added.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Voorbeeldtoepassing

Als u deze zelfstudie wilt volgen, kloont of downloadt u de Laravel-voorbeeldtoepassing uit de opslagplaats:

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

Ga als volgt te werk als u de toepassing lokaal wilt uitvoeren:

  • Configureer in .env de database-instellingen (zoals DB_DATABASE, DB_USERNAMEen DB_PASSWORD) met behulp van instellingen in uw lokale MySQL-database. U hebt een lokale MySQL-server nodig om dit voorbeeld uit te voeren.

  • Start Laravel vanuit de hoofdmap van de opslagplaats met de volgende opdrachten:

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

1 - App Service- en MySQL-resources maken

In deze stap maakt u de Azure-resources. Met de stappen in deze zelfstudie maakt u een App Service- en Azure Database for MySQL-configuratie die standaard beveiligd is. Voor het aanmaakproces geeft u het volgende op:

  • De naam voor de web-app. Dit is de naam die wordt gebruikt als onderdeel van de DNS-naam voor uw web-app in de vorm van https://<app-name>.azurewebsites.net.
  • De runtime voor de app. Hier selecteert u de versie van PHP die u voor uw app wilt gebruiken.
  • De resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).

Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.

Stap 1: In Azure Portal:

  1. Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
  2. Selecteer het item met het label Web App + Database onder de kop Marketplace . U kunt ook rechtstreeks naar de wizard voor het maken navigeren.

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

Stap 2: Vul op de pagina Web-app en database maken het formulier als volgt in.

  1. Resourcegroep → Nieuwe maken selecteren en een naam van msdocs-laravel-mysql-tutorial gebruiken.
  2. Regio → Elke Azure-regio bij u in de buurt.
  3. Naammsdocs-laravel-mysql-XYZ waarbij XYZ uit drie willekeurige tekens bestaat. Deze naam moet uniek zijn binnen Azure.
  4. RuntimestackPHP 8.2.
  5. Azure Cache voor Redis toevoegen? → Ja.
  6. HostingabonnementBasic. Wanneer u klaar bent, kunt u later omhoog schalen naar een prijscategorie voor productie.
  7. MySQL - Flexible Server is standaard voor u geselecteerd als database-engine. Azure Database for MySQL is een volledig beheerde MySQL-database als een service in Azure, die compatibel is met de nieuwste community-edities.
  8. Selecteer Controleren + maken.
  9. Nadat de validatie is voltooid, selecteert u Maken.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Stap 3: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . U wordt rechtstreeks naar de App Service-app gebracht, maar de volgende resources worden gemaakt:

  • Resourcegroep → De container voor alle gemaakte resources.
  • App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
  • App Service → Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
  • Virtueel netwerk → geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
  • Privé-eindpunten → Access-eindpunten voor de databaseserver en de Redis-cache in het virtuele netwerk.
  • Netwerkinterfaces → Vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
  • Flexibele Azure Database for MySQL-server → alleen toegankelijk vanaf het privé-eindpunt. Er worden een database en een gebruiker voor u gemaakt op de server.
  • Azure Cache voor Redis → alleen toegankelijk vanaf het privé-eindpunt.
  • Privé-DNS zones → DNS-omzetting van de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.

A screenshot showing the deployment process completed.

2 - Databaseconnectiviteit instellen

Stap 1: Selecteer Configuratie in het linkermenu op de pagina App Service.

A screenshot showing how to open the configuration page in App Service.

Stap 2:

  1. Zoek app-instellingen die beginnen met AZURE_MYSQL_. Ze zijn gegenereerd op basis van de nieuwe MySQL-database door de wizard maken.
  2. Zoek ook app-instellingen die beginnen met AZURE_REDIS_. Ze zijn gegenereerd op basis van de nieuwe Redis-cache door de wizard maken. Als u uw toepassing wilt instellen, hebt u alleen deze naam nodig.
  3. Als u wilt, kunt u de knop Bewerken rechts van elke instelling selecteren en de waarde ervan bekijken of kopiëren. Later wijzigt u de toepassingscode om deze instellingen te gebruiken.

A screenshot showing how to create an app setting.

Stap 3: Maak op het tabblad Toepassingsinstellingen van de pagina Configuratie een CACHE_DRIVER instelling:

  1. Selecteer Nieuwe toepassingsinstelling.
  2. Voer in het veld Naam CACHE_DRIVER in.
  3. Voer redis in het veld Waarde in.
  4. Selecteer OK. CACHE_DRIVER wordt al gebruikt in de Laravel-toepassingscode. Met deze instelling moet Laravel Redis als cache gebruiken.

A screenshot showing how to see the autogenerated connection string.

Stap 4: Maak met dezelfde stappen in stap 3 de volgende app-instellingen:

  • MYSQL_ATTR_SSL_CA: Gebruik /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem als waarde. Deze app-instelling verwijst naar het pad van het TLS/SSL-certificaat dat u nodig hebt voor toegang tot de MySQL-server. Deze is voor het gemak opgenomen in de voorbeeldopslagplaats.
  • LOG_CHANNEL: Gebruik stderr als waarde. Deze instelling vertelt Laravel om logboeken door te geven aan stderr, waardoor deze beschikbaar is voor de App Service-logboeken.
  • APP_DEBUG: Gebruik waar als waarde. Het is een Laravel-foutopsporingsvariabele waarmee foutopsporingsmoduspagina's mogelijk zijn.
  • APP_KEY: Gebruik base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= als de waarde. Het is een Laravel-versleutelingsvariabele.
  1. Selecteer Opslaan in de menubalk bovenaan.
  2. Wanneer u hierom wordt gevraagd, selecteert u Doorgaan.

A screenshot showing how to save settings in the configuration page.

Belangrijk

De APP_KEY waarde wordt hier voor het gemak gebruikt. Voor productiescenario's moet deze specifiek worden gegenereerd voor uw implementatie met behulp van php artisan key:generate --show de opdrachtregel.

3 - Voorbeeldcode implementeren

In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard wordt met elke git push gitHub-opslagplaats de build- en implementatieactie gestart. U gaat enkele wijzigingen aanbrengen in uw codebase met Visual Studio Code rechtstreeks in de browser, waarna GitHub Actions automatisch voor u kan worden geïmplementeerd.

Stap 1: In een nieuw browservenster:

  1. Meld u aan bij uw GitHub-account.
  2. Navigeer naar https://github.com/Azure-Samples/laravel-tasks.
  3. Selecteer Vorken.
  4. Selecteer Een fork maken.

A screenshot showing how to create a fork of the sample GitHub repository.

Stap 2: Open Visual Studio Code op de GitHub-pagina in de browser door op de . toets te drukken.

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

Stap 3: Open in Visual Studio Code in de browser config/database.php in de verkenner. Zoek de mysql sectie en breng de volgende wijzigingen aan:

  1. Vervang DB_HOST door AZURE_MYSQL_HOST.
  2. Vervang DB_DATABASE door AZURE_MYSQL_DBNAME.
  3. Vervang DB_USERNAME door AZURE_MYSQL_USERNAME.
  4. Vervang DB_PASSWORD door AZURE_MYSQL_PASSWORD.
  5. Vervang DB_PORT door AZURE_MYSQL_PORT. Houd er rekening mee dat deze AZURE_MYSQL_ instellingen voor u zijn gemaakt door de wizard Maken.

A screenshot showing Visual Studio Code in the browser and an opened file with modified MySQL variables.

Stap 4: Schuif in config/database.php naar de sectie Redis cache en breng de volgende wijzigingen aan:

  1. Vervang REDIS_HOST door AZURE_REDIS_HOST.
  2. Vervang REDIS_PASSWORD door AZURE_REDIS_PASSWORD.
  3. Vervang REDIS_PORT door AZURE_REDIS_PORT.
  4. Vervang REDIS_CACHE_DB door AZURE_REDIS_DATABASE.
  5. Voeg in dezelfde sectie een regel toe met 'scheme' => 'tls',. Deze configuratie vertelt Laravel om versleuteling te gebruiken om verbinding te maken met Redis. Houd er rekening mee dat deze AZURE_REDIS_ instellingen voor u zijn gemaakt door de wizard Maken.

A screenshot showing Visual Studio Code in the browser and an opened file with modified Redis variables.

Stap 5:

  1. Selecteer de extensie Broncodebeheer .
  2. Typ in het tekstvak een doorvoeringsbericht zoals Configure DB & Redis variables.
  3. Selecteer Doorvoeren en pushen.

A screenshot showing the changes being committed and pushed to GitHub.

Stap 6: Ga terug naar de pagina App Service en selecteer in het linkermenu Implementatiecentrum.

A screenshot showing how to open the deployment center in App Service.

Stap 7: Op de pagina Implementatiecentrum:

  1. Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
  2. Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
  3. Selecteer uw account in Organisatie.
  4. Selecteer laravel-task in Opslagplaats.
  5. Selecteer in Vertakking de hoofdmap.
  6. Selecteer Opslaan in het bovenste menu. App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de .github/workflows map.

A screenshot showing how to configure CI/CD using GitHub Actions.

Stap 8: Op de pagina Implementatiecentrum:

  1. Selecteer Logboeken. Er is al een implementatieuitvoering gestart.
  2. Selecteer build-/deploy-logboeken in het logboekitem voor de implementatieuitvoering.

A screenshot showing how to open deployment logs in the deployment center.

Stap 9: U gaat naar uw GitHub-opslagplaats en ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Voltooid weergeeft. Het duurt ongeveer 15 minuten.

A screenshot showing a GitHub run in progress.

4 - Databaseschema genereren

De wizard Maken plaatst de MySQL-databaseserver achter een privé-eindpunt, zodat deze alleen toegankelijk is vanuit het virtuele netwerk. Omdat de App Service-app al is geïntegreerd met het virtuele netwerk, is de eenvoudigste manier om databasemigraties uit te voeren met uw database rechtstreeks vanuit de App Service-container.

Stap 1: Ga terug naar de App Service-pagina en selecteer SSH in het linkermenu.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Stap 2: In de SSH-terminal:

  1. Voer cd /home/site/wwwroot uit. Hier volgen al uw geïmplementeerde bestanden.
  2. Voer php artisan migrate --force uit. Als dit lukt, maakt App Service verbinding met de MySQL-database. Alleen wijzigingen in bestanden in /home kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten /home zijn niet behouden.

A screenshot showing the commands to run in the SSH shell and their output.

5 - Hoofdmap van site wijzigen

De levenscyclus van laravel-toepassingen begint in plaats daarvan in de /public directory. De standaard PHP-container voor App Service maakt gebruik van Nginx, die begint in de hoofdmap van de toepassing. Als u de hoofdmap van de site wilt wijzigen, moet u het Nginx-configuratiebestand wijzigen in de PHP-container (/etc/nginx/sites-available/default). Voor uw gemak bevat de voorbeeldopslagplaats een aangepast configuratiebestand met de naam Standaard. Zoals eerder vermeld, wilt u dit bestand niet vervangen met behulp van /home de SSH-shell, omdat de wijziging zich buiten bevindt en verloren gaat nadat de app opnieuw is opgestart.

Stap 1:

  1. Selecteer Configuratie in het linkermenu.
  2. Selecteer het tabblad Algemene instellingen.

A screenshot showing how to open the general settings tab in the configuration page of App Service.

Stap 2: Op het tabblad Algemene instellingen:

  1. Voer in het vak Opstartopdracht de volgende opdracht in: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. Selecteer Opslaan. De opdracht vervangt het Nginx-configuratiebestand in de PHP-container en start Nginx opnieuw op. Deze configuratie zorgt ervoor dat dezelfde wijziging wordt aangebracht in de container telkens wanneer deze wordt gestart.

A screenshot showing how to configure a startup command in App Service.

6 - Blader naar de app

Stap 1: Op de App Service-pagina:

  1. Selecteer Overzicht in het linkermenu.
  2. Selecteer de URL van uw app. U kunt ook rechtstreeks naar https://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.

Stap 2: Voeg een paar taken toe aan de lijst. Gefeliciteerd, u voert een beveiligde gegevensgestuurde PHP-app uit in Azure-app Service.

A screenshot of the Laravel app running in App Service.

Tip

De voorbeeldtoepassing implementeert het cache-aside-patroon . Wanneer u de pagina opnieuw laadt nadat u gegevenswijzigingen hebt aangebracht, wordt de reactietijd op de webpagina veel sneller weergegeven omdat de gegevens uit de cache worden geladen in plaats van de database.

7 - Diagnostische logboeken streamen

Azure-app Service legt alle berichten vast die zijn vastgelegd in de console om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeld-app voert consolelogboekberichten uit in elk van de eindpunten om deze mogelijkheid te demonstreren. De logboekfunctionaliteit van Laravel (bijvoorbeeld ) wordt standaard Log::info()uitgevoerd naar een lokaal bestand. Uw LOG_CHANNEL app-instelling van eerder maakt logboekvermeldingen toegankelijk vanuit de App Service-logboekstream.

Stap 1: Op de App Service-pagina:

  1. Selecteer App Service-logboeken in het linkermenu.
  2. Selecteer Bestandssysteem onder Toepassingslogboek.

A screenshot showing how to enable native logs in App Service in the Azure portal.

Stap 2: Selecteer in het menu links de optie Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.

A screenshot showing how to view the log stream in the Azure portal.

Resources opschonen

Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.

Stap 1: In de zoekbalk boven aan Azure Portal:

  1. Voer de naam van de resourcegroup in.
  2. Selecteer de resourcegroep.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

Stap 2: Selecteer op de pagina Resourcegroep verwijderen.

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Stap 3:

  1. Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
  2. Selecteer Verwijderen.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

Veelgestelde vragen

Hoeveel kost dit instellen?

De prijzen voor het maken van resources zijn als volgt:

  • Het App Service-plan wordt gemaakt in de Basic-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
  • De flexibele MySQL-server wordt gemaakt in de B1ms-laag en kan omhoog of omlaag worden geschaald. Met een gratis Azure-account is de B1ms-laag 12 maanden gratis, tot aan de maandelijkse limieten. Zie prijzen voor Azure Database for MySQL.
  • De Azure Cache voor Redis wordt gemaakt in de Basic-laag met de minimale cachegrootte. Er zijn kleine kosten verbonden aan deze laag. U kunt deze omhoog schalen naar hogere prestatielagen voor hogere beschikbaarheid, clustering en andere functies. Zie Azure Cache voor Redis prijzen.
  • Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
  • Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.

Hoe kan ik verbinding maken met de MySQL-database die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?

  • Voor basistoegang vanuit een opdrachtregelprogramma kunt u uitvoeren mysql vanuit de SSH-terminal van de app.
  • Als u verbinding wilt maken vanaf een bureaubladprogramma zoals MySQL Workbench, moet uw machine zich in het virtuele netwerk bevinden. Het kan bijvoorbeeld een Virtuele Azure-machine zijn die is verbonden met een van de subnetten of een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.
  • U kunt Azure Cloud Shell ook integreren met het virtuele netwerk.

Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?

Neem het automatisch gegenereerde werkstroombestand uit App Service als voorbeeld, elk git push start een nieuwe build- en implementatieuitvoering. Vanuit een lokale kloon van de GitHub-opslagplaats pusht u de gewenste updates naar GitHub. Voorbeeld:

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

Waarom is de Implementatie van GitHub Actions zo traag?

Het automatisch gegenereerde werkstroombestand van App Service definieert build-then-deploy, two-job run. Omdat elke taak wordt uitgevoerd in een eigen schone omgeving, zorgt het werkstroombestand ervoor dat de deploy taak toegang heeft tot de bestanden vanuit de build taak:

De meeste tijd die nodig is voor het proces met twee taken, wordt besteed aan het uploaden en downloaden van artefacten. Als u wilt, kunt u het werkstroombestand vereenvoudigen door de twee taken te combineren in één, waardoor de upload- en downloadstappen niet meer nodig zijn.

Volgende stappen

Ga naar de volgende zelfstudie voor meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.

U kunt ook andere resources bekijken: