Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här självstudien visar hur du skapar en säker PHP-app i Azure App Service som ansluter 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, självuppdaterande webbvärdtjänst som enkelt kan distribuera appar på Windows eller Linux. När du är klar har du en Laravel-app som körs på Azure App Service på Linux.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
- Ett GitHub-konto. du kan också få en gratis.
- Kunskap om PHP med Laravel-utveckling.
- (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
1 – Kör exemplet
Först konfigurerar du en exempeldatadriven app som utgångspunkt. Exempellagringsplatsen innehåller för enkelhetens skull en konfiguration av utvecklingscontainer. Utvecklingscontainern har allt du behöver för att utveckla ett program, inklusive databasen, cachen och alla miljövariabler som krävs av exempelprogrammet. Utvecklingscontainern kan köras i ett GitHub-kodområde, vilket innebär att du kan köra exemplet på valfri dator med en webbläsare.
Steg 1: I ett nytt webbläsarfönster:
- Logga in på ditt GitHub-konto.
- Navigera till https://github.com/Azure-Samples/laravel-tasks/fork.
- Välj Skapa förgrening.
Steg 2: I GitHub-förgreningen:
- Välj Kod>Skapa kodområde på main.
Det tar några minuter att konfigurera kodområdet. Dessutom innehåller den angivna .env-filen redan en dummyvariabel
APP_KEY
som Laravel behöver köra lokalt.
Steg 3: I kodområdesterminalen:
- Kör
composer install
. - Kör databasmigreringar med
php artisan migrate
. - Kör appen med
php artisan serve
. - När du ser meddelandet
Your application running on port 80 is available.
väljer du Öppna i webbläsare. Du bör se exempelprogrammet på en ny webbläsarflik. Om du vill stoppa programmet skriver duCtrl
+C
.
Har du problem? Kontrollera felsökningsavsnittet.
2 – Skapa App Service, databas och cache
I det här steget skapar du Azure-resurserna. Stegen som används i den här självstudien skapar en uppsättning resurser med säkerhet som standard, vilka inkluderar App Service, Azure Database for MySQL och Azure Cache for Redis. För skapandeprocessen anger du:
- Webbappens namn . Den används som en del av DNS-namnet för din app.
- Regionen som ska köra appen fysiskt i världen. Den används också som en del av DNS-namnet för din app.
- Runtime-stacken för appen. Det är där du väljer vilken version av PHP som ska användas för din app.
- Hostingplanen för appen. Det är prisnivån som innehåller uppsättningen funktioner och skalningskapacitet 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.
Steg 1: I Azure-portalen:
- I det övre sökfältet skriver du App Service.
- Välj objektet med etiketten App Service under rubriken Tjänster .
- Välj Skapa>webbapp. Du kan också navigera direkt till skapa guiden.
Steg 2: På sidan Skapa webbapp fyller du i formuläret på följande sätt.
- Namn: msdocs-laravel-mysql-XYZ. En resursgrupp med namnet msdocs-laravel-mysql-XYZ_group genereras åt dig.
- Körningsstack: PHP 8.4.
- Operativsystem: Linux.
- Region: Alla Azure-regioner nära dig.
- Linux-plan: Skapa ny och använd namnet msdocs-laravel-mysql-XYZ.
- Prisplan: Basic. När du är redo kan du skala upp till en annan prisnivå.
Steg 3:
- Välj fliken Databas .
- Välj Skapa en databas.
- I Motor väljer du MySQL – flexibel server.
- Välj Skapa en Azure Cache for Redis.
- I Namn (under Cache) anger du ett namn för cachen.
- I SKU väljer du Grundläggande.
Steg 4:
- Välj fliken Distribution .
- Aktivera kontinuerlig distribution.
- I Organisation väljer du ditt GitHub-alias.
- I Lagringsplats väljer du laravel-tasks.
- Välj Branch och sedan main.
- Kontrollera att Grundläggande autentisering är inaktiverat.
- Välj Granska + skapa.
- När valideringen är klar väljer du Skapa.
Steg 5: Implementeringen tar några minuter att bli klar. 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 Flexible Server: Endast tillgänglig från sin privata slutpunkt. 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-upplösning för databasservern och Redis-cachen inom det virtuella nätverket.
3 – Skydda anslutningshemligheter
Guiden skapade redan anslutningsvariablerna åt dig som appinställningar. Bästa praxis för säkerhet är dock att hålla hemligheter borta från App Service helt. Du flyttar dina hemligheter till ett nyckelvalv och ändrar appinställningen till Key Vault-referenser med hjälp av Service Connectors.
Steg 1: Hämta den befintliga anslutningssträng
- På den vänstra menyn på sidan App Service väljer du Inställningar > Miljövariabler.
- Välj Anslutningssträngar.
- Välj AZURE_MYSQL_CONNECTIONSTRING.
- I inställningen Lägg till/redigera program i fältet Värde kopierar du användarnamnet och lösenordet för senare användning. Med anslutningssträngen kan du ansluta till MySQL-databasen som skyddas bakom privata slutpunkter. Hemligheterna sparas dock direkt i App Service-appen, vilket inte är det bästa. Du kommer att ändra det här.
Steg 2: Skapa ett nyckelvalv för säker hantering av hemligheter
- I det övre sökfältet skriver du "key vault" och väljer sedan Marketplace>Key Vault.
- I Resursgrupp väljer du msdocs-laravel-mysql-XYZ_group.
- I Key Vault-namn skriver du ett namn som endast består av bokstäver och siffror.
- I Region anger du den till samma plats som resursgruppen.
Steg 3: Skydda nyckelvalvet med en privat slutpunkt
- Välj fliken Nätverk.
- Avmarkera Aktivera offentlig åtkomst.
- Välj Skapa en privat slutpunkt.
- I Resursgrupp väljer du msdocs-laravel-mysql-XYZ_group.
- I dialogrutan i Plats väljer du samma plats som din App Service-app.
- I Namn skriver du msdocs-laravel-mysql-XYZVaultEndpoint.
- I Virtuellt nätverk väljer du det virtuella nätverket i gruppen msdocs-laravel-mysql-XYZ_group .
- I Undernät väljer du det tillgängliga kompatibla undernätet. Webbappsguiden skapade den för din bekvämlighet.
- Välj OK.
- Välj Granska + skapaoch välj sedan Skapa. Vänta tills nyckelvalv-implementeringen är klar. Du ska se "Din utrullning är klar."
Steg 4: Skapa MySQL-anslutningsappen
- I det övre sökfältet skriver du msdocs-laravel-mysql och väljer sedan App Service-resursen msdocs-laravel-mysql-XYZ.
- På sidan App Service går du till den vänstra menyn och väljer Inställningar > Tjänstanslutning.
- Välj Skapa.
- Som Tjänsttyp väljer du DB för Flexibel MySQL-server.
- För Flexibel MySQL-server väljer du din server (till exempel msdocs-laravel-mysql-235-server).
- För MySQL-databas väljer du din databas (till exempel msdocs-laravel-mysql-235-database).
Steg 5: Konfigurera autentisering för MySQL-anslutningsappen
- Välj fliken autentisering.
- Välj Anslutningssträng.
- I Lösenord klistrar du in lösenordet som du kopierade tidigare.
- Välj Lagra hemlighet i Key Vault.
- Under Key Vault-anslutning väljer du Skapa ny. Dialogrutan Skapa anslutning öppnas ovanpå redigeringsdialogrutan.
Steg 6: Upprätta Key Vault-anslutningen
- I dialogrutan Skapa anslutning för Key Vault-anslutningen går du till Key Vault och väljer det nyckelvalv som du skapade tidigare.
- Välj Granska + Skapa.
- När verifieringen är klar väljer du Skapa.
Steg 6: Slutför MySQL-anslutningsinställningarna
- Du är tillbaka i dialogrutan för MySQL-anslutning. På fliken Autentisering väntar du tills key vault-anslutningsappen har skapats. När det är klart väljer listrutan Key Vault-anslutning automatiskt.
- Välj Granska + Skapa.
- Välj Skapa. Vänta tills meddelandet Uppdatera lyckades visas.
Steg 7: Konfigurera Redis-anslutningen för att använda Key Vault-hemligheter
- På sidan Tjänstanslutningsprogram markerar du kryssrutan bredvid Cache for Redis-anslutningsappen och väljer sedan Redigera.
- Välj fliken autentisering.
- Välj Lagra hemlighet i Key Vault.
- Under Key Vault-anslutning väljer du det nyckelvalv som du skapade.
- Välj Nästa: Nätverk.
- Välj Konfigurera brandväggsregler för att aktivera åtkomst till måltjänsten. Guiden för att skapa appar har redan skyddat SQL-databasen med en privat slutpunkt.
- Välj Spara. Vänta tills meddelandet Uppdatera lyckades visas.
Steg 8: Verifiera Key Vault-integreringen
- På den vänstra menyn väljer du Inställningar > Miljövariabler igen.
- Bredvid AZURE_MYSQL_PASSWORD väljer du Visa värde. Värdet ska vara
@Microsoft.KeyVault(...)
, vilket innebär att det är en nyckelvalvsreferens eftersom hemligheten nu hanteras i nyckelvalvet. - Om du vill verifiera Redis-anslutningssträng väljer du Visa värde bredvid AZURE_REDIS_CONNECTIONSTRING.
För att sammanfatta processen för att skydda dina anslutningshemligheter:
- Hämtar anslutningshemligheterna från App Service-appens miljövariabler.
- Skapa ett nyckelvalv.
- Skapa en Key Vault-anslutning med den systemtilldelade hanterade identiteten.
- Uppdatera tjänstanslutningarna för att lagra konfidentiella uppgifter i nyckelvalvet.
Har du problem? Kontrollera felsökningsavsnittet.
4 – Konfigurera Laravel-variabler
Steg 1: Skapa CACHE_DRIVER
som en appinställning.
- På fliken Appinställningar väljer du Lägg till.
- I fältet Namn anger du CACHE_DRIVER.
- I fältet Värde anger du redis.
- Välj Använd och sedan Tillämpa igen och sedan Bekräfta.
Steg 2: Skapa följande appinställningar med samma steg i steg 1:
- 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 exempelarkivet för bekvämlighet.
- 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.
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.
Helst bör appinställningen APP_KEY
också konfigureras som en nyckelvalvsreferens, vilket är en process i flera steg. Mer information finns i Hur ändrar jag inställningen APP_KEY app till en Key Vault-referens?
5 – 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.
Steg 1: Kör i din GitHub-kodmiljö för exempel-forken git pull origin main
.
Detta drar in den nyligen slutförda arbetsflödesfilen i ditt kodutrymme.
Steg 2 (alternativ 1: med GitHub Copilot):
- Starta en ny chattsession genom att välja vyn Chatt och sedan välja +.
- Fråga: "@workspace Hur ansluter appen till databasen och redis?" Copilot kan ge dig en förklaring av hur inställningarna konfigureras i config/database.php.
- Fråga: "@workspace I produktionsläge körs min app i en App Service-webbapp som använder Azure Service Connector för att ansluta till en flexibel MySQL-server. Vilka miljövariabelnamn behöver jag använda? Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i filen config/database.php .
- Öppna konfiguration/database.php i utforskaren och lägg till kodförslaget.
- Fråga: "@workspace Min App Service-app använder också Azure Service Connector för att ansluta till en Cache for Redis med hjälp av Django-klienttypen. Vilka miljövariabelnamn behöver jag använda?*" Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i filen config/database.php . Om du uppmanas att göra det loggar du in på GitHub Copilot för Azure för att få mer exakta svar.
- Lägg till kodförslaget. GitHub Copilot ger dig inte samma svar varje gång, och det är inte alltid korrekt. Du kan behöva ställa fler frågor för att finjustera svaret. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.
Steg 2 (alternativ 2: utan GitHub Copilot):
- Öppna konfiguration/database.php i utforskaren. Leta upp avsnittet
mysql
och gör följande ändringar: - Ersätt
DB_HOST
(rad 49) medAZURE_MYSQL_HOST
. - Ersätt
DB_DATABASE
(rad 51) medAZURE_MYSQL_DBNAME
. - Ersätt
DB_USERNAME
(rad 52) medAZURE_MYSQL_USERNAME
. - Ersätt
DB_PASSWORD
(rad 53) medAZURE_MYSQL_PASSWORD
. - Ersätt
DB_PORT
(rad 50) medAZURE_MYSQL_PORT
. - Bläddra till avsnittet Redis
cache
och gör följande ändringar: - Ersätt
REDIS_HOST
(rad 142) medAZURE_REDIS_HOST
. - Ersätt
REDIS_PASSWORD
(rad 144) medAZURE_REDIS_PASSWORD
. - Ersätt
REDIS_PORT
(rad 145) medAZURE_REDIS_PORT
. - Ersätt
REDIS_CACHE_DB
(rad 146) 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.
Steg 3:
- Välj källkontrolltillägget.
- I textrutan skriver du ett incheckningsmeddelande som
Configure Azure database and cache connections
. Eller väljoch låt GitHub Copilot generera ett incheckningsmeddelande åt dig.
- Välj Checka in och bekräfta sedan med Ja.
- Välj Synkronisera ändringar 1 och bekräfta sedan med OK.
Steg 4: Tillbaka på sidan Distributionscenter i Azure-portalen:
- Välj fliken Loggar och välj sedan Uppdatera för att se den nya distributionskörningen.
- I loggobjektet för distributionskörningen väljer du posten Skapa/distribuera loggar med den senaste tidsstämpeln .
Steg 5: 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 Lyckades. Det tar ungefär 10 minuter.
Har du problem? Kontrollera felsökningsavsnittet.
6 – Generera databasschema
Skapelseguiden 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: Tillbaka i App Service-sidan, i den vänstra menyn,
- Välj Utvecklingsverktyg>SSH.
- Välj Gå.
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.
Tips
I SSH-sessionen kan endast ändringar av filer i /home
sparas utöver omstarter av appar. Ändringar utanför /home
sparas inte.
7 – Ändra webbplatsens rot
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 och välj sedan Fortsätt. 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.
8 – Bläddra till appen
Steg 1: På App Service-sidan:
- Välj Översikt på den vänstra menyn.
- Välj appens standarddomän .
Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en säker datadriven PHP-app i Azure App Service.
Tips
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.
9 – Överföra 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 Portal:
- 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.
2. Skapa Azure-resurser och distribuera en exempelapp
I det här steget skapar du Azure-resurserna och distribuerar en exempelapp för att App Service på Linux. Stegen som används i den här självstudien skapar en uppsättning resurser som är säkra som standard, inklusive App Service och Azure Database för MySQL.
GitHub-kodområdet har redan Azure Developer CLI (AZD).
Generera en Laravel-krypteringsnyckel med
php artisan key:generate --show
:php artisan key:generate --show
Logga in på Azure genom att köra
azd auth login
kommandot och följa instruktionerna:azd auth login
Skapa nödvändiga Azure-resurser och distribuera appkoden med
azd up
kommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.azd up
När du uppmanas att ge följande svar:
Fråga Svar Ange ett nytt miljönamn Skriv ett unikt namn. AZD-mallen använder det här namnet som en del av DNS-namnet på din webbapp i Azure ( <app-name>-<hash>.azurewebsites.net
). Alfanumeriska tecken och bindestreck tillåts.Välj en Azure-prenumeration som ska användas Välj din prenumeration. Välj en Azure-plats att använda Välj en plats. Ange ett värde för infrastrukturskyddad parameter för "appKey" Använd utdata php artisan key:generate --show
här. AZD-mallen skapar en Key Vault-hemlighet för den som du kan använda i din app.Ange ett värde för infrastruktursäkrad parameter för "databasePassword" Databaslösenord för MySQL. Den måste vara minst 8 tecken lång och innehålla versaler, gemener, siffror och specialtecken. Kommandot
azd up
tar cirka 15 minuter att slutföra (Redis-cachen tar mest tid). Den kompilerar och distribuerar även programkoden, men du ändrar koden senare så att den fungerar med App Service. När den körs innehåller kommandot meddelanden om etablerings- och distributionsprocessen, inklusive en länk till distributionen i Azure. När det är klart visar kommandot även en länk till distributionsprogrammet.Den här AZD-mallen innehåller filer (azure.yaml och infra-katalogen ) som genererar en säker arkitektur som standard med följande Azure-resurser:
- Resursgrupp: Containern för alla skapade resurser.
- App Service-plan: Definierar beräkningsresurserna för App Service. En Linux-plan på B1-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 via DNS-zonintegrering. En databas skapas åt dig på servern.
- Azure Cache for Redis: Endast tillgänglig inifrån det virtuella nätverket.
- Privata slutpunkter: Åtkomstslutpunkter för nyckelvalvet och Redis-cachen i det virtuella nätverket.
- Privata DNS-zoner: Aktivera DNS-upplösning av nyckelvalv, databaseservern och Redis-cachen på det virtuella nätverket.
- Log Analytics-arbetsyta: Fungerar som målkontainer för din app för att leverera sina loggar, där du även kan köra frågor mot loggarna.
- Nyckelvalv: Används för att behålla databaslösenordet på samma sätt när du distribuerar om med AZD.
Har du problem? Kontrollera felsökningsavsnittet.
3. Använd Azure-anslutningssträngar i programkod
Den AZD-mall som du använder genererade anslutningsvariablerna åt dig redan som appinställningar och matar ut dem till terminalen för din bekvämlighet. Appinställningar är ett sätt att hålla anslutningshemligheter borta från din kodlagringsplats.
I AZD-utdata hittar du appinställningarna som börjar med
AZURE_MYSQL_
ochAZURE_REDIS_
. Endast inställningsnamnen visas. De ser ut så här i AZD-utdata:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_DBNAME - AZURE_MYSQL_FLAG - AZURE_MYSQL_HOST - AZURE_MYSQL_PASSWORD - AZURE_MYSQL_PORT - AZURE_MYSQL_USERNAME - AZURE_REDIS_DATABASE - AZURE_REDIS_HOST - AZURE_REDIS_PASSWORD - AZURE_REDIS_PORT - AZURE_REDIS_SSL
Inställningar som börjar med
AZURE_MYSQL_
är anslutningsvariabler för MySQL-databasen, och inställningar som börjar medAZURE_REDIS_
är för Redis-cachen. Du måste använda dem i koden senare. För att underlätta för dig visar AZD-mallen direktlänken till appens appinställningar i Azure-portalen.Öppna konfiguration/database.php från utforskaren. Det här är konfigurationsfilen för databas- och Redis-cacheanslutningar.
Leta reda på den del som definierar
mysql
anslutningen (raderna 46–64) och ersättDB_HOST
,DB_PORT
,DB_DATABASE
,DB_USERNAME
ochDB_PASSWORD
medAZURE_MYSQL_
appinställningarna från AZD-utdata. Anslutningenmysql
bör se ut som följande kod.'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('AZURE_MYSQL_HOST', '127.0.0.1'), 'port' => env('AZURE_MYSQL_PORT', '3306'), 'database' => env('AZURE_MYSQL_DBNAME', 'forge'), 'username' => env('AZURE_MYSQL_USERNAME', 'forge'), 'password' => env('AZURE_MYSQL_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
Mer information om databaskonfiguration i Laravel finns i Laravel-dokumentationen.
Leta reda på den del som definierar Redis-cacheanslutningen (raderna 140–147) och ersätt
REDIS_HOST
,REDIS_PASSWORD
,REDIS_PORT
ochREDIS_CACHE_DB
medAzure_REDIS_
appinställningarna från AZD-utdata. Lägg också till'scheme' => 'tls',
i anslutningen. Cacheanslutningen bör se ut som följande kod:'cache' => [ 'scheme' => 'tls', 'url' => env('REDIS_URL'), 'host' => env('AZURE_REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('AZURE_REDIS_PASSWORD'), 'port' => env('AZURE_REDIS_PORT', '6379'), 'database' => env('AZURE_REDIS_DATABASE', '1'), ],
Mer information om Redis cachekonfiguration i Laravel finns i Laravel-dokumentationen.
Anmärkning
Kom ihåg att ändringarna inte har distribuerats ännu. Du distribuerar dem i slutet av nästa steg.
4. Konfigurera Laravel-inställningar i webbappen
Öppna infra/resources.bicep från utforskaren. Det här är Bicep-filen som definierar de skapade Azure-resurserna.
Leta reda på den del som definierar appinställningarna (raderna 510–514) och avkommentera dem. Dessa appinställningar är:
Inställning Beskrivning CACHE_DRIVER
Meddelar Laravel att använda Redis som cache (se Laravel-dokumentationen). MYSQL_ATTR_SSL_CA
Krävs för att öppna en TLS-anslutning till MySQL i Azure. Certifikatfilen ingår i exempellagringsplatsen för enkelhetens skull. Den här variabeln används av mysql-anslutningen i config/database.php LOG_CHANNEL
Instruerar Laravel att skicka loggar till stderr
, vilket gör det tillgängligt för App Service-loggarna (se Laravel-dokumentationen).APP_DEBUG
Aktivera felsökningslägessidor i Laravel (se Laravel-dokumentationen). APP_KEY
Laravel-krypteringsvariabel. AZD-mallen har redan skapat en Key Vault-hemlighet (raderna 212-217), så du kommer åt den med en Key Vault-referens. I infra/resources.bicep hittar du resursdefinitionen för App Service-appen och avkommentera rad 315.
appCommandLine: 'cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload'
Laravel-programmets livscykel börjar i katalogen /public i stället för programroten. Php-standardcontainern för App Service använder Nginx, som startar i programroten. Om du vill ändra platsroten måste du ändra Nginx-konfigurationsfilen i PHP-containern (/etc/nginx/sites-available/default). För att underlätta för dig innehåller exempellagringsplatsen en ersättningskonfigurationsfil som kallas standard, vilket talar om för Nginx att titta i katalogen /public . Det här anpassade kommandot i
appCommandLine
körs varje gång appen startar för att tillämpa filbytet var gång Linux-containern startas om från ett rent tillstånd.Gå tillbaka till kodutrymmesterminalen och kör
azd up
igen.azd up
Tips
azd up
kör azd package
, azd provision
, och azd deploy
tillsammans, och det är vettigt eftersom du gör både infrastruktur- och programändringar. Om du bara vill göra ändringar i infrastrukturen kör du azd provision
. Om du bara vill distribuera ändringar i programkoden kör du azd deploy
.
Har du problem? Kontrollera felsökningsavsnittet.
5. Generera databasschema
Med MySQL-databasen skyddad av det virtuella nätverket är det enklaste sättet att köra Laravel-databasmigreringar i en SSH-session med Linux-containern i App Service.
I AZD-utdata letar du reda på URL:en för SSH-sessionen och navigerar till den i webbläsaren. Det ser ut så här i utdata:
Open SSH session to App Service container at: <URL>
I SSH-sessionen kör du databasmigreringar från katalogen /home/site/wwwroot :
cd /home/site/wwwroot php artisan migrate --force
Om det lyckas ansluter App Service till databasen.
Anmärkning
Endast ändringar i filer i /home
kan bevaras utöver omstarter av appar.
Har du problem? Kontrollera felsökningsavsnittet.
6. Bläddra till appen
I AZD-utdata letar du reda på url:en för din app och navigerar till den i webbläsaren. URL:en ser ut så här i AZD-utdata:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Lägg till några uppgifter i listan.
Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for MySQL.
Har du problem? Kontrollera felsökningsavsnittet.
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. För enkelhetens skull har AZD-mallen redan aktiverat loggning till det lokala filsystemet och skickar loggarna till en Log Analytics-arbetsyta.
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.
Route::get('/', function () {
Log::info("Get /");
$startTime = microtime(true);
// Simple cache-aside logic
if (Cache::has('tasks')) {
$data = Cache::get('tasks');
} else {
$data = Task::orderBy('created_at', 'asc')->get();
Cache::add('tasks', $data);
}
return view('tasks', ['tasks' => $data, 'elapsed' => microtime(true) - $startTime]);
});
I utdata från AZD hittar du länken för att strömma App Service-loggar och navigera till den via webbläsaren. Länken ser ut så här i AZD-utdata:
Stream App Service logs at: <URL>
Har du problem? Kontrollera felsökningsavsnittet.
8. Rensa resurser
Om du vill ta bort alla Azure-resurser i den aktuella distributionsmiljön kör azd down
du och följer anvisningarna.
azd down
Felsökning
Jag får felet under databasmigreringar php_network_getaddresses: getaddrinfo for mysqldb failed: No address associated with hostname...
Det anger att MySQL-anslutningsvariabler inte är korrekt konfigurerade. Kontrollera att AZURE_MYSQL_
appinställningarna är korrekt konfigurerade i 3. Använd Azure-anslutningssträngar i programkod.
Jag får en tom sida i webbläsaren.
Det anger att App Service inte kan hitta PHP-startfilerna i /public. Följ stegen i 4. Konfigurera Laravel-inställningar i webbappen.
Jag får en felsökningssida i webbläsaren som säger Unsupported cipher or incorrect key length.
Det anger att APP_KEY
inställningen är inställd på en ogiltig nyckel. När du kör azd up
, se till att du ställer in appKey
till utdata från php artisan key:generate --show
.
Jag får en felsökningssida i webbläsaren som säger Uncaught Error: Class "Illuminate\..." not found.
Det här felet och liknande fel indikerar att du inte körde composer install
före azd up
, eller att paketen i katalogen /vendor är inaktuella. Kör composer install
och azd deploy
igen.
Jag får en felsökningssida i webbläsaren som säger php_network_getaddresses: getaddrinfo for redishost failed: Name or service not known.
Det anger att Redis-anslutningsvariabler inte är korrekt konfigurerade. Kontrollera att AZURE_REDIS_
appinställningarna är korrekt konfigurerade i 3. Använd Azure-anslutningssträngar i programkod.
Jag får en felsökningssida i webbläsaren som säger SQLSTATE[42S02]: Base table or view not found: 1146 Table 'XXXX-XXXXXXXXX-mysql-database.tasks' doesn't exist
Det innebär att du inte har kört databasmigreringar eller att databasmigreringar inte lyckades. Följ stegen 5. Generera databasschema.
Vanliga frågor och svar
- Hur mycket kostar den här installationen?
- Hur gör jag för att ansluta till MySQL-databasen som skyddas bakom det virtuella nätverket med andra verktyg?
- Hur ändrar jag inställningen APP_KEY app till en Key Vault-referens?
- Hur fungerar utveckling av lokala appar med GitHub Actions?
- Varför är GitHub Actions-distributionen så långsam?
- Jag har inte behörighet att skapa en användartilldelad identitet
- Vad kan jag göra med GitHub Copilot i mitt kodområde?
- Hur mycket kostar den här installationen?
- Hur gör jag för att ansluta 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?
- Jag har inte behörighet att skapa en användartilldelad identitet
- Vad kan jag göra med GitHub Copilot i mitt kodområde?
Hur mycket kostar den här installationen?
Prissättningen för de skapade resurserna ä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 Prissättning 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 ändrar jag inställningen APP_KEY app till en Key Vault-referens?
Från portalstegen i 4 – Konfigurera Laravel-variabler kan du ändra APP_KEY
till en Key Vault-referens genom att köra följande Azure CLI-kommandon i GitHub-kodområdet:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=laravelAppKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(php artisan key:generate --show)
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "APP_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Du kan också göra samma sak i portalen. Mer information finns i:
Hur fungerar utveckling av lokala appar med GitHub Actions?
Ta den autogenererade arbetsflödesfilen från App Service som ett exempel, varje git push
startar en ny bygg- och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen gör du de önskade uppdateringarna och skickar dem 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 bygg-då-distribuera, två-jobbs körning. 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
arbetet ska du ladda upp filer som artefakter. - I början av
deploy
jobbet laddar du ned artefakterna.
Merparten av den tid som processen med två jobb tar går åt till att ladda upp och ladda ner 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.
Jag har inte behörighet att skapa en användartilldelad identitet
Se Konfigurera GitHub Actions-distribution från Distributionscenter.
Vad kan jag göra med GitHub Copilot i mitt kodområde?
Du kanske märker att GitHub Copilot-chattvyn redan fanns där när du skapade kodområdet. För din bekvämlighet inkluderar vi GitHub Copilot-chatttillägget i containerdefinitionen (se .devcontainer/devcontainer.json). Du behöver dock ett GitHub Copilot-konto (30 dagars kostnadsfri utvärderingsversion tillgänglig).
Några tips när du pratar med GitHub Copilot:
- I en enda chattsession bygger frågorna och svaren på varandra och du kan justera dina frågor för att finjustera det svar du får.
- Som standard har GitHub Copilot inte åtkomst till någon fil på lagringsplatsen. Om du vill ställa frågor om en fil öppnar du filen i redigeraren först.
- Om du vill ge GitHub Copilot åtkomst till alla filer på lagringsplatsen när du förbereder dess svar börjar du din fråga med
@workspace
. Mer information finns i Use the @workspace agent. - I chattsessionen kan GitHub Copilot föreslå ändringar och (med
@workspace
) även var ändringarna ska utföras, men det är inte tillåtet att göra ändringarna åt dig. Det är upp till dig att lägga till de föreslagna ändringarna och testa dem.
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: