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.
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_USERNAME
ochDB_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:
- Ange "webbappdatabas" i sökfältet överst i Azure-portalen.
- Välj objektet webapp + databas under rubriken Marketplace . Du kan också navigera till guiden för att skapa direkt.
Steg 2: På sidan Skapa webbapp + databas fyller du i formuläret på följande sätt.
- Resursgrupp → Välj Skapa ny och använd namnet msdocs-laravel-mysql-tutorial.
- Region → Valfri Azure-region nära dig.
- Namn → msdocs-laravel-mysql-XYZ där XYZ är tre slumpmässiga tecken. Användarnamnet måste vara unikt inom Azure.
- Körningsstacken → PHP 8.2.
- Vill du lägga till Azure Cache for Redis? → Ja.
- Värdplan → Basic. När du är klar kan du skala upp till en produktionsprisnivå senare.
- 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.
- Välj Granska + skapa.
- När valideringen är klar väljer du Skapa.
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.
2 – Konfigurera databasanslutning
Steg 1: På sidan App Service går du till den vänstra menyn och väljer Konfiguration.
Steg 2:
- Hitta appinställningar som börjar med AZURE_MYSQL_. De genererades från den nya MySQL-databasen av guiden skapa.
- 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.
- 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.
Steg 3: På fliken Programinställningar på sidan Konfiguration skapar du en CACHE_DRIVER
inställning:
- Välj Ny programinställning.
- I fältet Namn anger du CACHE_DRIVER.
- I fältet Värde anger du redis.
- Välj OK.
CACHE_DRIVER
används redan i Laravel-programkoden. Den här inställningen instruerar Laravel att använda Redis som cacheminne.
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.
- I menyraden längst upp väljer du Spara.
- När du uppmanas till det väljer du Fortsätt.
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:
- Logga in på ditt GitHub-konto.
- Navigera till https://github.com/Azure-Samples/laravel-tasks.
- Markera Förgreningen.
- Välj Skapa förgrening.
Steg 2: På GitHub-sidan öppnar du Visual Studio Code i webbläsaren genom att trycka på .
nyckeln.
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:
- Ersätt
DB_HOST
medAZURE_MYSQL_HOST
- Ersätt
DB_DATABASE
medAZURE_MYSQL_DBNAME
- Ersätt
DB_USERNAME
medAZURE_MYSQL_USERNAME
- Ersätt
DB_PASSWORD
medAZURE_MYSQL_PASSWORD
- Ersätt
DB_PORT
medAZURE_MYSQL_PORT
Kom ihåg att de härAZURE_MYSQL_
inställningarna skapades åt dig av guiden skapa.
Steg 4: I config/database.php bläddra till Avsnittet Redis cache
och göra följande ändringar:
- Ersätt
REDIS_HOST
medAZURE_REDIS_HOST
- Ersätt
REDIS_PASSWORD
medAZURE_REDIS_PASSWORD
- Ersätt
REDIS_PORT
medAZURE_REDIS_PORT
- Ersätt
REDIS_CACHE_DB
medAZURE_REDIS_DATABASE
- 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ärAZURE_REDIS_
inställningarna skapades åt dig av guiden skapa.
Steg 5:
- Välj källkontrolltillägget.
- I textrutan skriver du ett incheckningsmeddelande som
Configure DB & Redis variables
. - Välj Checka in och skicka.
Steg 6: På sidan App Service går du till den vänstra menyn och väljer Distributionscenter.
Steg 7: På sidan Distributionscenter:
- I Källa väljer du GitHub. Som standard är GitHub Actions valt som byggprovider.
- Logga in på ditt GitHub-konto och följ anvisningarna för att auktorisera Azure.
- I Organisation väljer du ditt konto.
- I Lagringsplats väljer du laravel-task.
- I Gren väljer du huvud.
- I den översta menyn väljer du Spara. App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i
.github/workflows
katalogen.
Steg 8: På sidan Distributionscenter:
- Välj Loggar. En distributionskörning har redan startats.
- I loggobjektet för distributionskörningen väljer du Skapa/distribuera loggar.
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.
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.
Steg 2: I SSH-terminalen:
- Kör
cd /home/site/wwwroot
. Här är alla dina distribuerade filer. - 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.
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 :
- Välj Konfiguration på den vänstra menyn.
- Välj fliken Allmänt inställningar.
Steg 2: På fliken Allmänna inställningar:
- I rutan Startkommando anger du följande kommando: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
- 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.
6 – Bläddra till appen
Steg 1: På App Service-sidan:
- Välj Översikt på den vänstra menyn.
- Välj appens URL. Du kan också navigera direkt till
https://<app-name>.azurewebsites.net
.
Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en säker datadriven PHP-app i Azure 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:
- Välj App Service-loggar på den vänstra menyn.
- Under Programloggning väljer du Filsystem.
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.
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:
- Ange resursgruppsnamnet.
- Välj resursgruppen.
Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.
Steg 3:
- Ange resursgruppens namn för att bekräfta borttagningen.
- Välj Ta bort.
Vanliga frågor och svar
- Hur mycket kostar den här installationen?
- Hur ansluter jag till MySQL-databasen som skyddas bakom det virtuella nätverket med andra verktyg?
- Hur fungerar utveckling av lokala appar med GitHub Actions?
- Varför är GitHub Actions-distributionen så långsam?
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:
- I slutet av
build
jobbet laddar du upp filer som artefakter. - I början av
deploy
jobbet laddar du ned artefakterna.
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: