Not
Å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 Flexible 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 i 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.
Kör det här exemplet
Konfigurera en exempeldatadriven app som utgångspunkt. Exempellagringsplatsen innehåller 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_KEYsom 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 du Ctrl + C.
Har du problem? Kontrollera felsökningsavsnittet.
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. Det är också 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 alla Azure-resurser som behövs för programmet i en logisk container.
Logga in på Azure-portalen. Följ de här stegen 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 till Skapa webbapp direkt.
Steg 2: På sidan Skapa webbapp fyller du i formuläret på följande sätt.
- Namn: msdocs-laravel-mysql. Azure-portalen skapar en resursgrupp med namnet msdocs-laravel-mysql_group.
- 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.
- Prisplan: Basic. När du är redo kan du skala upp till en annan prisnivå.
Steg 3:
- Välj Nästa för att fortsätta till 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 Nästa för att fortsätta till 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. Om du vill se webbappen väljer du Gå till resurs. Distributionen 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å 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.
Skydda anslutningshemligheter
Distributionen genererade anslutningsvariablerna åt dig redan som appinställningar. Bästa praxis för säkerhet är att hålla hemligheter borta från App Service helt. Flytta dina hemligheter till ett nyckelvalv och ändra appinställningen till Key Vault-referenser med hjälp av Service Connectors.
Steg 1: Hämta den befintliga anslutningssträngen.
- 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 direkt i App Service-appen, vilket inte är det bästa. Du ändrar den här konfigurationen.
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_group.
- I Key Vault-namn anger du ett namn som endast består av bokstäver och siffror.
- I Region väljer du 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_group.
- I dialogrutan i Plats väljer du samma plats som din App Service-app.
- I Namn anger du msdocs-laravel-mysqlVaultEndpoint.
- I Virtuellt nätverk väljer du det virtuella nätverket i gruppen msdocs-laravel-mysql_group .
- I Undernät väljer du det tillgängliga kompatibla undernätet.
- Välj OK.
- Välj Granska + skapaoch välj sedan Skapa. Vänta tills nyckelvalv-implementeringen är klar. Du bör se Din distribution är klar.
Steg 4: Skapa MySQL-anslutningsappen.
- I det övre sökfältet anger du msdocs-laravel-mysql, och väljer sedan resursen App Service som heter msdocs-laravel-mysql.
- 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-server.
- För MySQL-databas väljer du din databas, till exempel msdocs-laravel-mysql-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 7: Slutför inställningarna för MySQL-anslutningsappen.
- Du är tillbaka i dialogrutan för MySQL-anslutning. På fliken Autentisering väntar du tills key vault-anslutningsappen har skapats. När den är klar väljs den automatiskt av Key Vault Connection.
- Välj Granska + Skapa.
- Välj Skapa. Vänta tills meddelandet Uppdatera lyckades visas.
Steg 8: Konfigurera Redis-anslutningsappen så att den använder 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 9: 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.
Konfigurera Laravel-variabler
Steg 1: Skapa CACHE_DRIVER som en appinställning.
- I webbappen väljer du Inställningar>Miljövariabler.
- På fliken Appinställningar väljer du Lägg till.
- För Namn, ange CACHE_DRIVER.
- För 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. När du är klar väljer du Använd för att uppdatera appinställningarna.
- 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. Den ingår i exempelarkivet.
- 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?
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.
Det här kommandot hämtar den nyligen bekräftade arbetsflödesfilen till ditt kodområde.
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-steg 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-steg 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
mysqloch 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
cacheoch 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 Konfigurera Azure-databas- och cacheanslutningar. Eller välj
och 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:
- Öppna webbappen i Azure-portalen och välj sedan Deployment>Distributionscenter.
- Välj 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.
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 på 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.
Ändra webbplatsrot
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). Exempellagringsplatsen innehåller 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. Ändringen sker utanför /home och går förlorad efter att en app har startats om.
Steg 1 :
- På den vänstra menyn väljer du Inställningar>Konfiguration.
- 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.
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.
Strömma diagnostiska loggar
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 matar 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:
- Från menyn till vänster, välj Övervakning>App Service-loggar.
- 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:
- Bekräfta borttagningen genom att ange resursgruppens namn.
- Välj Ta bort.
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 --showLogga in på Azure genom att köra
azd auth loginkommandot och följa instruktionerna:azd auth loginSkapa nödvändiga Azure-resurser och distribuera appkoden med
azd upkommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.azd upNä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 --showhä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 uptar cirka 15 minuter att slutföra. Redis-cachen tar mest tid. Kommandot 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.
Använda 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. 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_SSLInställningar som börjar med
AZURE_MYSQL_är anslutningsvariabler för MySQL-databasen. Inställningar som börjar medAZURE_REDIS_är för Redis-cachen. Du måste använda dem i koden senare. AZD-mallen visar direktlänken till appens appinställningar i Azure-portalen.Öppna konfiguration/database.php från utforskaren. Den här filen är konfigurationsfilen för databas- och Redis-cacheanslutningar.
Leta reda på den del som definierar
mysqlanslutningen (raderna 46–64) och ersättDB_HOST,DB_PORT,DB_DATABASE,DB_USERNAMEochDB_PASSWORDmedAZURE_MYSQL_appinställningarna från AZD-utdata. Anslutningenmysqlbö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_PORTochREDIS_CACHE_DBmedAzure_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.
Konfigurera Laravel-inställningar i webbappen
Öppna infra/resources.bicep från utforskaren. Den här filen ä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_DRIVERMeddelar Laravel att använda Redis som cache (se Laravel-dokumentationen). MYSQL_ATTR_SSL_CAKrä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_CHANNELInstruerar Laravel att skicka loggar till stderr, vilket gör det tillgängligt för App Service-loggarna (se Laravel-dokumentationen).APP_DEBUGAktivera felsökningslägessidor i Laravel (se Laravel-dokumentationen). APP_KEYLaravel-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).
Exempellagringsplatsen innehåller en ersättningskonfigurationsfil som kallas standard, vilket talar om för Nginx att titta i katalogen /public . Det här anpassade kommandot i
appCommandLinekö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 upigen.azd up
Tips
azd up kör azd package, azd provisionoch azd deploy tillsammans 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.
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 --forceOm 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.
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.
Strömma diagnostiska loggar
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 matar 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.
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 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 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 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 i 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
mysqlfrå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 Azure-portalens steg i 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 Azure-portalen. Mer information finns i:
Hur fungerar utveckling av lokala appar med GitHub Actions?
Ta den automatiskt genererade 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
buildarbetet ska du ladda upp filer som artefakter. - I början av
deployjobbet 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.
Relaterat innehåll
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 granska den här resursen: