Självstudie: Skapa en PHP- och MySQL-app i Azure App Service

Azure App Service tillhandahåller en mycket skalbar, självkorrigeringsbaserad webbvärdtjänst med hjälp av Linux-operativsystemet. Den här självstudien visar hur du skapar en säker PHP-app i Azure App Service som är ansluten till en MySQL-databas (med Azure Database for MySQL flexibel server). När du är klar har du en Laravel-app som körs på Azure App Service i Linux.

Skärmbild av Azure-appexemplet aktivitetslista som visar nya aktiviteter som lagts till.

I den här guiden får du lära dig att:

  • Skapa en säker PHP- och MySQL-app som standard i Azure
  • Konfigurera anslutningshemligheter till MySQL med hjälp av appinställningar
  • Distribuera programkod med GitHub Actions
  • Uppdatera och distribuera om appen
  • Köra databasmigreringar på ett säkert sätt
  • strömma diagnostikloggar från Azure
  • hantera appen i Azure-portalen.

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt Azure-konto innan du börjar.

Exempelprogram

Om du vill följa med i den här självstudien klonar eller laddar du ned exempelprogrammet från lagringsplatsen:

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

Om du vill köra programmet lokalt gör du följande:

  • I .env konfigurerar du databasinställningarna (till exempel DB_DATABASE, DB_USERNAMEoch DB_PASSWORD) med hjälp av inställningarna i din lokala MySQL-databas. Du behöver en lokal MySQL-server för att köra det här exemplet.

  • Starta Laravel från lagringsplatsens rot med följande kommandon:

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

1 – Skapa App Service- och MySQL-resurser

I det här steget skapar du Azure-resurserna. Stegen som används i den här självstudien skapar en App Service och Azure Database for MySQL konfiguration som är säker som standard. För skapandeprocessen anger du:

  • Namnet på webbappen. Det är namnet som används som en del av DNS-namnet för din webbapp i form av https://<app-name>.azurewebsites.net.
  • Körningen för appen. Det är där du väljer vilken version av PHP som ska användas för din app.
  • Resursgruppen för appen. Med en resursgrupp kan du gruppera (i en logisk container) alla Azure-resurser som behövs för programmet.

Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service resurser.

Instruktioner Skärmbild
I Azure-portalen:
  1. Ange "webbappdatabas" i sökfältet överst i Azure Portal.
  2. Välj objektet webapp + databas under rubriken Marketplace .
Du kan också gå direkt till guiden för att skapa .
En skärmbild som visar hur du använder sökrutan i det övre verktygsfältet för att hitta guiden Skapa webbapp + databas.
På sidan Skapa webbapp + databas fyller du i formuläret på följande sätt.
  1. Resursgrupp → Välj Skapa ny och använd namnet msdocs-laravel-mysql-tutorial.

  2. Region → Valfri Azure-region nära dig.

  3. Namnmsdocs-laravel-mysql-XYZ där XYZ är tre slumpmässiga tecken. Användarnamnet måste vara unikt inom Azure.

  4. KörningsstackPHP 8.0.

    MySQL – flexibel server väljs som standard som databasmotor. Azure Database for MySQL är en fullständigt hanterad MySQL-databas som en tjänst i Azure som är kompatibel med de senaste community-versionerna.

  5. Observera databasnamnet som genereras åt dig (<app-name-database>). Du behöver det senare.

  6. Klicka på Granska + skapa.

När verifieringen är klar klickar du på Skapa.
En skärmbild som visar hur du konfigurerar en ny app och databas i guiden Webbapp + databas.
Distributionen tar några minuter att slutföra och skapar följande resurser:
  • Resursgrupp → Containern för alla skapade resurser.
  • App Service plan → Definierar beräkningsresurserna för App Service. En Linux-plan på P1v2-nivån skapas.
  • App Service → Representerar din app och körs i App Service-planen.
  • Virtuellt nätverk → integrerat med App Service-appen och isolerar serverdelsnätverkstrafik.
  • Azure Database for MySQL flexibel server → Endast tillgänglig från det virtuella nätverket. En databas och en användare skapas åt dig på servern.
  • Privat DNS zon → Aktiverar DNS-matchning för MySQL-databasservern i det virtuella nätverket.
När distributionen är klar klickar du på knappen Gå till resurs . Du tas direkt till App Service-appen.
En skärmbild som visar formuläret som ska fyllas i för att skapa en webbapp i Azure.

2 – Konfigurera databasanslutning

Guiden skapade en anslutningssträng till databasen åt dig, men inte i ett format som kan användas för din kod ännu. I det här steget skapar du appinställningar med det format som din app behöver.

Instruktioner Skärmbild
På sidan App Service går du till menyn till vänster och väljer Konfiguration. En skärmbild som visar hur du öppnar konfigurationssidan i App Service.
På fliken Programinställningar på sidan Konfiguration skapar du en DB_DATABASE inställning:
  1. Klicka på Ny programinställning.

  2. I fältet Namn anger du DB_DATABASE.

  3. I fältet Värde anger du det automatiskt genererade databasnamnet från skapandeguiden, som ser ut som msdocs-laravel-mysql-XYZ-database.

  4. Klicka på OK.

En skärmbild som visar hur du ser den automatiskt genererade anslutningssträngen.
Tillbaka på fliken Programinställningar:
  1. Rulla längst ned och välj anslutningssträngen defaultConnection. Den genererades av guiden för att skapa och innehåller det användarnamn och lösenord som du behöver.

  2. I fältet Värde väljer du knappen Kopiera och klistrar in värdet i en textfil för senare bruk. Den har följande format (radbrytningar för tydlighetens skull):

    Database=mysql;
    Server=<database-server-domain-name>;
    User Id=<username>;
    Password=<password>
    
  3. Välj Avbryt.

En skärmbild som visar hur du skapar en appinställning.
Skapa följande extra appinställningar genom att följa samma steg för att skapa en appinställning.
  • DB_HOST: Använd <namnet database-server-domain-name> från den kopierade anslutningssträngen som värde.

  • DB_USERNAME: Använd användarnamnet<> från den kopierade anslutningssträngen som värde.

  • DB_PASSWORD: Använd <lösenordet> från den kopierade anslutningssträngen som värde.

  • MYSQL_ATTR_SSL_CA: Använd /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem som värde.

    Den här appinställningen pekar på sökvägen till det TLS/SSL-certifikat som du behöver för att få åtkomst till MySQL-servern. Det ingår i exempellagringsplatsen för enkelhetens skull.

  • APP_DEBUG: Använd true som värde. Det här är en Laravel-felsökningsvariabel.

  • APP_KEY: Använd base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= som värde. Det här är en Laravel-krypteringsvariabel.

    Viktigt

    Det här APP_KEY värdet används här för enkelhetens skull. För produktionsscenarier bör den genereras specifikt för distributionen med hjälp av php artisan key:generate --show på kommandoraden.

En skärmbild som visar alla nödvändiga appinställningar på konfigurationssidan.

3 – Distribuera exempelkod

I det här steget konfigurerar du GitHub-distribution med hjälp av GitHub Actions. Det är bara ett av många sätt att distribuera till App Service, men också ett bra sätt att ha kontinuerlig integrering i distributionsprocessen. Som standard startar varje git push till din GitHub-lagringsplats bygg- och distributionsåtgärden. Du gör några ändringar i din kodbas med Visual Studio Code direkt i webbläsaren och låter sedan GitHub Actions distribuera automatiskt åt dig.

Instruktioner Skärmbild
I ett nytt webbläsarfönster:
  1. Logga in på ditt GitHub-konto.

  2. Navigera till https://github.com/Azure-Samples/laravel-tasks.

  3. Klicka på Förgrening.

  4. Klicka på Skapa förgrening.

En skärmbild som visar hur du skapar en förgrening av GitHub-exempellagringsplatsen.
På GitHub-sidan öppnar du Visual Studio Code i webbläsaren genom att trycka på tangenten . . En skärmbild som visar hur du öppnar Visual Studio Code-webbläsarupplevelsen i GitHub.
Öppna config/database.php i utforskaren i Visual Studio Code i webbläsaren. mysql I anslutningen ser du att appinställningarna som du skapade tidigare för MySQL-anslutningen redan används (DB_HOST, , DB_DATABASEDB_USERNAME, DB_PASSWORD, ). MYSQL_ATTR_SSL_CA En skärmbild som visar Visual Studio Code i webbläsaren och en öppnad fil.
På sidan App Service väljer du Distributionscenter på den vänstra menyn. En skärmbild som visar hur du öppnar distributionscentret i App Service.
På sidan Distributionscenter:
  1. I Källa väljer du GitHub. Som standard väljs GitHub Actions som byggprovider.

  2. Logga in på ditt GitHub-konto och följ anvisningarna för att auktorisera Azure.

  3. I Organisation väljer du ditt konto.

  4. I Lagringsplats väljer du laravel-tasks.

  5. I Gren väljer du main.

  6. Klicka på Spara på den översta menyn.

App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i .github/workflows katalogen .
En skärmbild som visar hur du konfigurerar CI/CD med hjälp av GitHub Actions.
På sidan Distributionscenter:
  1. Välj Loggar. En distributionskörning har redan startats.

  2. I loggobjektet för distributionskörningen väljer du Skapa/distribuera loggar.

    Du kommer till din GitHub-lagringsplats och ser att GitHub-åtgärden körs. Arbetsflödesfilen definierar två separata steg, skapa och distribuera.

En skärmbild som visar hur du öppnar distributionsloggar i distributionscentret.
Vänta tills körningen har slutförts. Det tar ungefär 15 minuter.

Tips

GitHub-åtgärden definieras av filen på din GitHub-lagringsplats i .github/workflow. Du kan göra det snabbare genom att anpassa filen.

En skärmbild som visar hur du checkar in ändringarna i Visual Studio Code-webbläsarupplevelsen.

4 – Generera databasschema

Guiden för att skapa placerar MySQL-databasservern bakom en privat slutpunkt, så den är endast tillgänglig från det virtuella nätverket. Eftersom App Service-appen redan är integrerad med det virtuella nätverket är det enklaste sättet att köra databasmigreringar med databasen direkt från App Service containern.

Instruktioner Skärmbild
På sidan App Service:
  1. Välj SSH på den vänstra menyn.

  2. Välj .

En SSH-session med din App Service-container öppnas i webbläsaren. Om du vill kan du navigera direkt till https://<app-name>.scm.azurewebsites.net/webssh/host i stället.
En skärmbild som visar hur du öppnar SSH-gränssnittet för din app från Azure Portal.
I SSH-terminalen:
  1. CD till roten för programkoden:

    cd /home/site/wwwroot
    
  2. Kör databasmigreringar från programroten.

    php artisan migrate --force
    

    Anteckning

    Endast ändringar i filer i /home kan bevaras utöver appomstarter. Ändringar utanför /home sparas inte.

En skärmbild som visar de kommandon som ska köras i SSH-gränssnittet och deras utdata.

5 – Ändra webbplatsens rot

Laravel-programmets livscykel börjar i katalogen /public i stället. Php 8.0-standardcontainern för App Service använder Nginx, som startar i programmets rotkatalog. Om du vill ändra platsroten måste du ändra Nginx-konfigurationsfilen i PHP 8.0-containern (/etc/nginx/sites-available/default). För att underlätta för dig innehåller exempellagringsplatsen en anpassad konfigurationsfil som kallas standard. Som tidigare nämnts vill du inte ersätta den här filen med hjälp av SSH-gränssnittet, eftersom dina ändringar kommer att gå förlorade efter en omstart av appen.

Instruktioner Skärmbild
På sidan App Service:
  1. Välj Konfiguration på den vänstra menyn.

  2. Välj fliken Allmänna inställningar .

En skärmbild som visar hur du öppnar fliken Allmänna inställningar på konfigurationssidan för App Service.
På fliken Allmänna inställningar:
  1. I rutan Startkommando anger du följande kommando: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Den ersätter Nginx-konfigurationsfilen i PHP 8.0-containern och startar om Nginx. Den här konfigurationen säkerställer att den här ändringen görs i containern varje gång den startas.

  2. Välj Spara.

En skärmbild som visar hur du konfigurerar ett startkommando i App Service.

6 – Bläddra till appen

Instruktioner Skärmbild
På sidan App Service:
  1. Välj Översikt på den vänstra menyn.

  2. Välj url:en för din app.

    Du kan också navigera direkt till https://<app-name>.azurewebsites.net.

En skärmbild som visar hur du startar en App Service från Azure Portal.
Lägg till några uppgifter i listan. Grattis, du kör en datadriven PHP-app i Azure App Service. En skärmbild av Laravel-appen som körs i App Service.

7 – Strömma diagnostikloggar

Instruktioner Skärmbild
På sidan App Service:
  1. Välj App Service loggar på den vänstra menyn.

  2. Under Programloggning väljer du Filsystem.

En skärmbild som visar hur du aktiverar interna loggar i App Service i Azure Portal.
Klicka på Loggström på den vänstra menyn. Du ser loggarna för din app, inklusive plattformsloggar och loggar inifrån containern. En skärmbild som visar hur du visar loggströmmen i Azure Portal.

Rensa resurser

När du är klar kan du ta bort alla resurser från din Azure-prenumeration genom att ta bort resursgruppen.

Instruktioner Skärmbild
I sökfältet överst i Azure Portal:
  1. Ange resursgruppsnamnet.

  2. Välj resursgruppen.

En skärmbild som visar hur du söker efter och navigerar till en resursgrupp i Azure Portal.
På resursgruppssidan klickar du på Ta bort resursgrupp. En skärmbild som visar platsen för knappen Ta bort resursgrupp i Azure Portal.
  1. Ange resursgruppens namn för att bekräfta borttagningen.

  2. Klicka på Ta bort.

En skärmbild av bekräftelsedialogrutan för att ta bort en resursgrupp i Azure Portal.

Vanliga frågor och svar

Hur mycket kostar den här installationen?

Prissättningen för skapa resurser är följande:

Hur gör jag för att ansluta till MySQL-databasen som skyddas bakom det virtuella nätverket med andra verktyg?

  • För grundläggande åtkomst från ett commmand-line-verktyg kan du köra mysql från appens SSH-terminal.
  • Om du vill ansluta från ett skrivbordsverktyg som MySQL Workbench måste datorn finnas i det virtuella nätverket. Det kan till exempel vara en virtuell Azure-dator som är ansluten till ett av undernäten eller en dator i ett lokalt nätverk som har en VPN-anslutning från plats till plats med det virtuella Azure-nätverket .
  • Du kan också integrera Azure Cloud Shell med det virtuella nätverket.

Hur fungerar lokal apputveckling med GitHub Actions?

Ta den automatiskt genererade arbetsflödesfilen från App Service som ett exempel, var git push och en startar en ny version och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen skickar du önskade uppdateringar till GitHub. Exempel:

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

Varför är GitHub Actions distributionen så långsam?

Den automatiskt genererade arbetsflödesfilen från App Service definierar build-then-deploy, two-job run. Eftersom varje jobb körs i en egen ren miljö ser arbetsflödesfilen till att deploy jobbet har åtkomst till filerna från build jobbet:

Merparten av tiden som tvåjobbsprocessen tar går åt till att ladda upp och ladda ned artefakter. Om du vill kan du förenkla arbetsflödesfilen genom att kombinera de två jobben till ett, vilket eliminerar behovet av uppladdnings- och nedladdningsstegen.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa en SÄKER PHP- och MySQL-app som standard i Azure
  • Konfigurera anslutningshemligheter till MySQL med hjälp av appinställningar
  • Distribuera programkod med GitHub Actions
  • Uppdatera och distribuera om appen
  • Köra databasmigreringar på ett säkert sätt
  • strömma diagnostikloggar från Azure
  • hantera appen i Azure-portalen.

Gå vidare till nästa självstudie för att lära dig hur du skyddar din app med en anpassad domän och ett certifikat.

Eller kolla in andra resurser: