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 i Linux.

Skärmbild av Azure-appexemplet med titeln Uppgiftslista som visar nya aktiviteter som lagts till.

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.

En skärmbild som visar hur du använder sökrutan i det övre verktygsfältet för att hitta guiden Skapa webbapp + databas.

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.

En skärmbild som visar hur du konfigurerar en ny app och databas i guiden Webbapp + Databas.

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.
  • Privata DNS-zoner → Aktivera DNS-matchning för databasservern och Redis-cachen i det virtuella nätverket.

En skärmbild som visar hur distributionsprocessen har slutförts.

2 – Konfigurera databasanslutning

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

En skärmbild som visar hur du öppnar konfigurationssidan i 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.

En skärmbild som visar hur du skapar en appinställning.

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.

En skärmbild som visar hur du ser den automatiskt genererade niska veze.

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.

En skärmbild som visar hur du sparar inställningar på konfigurationssidan.

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.

En skärmbild som visar hur du skapar en förgrening av GitHub-exempellagringsplatsen.

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

En skärmbild som visar hur du öppnar Visual Studio Code-webbläsarupplevelsen i GitHub.

Steg 3: Öppna konfiguration/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.

En skärmbild som visar Visual Studio Code i webbläsaren och en öppnad fil med ändrade MySQL-variabler.

Steg 4: I config/database.php bläddra till Avsnittet Redis cache och göra 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.

En skärmbild som visar Visual Studio Code i webbläsaren och en öppnad fil med ändrade Redis-variabler.

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.

En skärmbild som visar de ändringar som checkas in och skickas till GitHub.

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

En skärmbild som visar hur du öppnar distributionscentret i 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.

En skärmbild som visar hur du konfigurerar CI/CD med 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.

En skärmbild som visar hur du öppnar distributionsloggar i distributionscentret.

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.

En skärmbild som visar en GitHub-körning pågår.

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.

En skärmbild som visar hur du öppnar SSH-gränssnittet för din app från Azure-portalen.

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.

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

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.

En skärmbild som visar hur du öppnar fliken Allmänna inställningar på konfigurationssidan för 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.

En skärmbild som visar hur du konfigurerar ett startkommando i 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.

En skärmbild som visar hur du startar en App Service från Azure-portalen.

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

En skärmbild av Laravel-appen som körs i 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.

En skärmbild som visar hur du aktiverar interna loggar i App Service i Azure-portalen.

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.

En skärmbild som visar hur du visar loggströmmen i Azure-portalen.

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.

En skärmbild som visar hur du söker efter och navigerar till en resursgrupp i Azure-portalen.

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

En skärmbild som visar platsen för knappen Ta bort resursgrupp i Azure-portalen.

Steg 3:

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

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

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 ansluter jag 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: