Distribuera en Python Django-webbapp med PostgreSQL i Azure
I den här självstudien distribuerar du en datadriven Python-webbapp (Django) till Azure App Service med relationsdatabastjänsten Azure Database for PostgreSQL. Azure App Service stöder Python i en Linux-servermiljö. Om du vill kan du se Flask-självstudien eller FastAPI-självstudien i stället.
I den här självstudien lär du dig att:
- Skapa en säker App Service-, PostgreSQL- och Redis-cachearkitektur som standard.
- Skydda anslutningshemligheter med hjälp av en hanterad identitet och Key Vault-referenser.
- Distribuera en Python-exempelapp till App Service från en GitHub-lagringsplats.
- Åtkomst till App Service-anslutningssträng och appinställningar i programkoden.
- Gör uppdateringar och distribuera om programkoden.
- Generera databasschema genom att köra databasmigreringar.
- Strömma diagnostikloggar från Azure.
- Hantera appen i Azure Portal.
- Etablera samma arkitektur och distribuera med hjälp av Azure Developer CLI.
- Optimera ditt utvecklingsarbetsflöde med GitHub Codespaces och GitHub Copilot.
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.
- Kunskaper om Python med Django-utveckling.
- (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
- Azure Developer CLI installerat. Du kan följa stegen med Azure Cloud Shell eftersom Azure Developer CLI redan är installerat.
- Kunskaper om Python med Django-utveckling.
- (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
Hoppa till slutet
Om du bara vill se exempelappen i den här självstudien som körs i Azure kör du bara följande kommandon i Azure Cloud Shell och följer anvisningarna:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
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.
Kommentar
Om du följer den här självstudien med din egen app kan du titta på requirements.txt filbeskrivning i README.md för att se vilka paket du behöver.
Steg 1: I ett nytt webbläsarfönster:
- Logga in på ditt GitHub-konto.
- Navigera till https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Avmarkera Kopiera endast huvudgrenen. Du vill ha alla grenar.
- Välj Skapa förgrening.
Steg 2: I GitHub-förgreningen:
- Välj main>starter-no-infra för startgrenen. Den här grenen innehåller bara exempelprojektet och inga Azure-relaterade filer eller konfigurationer.
- Välj Kod>Skapa kodområde på starter-no-infra.
Det tar några minuter att konfigurera kodområdet och det körs
pip install -r requirements.txt
för lagringsplatsen i slutet. Dessutom innehåller den angivna .env-filen redan en dummyvariabelSECRET_KEY
som Django behöver köra lokalt.
Steg 3: I kodområdesterminalen:
- Kör databasmigreringar med
python manage.py migrate
. - Kör appen med
python manage.py runserver
. - När du ser meddelandet
Your application running on port 8000 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
.
Dricks
Du kan fråga GitHub Copilot om den här lagringsplatsen. Till exempel:
- @workspace Vad gör det här projektet?
- @workspace Vad gör mappen .devcontainer?
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 säkra resurser som standard som inkluderar App Service, Azure Database for PostgreSQL och Azure Cache. För skapandeprocessen anger du:
- Webbappens namn . Den används som en del av DNS-namnet för din app i form av
https://<app-name>-<hash>.<region>.azurewebsites.net
. - 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 Python som ska användas för din app.
- Värdplanen 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 Portal:
- Ange "webbappdatabas" i sökfältet överst i Azure Portal.
- 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-django-postgres-tutorial.
- Region: Alla Azure-regioner nära dig.
- Namn: msdocs-python-postgres-XYZ.
- Körningsstack: Python 3.12.
- Databas: PostgreSQL – Flexibel server väljs som standard som databasmotor. Servernamnet och databasnamnet anges också som standard till lämpliga värden.
- Lägg till Azure Cache for Redis: Ja.
- Värdplan: Basic. När du är klar kan du skala upp till en prisnivå för produktion.
- 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.
- Privat slutpunkt: Åtkomstslutpunkt för Redis-cachen i det virtuella nätverket.
- Nätverksgränssnitt: Representerar privata IP-adresser, en för var och en av de privata slutpunkterna.
- Flexibel Azure Database for PostgreSQL-server: Endast tillgänglig inifrån det virtuella nätverket. En databas och en användare skapas åt dig på servern.
- Azure Cache for Redis: Endast tillgängligt bakom det privata nätverket.
- Privat DNS zoner: Aktiverar DNS-matchning för databasservern Redis-cachen i det virtuella nätverket.
3. Skydda anslutningshemligheter och lägg till SECRET_KEY
Guiden skapa genererade anslutningsvariablerna åt dig redan 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 AZURE_POSTGRESQL_CONNECTIONSTRING.
- I inställningen Lägg till/redigera program går du till fältet Värde och letar upp delen password= i slutet av strängen.
- Kopiera lösenordssträngen efter lösenord= för senare användning.
Med de här appinställningarna kan du ansluta till Postgres-databasen och Redis-cachen som skyddas bakom privata slutpunkter. Hemligheterna sparas dock direkt i App Service-appen, vilket inte är det bästa. Du ändrar det här. Dessutom lägger du till en
SECRET_KEY
inställning som krävs av din Django-app.
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-python-postgres-tutorial.
- 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-python-postgres-tutorial.
- I dialogrutan i Plats väljer du samma plats som din App Service-app.
- I Namn skriver du msdocs-python-postgres-XYZVaultEndpoint.
- I Virtuellt nätverk väljer du msdocs-python-postgres-XYZVnet.
- I undernätet msdocs-python-postgres-XYZSubnet.
- Välj OK.
- Välj Granska + skapa och välj sedan Skapa. Vänta tills key vault-distributionen är klar. Du bör se "Distributionen är klar".
Steg 4: Konfigurera PostgreSQL-anslutningsappen
- I det översta sökfältet skriver du msdocs-python-postgres och väljer sedan App Service-resursen msdocs-python-postgres-XYZ.
- På sidan App Service går du till den vänstra menyn och väljer Inställningar > Tjänstanslutning. Det finns redan två anslutningsappar som guiden för att skapa appen har skapats åt dig.
- Markera kryssrutan bredvid PostgreSQL-anslutningsappen och välj sedan Redigera.
- I Klienttyp väljer du Django. Django-klienttypen i PostgreSQL-tjänstanslutningen ger dig databasvariabler i separata inställningar i stället för en anslutningssträng. De separata variablerna är enklare att använda i Djangos databasinställningar.
- Markera fliken autentisering.
- 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 5: 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 postgreSQL-anslutningsinställningarna
- Du är tillbaka i redigeringsdialogrutan för defaultConnector. På fliken Autentisering väntar du tills key vault-anslutningsappen har skapats. När den är klar väljer listrutan Key Vault-anslutning automatiskt den.
- Välj Nästa: Nätverk.
- Välj Spara. 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.
- Markera 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_POSTGRESQL_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.
Steg 9: Exempelprogrammet läser miljövariabeln SECRET_KEY för att ange den nödvändiga inställningen för SECRET_KEY. Du skapar den som en appinställning i det här steget.
- På fliken Appinställningar väljer du Lägg till.
- Ange Namn till SECRET_KEY.
- Ange Värde till en lång slumpmässig sträng.
- Klicka på Använd och sedan på Tillämpa igen och sedan på Bekräfta.
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 hemligheterna i nyckelvalvet.
Kommentar
Helst bör appinställningen SECRET_KEY
också konfigureras som en nyckelvalvsreferens, vilket är en process i flera steg. Mer information finns i Hur gör jag för att ändra inställningen SECRET_KEY app till en Key Vault-referens?
Har du problem? Kontrollera felsökningsavsnittet.
4. 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: I den vänstra menyn väljer du Distributionsdistributionscenter>.
Steg 2: 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 msdocs-django-postgresql-sample-app.
- I Gren väljer du starter-no-infra. Det här är samma gren som du arbetade i med exempelappen, utan några Azure-relaterade filer eller konfigurationer.
- Som Autentiseringstyp väljer du Användartilldelad identitet.
- I den översta menyn väljer du Spara.
App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i
.github/workflows
katalogen. Som standard skapar distributionscentret en användartilldelad identitet för arbetsflödet som ska autentiseras med Hjälp av Microsoft Entra (OIDC-autentisering). Alternativa autentiseringsalternativ finns i Distribuera till App Service med GitHub Actions.
Steg 3: Kör i GitHub-kodområdet i exempelgrenen git pull origin starter-no-infra
.
Detta hämtar den nyligen incheckade arbetsflödesfilen till ditt kodområde.
Steg 4 (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 azureproject/development.py och azureproject/production.py.
- 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 PostgreSQL-server med 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 azureproject/production.py .
- Öppna azureproject/production.py 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 azureproject/production.py .
- 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 4 (alternativ 2: utan GitHub Copilot):
- Öppna Program.cs i utforskaren.
- Leta upp den kommenterade koden (raderna 29–48) och ta bort kommentaren.
Detta skapar PostgreSQL- och Redis-anslutningar med hjälp
AZURE_POSTGRESQL_USER
av ,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
ochAZURE_REDIS_CONNECTIONSTRING
.
Steg 5:
- Välj källkontrolltillägget.
- I textrutan skriver du ett incheckningsmeddelande som
Configure Azure database and cache connectons
. 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 6: Tillbaka på sidan Distributionscenter i Azure Portal:
- 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 7: 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 5 minuter.
Har du problem? Kontrollera felsökningsguiden.
5. Generera databasschema
Med PostgreSQL-databasen skyddad av det virtuella nätverket är det enklaste sättet att köra Django-databasmigreringar i en SSH-session med Linux-containern i App Service.
Steg 1: Tillbaka i App Service-sidan, i den vänstra menyn,
- Välj Utvecklingsverktyg>SSH.
- Välj Gå.
Steg 2: I SSH-sessionen kör du python manage.py migrate
. Om det lyckas ansluter App Service till databasen.
Dricks
I SSH-sessionen kan endast ändringar av filer i /home
sparas utöver omstarter av appar. Ändringar utanför /home
sparas inte. SSH-sessionen är användbar för att köra vanliga python manage.py
kommandon, till exempel att skapa användare med python manage.py createsuperuser
. Mer information finns i dokumentationen för django django-admin och manage.py. Använd superanvändarkontot för att komma åt /admin
delen av webbplatsen.
Har du problem? Kontrollera felsökningsavsnittet.
6. Bläddra till appen
Steg 1: På App Service-sidan:
- Välj Översikt på den vänstra menyn.
- Välj appens URL.
Steg 2: Lägg till några restauranger i listan. Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for PostgreSQL.
7. Strömma diagnostikloggar
Azure App Service samlar in alla konsolloggar som hjälper dig att diagnostisera problem med ditt program. Exempelappen innehåller print()
instruktioner som visar den här funktionen enligt nedan.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Steg 1: På App Service-sidan:
- Välj Övervaka>App Service-loggar på den vänstra menyn.
- Under Programloggning väljer du Filsystem.
- I den översta menyn väljer du Spara.
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.
Läs mer om att logga in Python-appar i serien när du konfigurerar Azure Monitor för ditt Python-program.
8. 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 säkra som standardresurser som inkluderar App Service, Azure Database for PostgreSQL och Azure Cache for Redis.
Utvecklingscontainern har redan Azure Developer CLI (AZD).
Från lagringsplatsens rot kör du
azd init
.azd init --template python-app-service-postgresql-infra
När du uppmanas att ge följande svar:
Fråga Svar Den aktuella katalogen är inte tom. Vill du initiera ett projekt här i "<din katalog>"? Y Vad vill du göra med de här filerna? Behåll mina befintliga filer oförändrade 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.Logga in på Azure genom att
azd auth login
köra kommandot och följa kommandotolken:azd auth login
Skapa nödvändiga Azure-resurser med
azd provision
kommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.azd provision
Kommandot
azd provision
tar cirka 15 minuter att slutföra (Redis-cachen tar mest tid). Senare ändrar du koden så att den fungerar med App Service och distribuerar ändringarna medazd deploy
. När den körs innehåller kommandot meddelanden om etablerings- och distributionsprocessen, inklusive en länk till distributionen i Azure.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å 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 nyckelvalvet 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.
- Flexibel Azure Database for PostgreSQL-server: Endast tillgänglig inifrån det virtuella nätverket. En databas och en användare skapas åt dig på servern.
- Privat DNS zon: Aktiverar DNS-matchning för PostgreSQL-servern i det virtuella nätverket.
- Log Analytics-arbetsyta: Fungerar som målcontainer för din app för att skicka loggarna, där du även kan köra frågor mot loggarna.
- Azure Cache for Redis: Endast tillgänglig bakom den privata slutpunkten.
- Nyckelvalv: Endast tillgängligt bakom den privata slutpunkten. Används för att hantera hemligheter för App Service-appen.
När kommandot har skapat resurser och distribuerat programkoden första gången fungerar inte den distribuerade exempelappen ännu eftersom du måste göra små ändringar för att den ska kunna ansluta till databasen i Azure.
Har du problem? Kontrollera felsökningsavsnittet.
3. Använd databasen anslutningssträng
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 inställningarna
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
ochAZURE_REDIS_CONNECTIONSTRING
. För att skydda hemligheter visas endast inställningsnamnen. De ser ut så här i AZD-utdata:App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
För att underlätta för dig visar AZD-mallen direktlänken till appens appinställningarssida. Hitta länken och öppna den på en ny webbläsarflik.
Har du problem? Kontrollera felsökningsavsnittet.
4. Ändra exempelkod och distribuera om
I GitHub-kodområdet startar du en ny chattsession genom att välja vyn Chatt och sedan välja +.
Fråga: "@workspace Hur ansluter appen till databasen?" Copilot kan ge dig en förklaring av hur anslutningsinställningarna konfigureras i azureproject/development.py och azureproject/production.py.
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 PostgreSQL-server med 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 azureproject/production.py .
Öppna azureproject/production.py i utforskaren och 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?.
I terminalen kör du
azd deploy
.azd deploy
Har du problem? Kontrollera felsökningsavsnittet.
5. Generera databasschema
Med PostgreSQL-databasen skyddad av det virtuella nätverket är det enklaste sättet att köra Django-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: https://<app-name>.scm.azurewebsites.net/webssh/host
I SSH-sessionen kör du
python manage.py migrate
. Om det lyckas ansluter App Service till databasen.Kommentar
Endast ändringar i filer i
/home
kan bevaras utöver omstarter av appar. Ändringar utanför/home
sparas inte.
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: https://<app-name>.azurewebsites.net/
Lägg till några restauranger i listan.
Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for PostgreSQL.
Har du problem? Kontrollera felsökningsavsnittet.
7. Strömma diagnostikloggar
Azure App Service kan samla in konsolloggar som hjälper dig att diagnostisera problem med ditt program. För enkelhetens skull möjliggör AZD-mallen redan loggning till det lokala filsystemet och skickar loggarna till en Log Analytics-arbetsyta.
Exempelprogrammet innehåller print()
instruktioner för att demonstrera den här funktionen, enligt följande kodfragment.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
I AZD-utdata hittar du länken för att strömma App Service-loggar och navigera till den i webbläsaren. Länken ser ut så här i AZD-utdata:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Läs mer om att logga in Python-appar i serien när du konfigurerar Azure Monitor för ditt Python-program.
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
Nedan visas problem som kan uppstå när du försöker gå igenom den här självstudien och steg för att lösa dem.
Jag kan inte ansluta till SSH-sessionen
Om du inte kan ansluta till SSH-sessionen har själva appen inte startats. Mer information finns i diagnostikloggarna . Om du till exempel ser ett fel som KeyError: 'AZURE_POSTGRESQL_HOST'
kan det innebära att miljövariabeln saknas (du kan ha tagit bort appinställningen).
Jag får ett fel när jag kör databasmigreringar
Om du stöter på fel som rör anslutning till databasen kontrollerar du om appinställningarna (AZURE_POSTGRESQL_USER
, , AZURE_POSTGRESQL_PASSWORD
AZURE_POSTGRESQL_HOST
och AZURE_POSTGRESQL_NAME
) har ändrats eller tagits bort. Utan den anslutningssträng kan migreringskommandot inte kommunicera med databasen.
Vanliga frågor och svar
- Hur mycket kostar den här installationen?
- Hur gör jag för att ansluta till PostgreSQL-servern som skyddas bakom det virtuella nätverket med andra verktyg?
- Hur fungerar utveckling av lokala appar med GitHub Actions?
- Hur konfigureras Django-exemplet för att köras i Azure App Service?
- Hur gör jag för att ändra inställningen för SECRET_KEY app till en Key Vault-referens?
- Hur gör jag för att felsöka under GitHub Actions-distributionen?
- 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 PostgreSQL-servern som skyddas bakom det virtuella nätverket med andra verktyg?
- Hur fungerar utveckling av lokala appar med GitHub Actions?
- Hur konfigureras Django-exemplet för att köras i Azure App Service?
- Hur gör jag för att felsöka under GitHub Actions-distributionen?
- 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 PostgreSQL-servern skapas på den lägsta burst-nivån Standard_B1ms, med den minsta lagringsstorleken, som kan skalas upp eller ned. Se Priser för Azure Database for PostgreSQL.
- 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 PostgreSQL-servern som skyddas bakom det virtuella nätverket med andra verktyg?
- För grundläggande åtkomst från ett kommandoradsverktyg kan du köra
psql
från appens SSH-session. - Om du vill ansluta från ett skrivbordsverktyg 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?
Med hjälp av den automatiskt genererade arbetsflödesfilen från App Service som exempel startar var git push
och en ny bygg- och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen gör du önskade uppdateringar och push-överför till GitHub. Till exempel:
git add .
git commit -m "<some-message>"
git push origin main
Hur konfigureras Django-exemplet för att köras i Azure App Service?
Django-exempelprogrammet konfigurerar inställningar i filen azureproject/production.py så att den kan köras i Azure App Service. Dessa ändringar är vanliga för att distribuera Django till produktion, och inte specifika för App Service.
Django validerar HTTP_HOST-huvudet i inkommande begäranden. Exempelkoden använder
WEBSITE_HOSTNAME
miljövariabeln i App Service för att lägga till appens domännamn i Djangos inställning för ALLOWED_HOSTS .# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Django stöder inte servering av statiska filer i produktion. I den här självstudien använder du WhiteNoise för att aktivera servering av filerna. WhiteNoise-paketet har redan installerats med requirements.txt och dess mellanprogram läggs till i listan.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Sedan konfigureras de statiska filinställningarna enligt Django-dokumentationen.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Mer information finns i Produktionsinställningar för Django-appar.
Hur gör jag för att ändra inställningen för SECRET_KEY app till en Key Vault-referens?
Från portalstegen ovan kan du ändra SECRET_KEY
till en Key Vault-referens genom att köra följande Azure CLI-kommandon i Cloud Shell:
# 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=djangoSecretKey
# 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 $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_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 gör jag för att felsöka under GitHub Actions-distributionen?
Om ett steg misslyckas i den autogenererade GitHub-arbetsflödesfilen kan du prova att ändra det misslyckade kommandot för att generera mer utförliga utdata. Du kan till exempel få mer utdata från python
kommandot genom att lägga till alternativet -d
. Checka in och skicka ändringarna för att utlösa en annan distribution till App Service.
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 har märkt 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.
Lär dig hur App Service kör en Python-app: