Självstudie: Distribuera en PHP-, MySQL- och Redis-app till Azure App Service

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). Du distribuerar också en Azure Cache for Redis för att aktivera cachelagringskoden i ditt program. Azure App Service är en mycket skalbar webbvärdtjänst med självkorrigering som enkelt kan distribuera appar i Windows eller Linux. När du är klar har du en Laravel-app som körs på Azure App Service på Linux.

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

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

Programexempel

Om du vill följa med i den här självstudien klonar eller laddar du ned Laravel-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 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:

  • Webbappens namn . 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-portalen och följ dessa steg för att skapa dina Azure App Service-resurser.

Steg 1: I Azure-portalen:

  1. Ange "webbappdatabas" i sökfältet överst i Azure-portalen.
  2. Välj objektet webapp + databas under rubriken Marketplace . Du kan också navigera till guiden för att skapa direkt.

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

Steg 2: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örningsstackenPHP 8.2.
  5. Vill du lägga till Azure Cache for Redis? → Ja.
  6. VärdplanBasic. När du är klar kan du skala upp till en produktionsprisnivå senare.
  7. 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, kompatibel med de senaste community-utgåvorna.
  8. Välj Granska + skapa.
  9. När valideringen är klar väljer du Skapa.

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

Steg 3: Distributionen tar några minuter att slutföra. När distributionen är klar väljer du knappen Gå till resurs . Du tas direkt till App Service-appen, men följande resurser skapas:

  • Resursgrupp → Containern för alla skapade resurser.
  • App Service-plan → Definierar beräkningsresurserna för App Service. En Linux-plan på Basic-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.
  • Privata slutpunkter → Åtkomstslutpunkter för databasservern och Redis-cachen i det virtuella nätverket.
  • Nätverksgränssnitt → Representerar privata IP-adresser, en för var och en av de privata slutpunkterna.
  • Azure Database for MySQL – flexibel server → Endast tillgänglig bakom den privata slutpunkten. En databas och en användare skapas åt dig på servern.
  • Azure Cache for Redis → Endast tillgänglig bakom den privata slutpunkten.
  • Privat DNS zoner → Aktivera DNS-matchning för databasservern och Redis-cachen i det virtuella nätverket.

A screenshot showing the deployment process completed.

2 – Konfigurera databasanslutning

Steg 1: På sidan App Service går du till den vänstra menyn och väljer Konfiguration.

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

Steg 2:

  1. Hitta appinställningar som börjar med AZURE_MYSQL_. De genererades från den nya MySQL-databasen av guiden skapa.
  2. Leta också upp appinställningar som börjar med AZURE_REDIS_. De genererades från den nya Redis-cachen av guiden för att skapa. Det här namnet är allt du behöver för att konfigurera programmet.
  3. Om du vill kan du välja knappen Redigera till höger om varje inställning och se eller kopiera dess värde. Senare ändrar du programkoden så att den använder de här inställningarna.

A screenshot showing how to create an app setting.

Steg 3:fliken Programinställningarsidan Konfiguration skapar du en CACHE_DRIVER inställning:

  1. Välj Ny programinställning.
  2. I fältet Namn anger du CACHE_DRIVER.
  3. I fältet Värde anger du redis.
  4. Välj OK. CACHE_DRIVER används redan i Laravel-programkoden. Den här inställningen instruerar Laravel att använda Redis som cacheminne.

A screenshot showing how to see the autogenerated connection string.

Steg 4: Skapa följande appinställningar med samma steg i steg 3:

  • 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 komma åt MySQL-servern. Det ingår i exempellagringsplatsen för enkelhetens skull.
  • LOG_CHANNEL: Använd stderr som värde. Den här inställningen instruerar Laravel att skicka loggar till stderr, vilket gör den tillgänglig för App Service-loggarna.
  • APP_DEBUG: Använd true som värde. Det är en Laravel-felsökningsvariabel som aktiverar sidor i felsökningsläge.
  • APP_KEY: Använd base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= som värde. Det är en Laravel-krypteringsvariabel.
  1. I menyraden längst upp väljer du Spara.
  2. När du uppmanas till det väljer du Fortsätt.

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

Viktigt!

Värdet APP_KEY 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 kommandoraden.

3 – Distribuera exempelkod

I det här steget konfigurerar du GitHub-distribution med 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 kommer att göra några ändringar i din kodbas med Visual Studio Code direkt i webbläsaren och sedan låta GitHub Actions distribueras automatiskt åt dig.

Steg 1: I ett nytt webbläsarfönster:

  1. Logga in på ditt GitHub-konto.
  2. Navigera till https://github.com/Azure-Samples/laravel-tasks.
  3. Markera Förgreningen.
  4. Välj Skapa förgrening.

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

Steg 2: På GitHub-sidan öppnar du Visual Studio Code i webbläsaren genom att trycka på . nyckeln.

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

Steg 3: Öppna config/database.php i utforskaren i Visual Studio Code i webbläsaren. Leta upp avsnittet mysql och gör följande ändringar:

  1. Ersätt DB_HOST med AZURE_MYSQL_HOST
  2. Ersätt DB_DATABASE med AZURE_MYSQL_DBNAME
  3. Ersätt DB_USERNAME med AZURE_MYSQL_USERNAME
  4. Ersätt DB_PASSWORD med AZURE_MYSQL_PASSWORD
  5. Ersätt DB_PORT med AZURE_MYSQL_PORT Kom ihåg att de här AZURE_MYSQL_ inställningarna skapades åt dig av guiden skapa.

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

Steg 4: I config/database.php bläddrar du till Avsnittet Redis cache och gör följande ändringar:

  1. Ersätt REDIS_HOST med AZURE_REDIS_HOST
  2. Ersätt REDIS_PASSWORD med AZURE_REDIS_PASSWORD
  3. Ersätt REDIS_PORT med AZURE_REDIS_PORT
  4. Ersätt REDIS_CACHE_DB med AZURE_REDIS_DATABASE
  5. I samma avsnitt lägger du till en rad med 'scheme' => 'tls',. Den här konfigurationen instruerar Laravel att använda kryptering för att ansluta till Redis. Kom ihåg att de här AZURE_REDIS_ inställningarna skapades åt dig av guiden skapa.

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

Steg 5:

  1. Välj källkontrolltillägget.
  2. I textrutan skriver du ett incheckningsmeddelande som Configure DB & Redis variables.
  3. Välj Checka in och skicka.

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

Steg 6: På sidan App Service går du till den vänstra menyn och väljer Distributionscenter.

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

Steg 7: På sidan Distributionscenter:

  1. I Källa väljer du GitHub. Som standard är GitHub Actions valt 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-task.
  5. I Gren väljer du huvud.
  6. I den översta menyn väljer du Spara. App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i .github/workflows katalogen.

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

Steg 8: 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.

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

Steg 9: Du tas till din GitHub-lagringsplats och ser att GitHub-åtgärden körs. Arbetsflödesfilen definierar två separata steg, skapa och distribuera. Vänta tills GitHub-körningen visar statusen Slutförd. Det tar ungefär 15 minuter.

A screenshot showing a GitHub run in progress.

4 – Generera databasschema

Guiden 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.

Steg 1: På sidan App Service går du till den vänstra menyn och väljer SSH.

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

Steg 2: I SSH-terminalen:

  1. Kör cd /home/site/wwwroot. Här är alla dina distribuerade filer.
  2. Kör php artisan migrate --force. Om det lyckas ansluter App Service till MySQL-databasen. Endast ändringar i filer i /home kan bevaras utöver omstarter av appar. Ändringar utanför /home sparas inte.

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

5 – Ändra platsrot

Laravel-programmets livscykel börjar i katalogen /public i stället. Php-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-containern (/etc/nginx/sites-available/default). För din bekvämlighet 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 ändringen ligger utanför och kommer att gå förlorad efter en omstart av /home appen.

Steg 1 :

  1. Välj Konfiguration på den vänstra menyn.
  2. Välj fliken Allmänt inställningar.

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

Steg 2: 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.
  2. Välj Spara. Kommandot ersätter Nginx-konfigurationsfilen i PHP-containern och startar om Nginx. Den här konfigurationen säkerställer att samma ändring görs i containern varje gång den startas.

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

6 – Bläddra till appen

Steg 1: På App Service-sidan:

  1. Välj Översikt på den vänstra menyn.
  2. Välj appens URL. Du kan också navigera direkt till https://<app-name>.azurewebsites.net.

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

Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en säker datadriven PHP-app i Azure App Service.

A screenshot of the Laravel app running in App Service.

Dricks

Exempelprogrammet implementerar cache-aside-mönstret . När du läser in sidan igen när du har gjort dataändringar visas svarstiden på webbsidan mycket snabbare eftersom den läser in data från cachen i stället för databasen.

7 – Strömma diagnostikloggar

Azure App Service samlar in alla meddelanden som loggas till konsolen för att hjälpa dig att diagnostisera problem med ditt program. Exempelappen matar ut konsolloggmeddelanden i var och en av sina slutpunkter för att demonstrera den här funktionen. Som standard matas Laravels loggningsfunktion (till exempel Log::info()) ut till en lokal fil. Appinställningen LOG_CHANNEL från tidigare gör loggposter tillgängliga från App Service-loggströmmen.

Steg 1: På App Service-sidan:

  1. Välj App Service-loggar på den vänstra menyn.
  2. Under Programloggning väljer du Filsystem.

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

Steg 2: Välj Loggström på den vänstra menyn. Du ser loggarna för din app, inklusive plattformsloggar och loggar inifrån containern.

A screenshot showing how to view the log stream in the 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.

Steg 1: I sökfältet överst i Azure-portalen:

  1. Ange resursgruppsnamnet.
  2. Välj resursgruppen.

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

Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.

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

Steg 3:

  1. Ange resursgruppens namn för att bekräfta borttagningen.
  2. Välj Ta bort.

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

Vanliga frågor och svar

Hur mycket kostar den här installationen?

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

  • App Service-planen skapas på Basic-nivån och kan skalas upp eller ned. Se Priser för App Service.
  • Den flexibla MySQL-servern skapas på B1ms-nivån och kan skalas upp eller ned. Med ett kostnadsfritt Azure-konto är B1ms-nivån kostnadsfri i 12 månader, upp till månadsgränserna. Se Priser för Azure Database for MySQL.
  • Azure Cache for Redis skapas på Basic-nivån med den minsta cachestorleken. Det finns en liten kostnad som är associerad med den här nivån. Du kan skala upp den till högre prestandanivåer för högre tillgänglighet, klustring och andra funktioner. Se Priser för Azure Cache for Redis.
  • Det virtuella nätverket debiteras inte om du inte konfigurerar extra funktioner, till exempel peering. Se Priser för Azure Virtual Network.
  • Den privata DNS-zonen medför en liten avgift. Se Priser för Azure DNS.

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 kommandoradsverktyg 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 plats-till-plats-VPN-anslutning med det virtuella Azure-nätverket.
  • Du kan också integrera Azure Cloud Shell med det virtuella nätverket.

Hur fungerar utveckling av lokala appar med GitHub Actions?

Ta den autogenererade arbetsflödesfilen från App Service som exempel. Var git push och en startar en ny version och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen får du önskade uppdateringar att skicka den till GitHub. Till exempel:

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

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

Den autogenererade 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 den tid det tar för tvåjobbsprocessen är 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

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: