Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak nasadit webovou aplikaci Django Python řízenou daty pro Azure App Service a pomocí konektoru Service Connector ji připojit k dalším Azure službám. Ukázková webová aplikace ukládá informace o restauracích a recenzích v databázi Azure Database for PostgreSQL a ukládá fotky do kontejneru Azure Storage.
K provedení následujících úloh použijete Azure CLI:
- Vytvořte webovou aplikaci Python Django a nasaďte ji do Azure App Service.
- Vytvořte flexibilní server a databázi Azure Database for PostgreSQL.
- Vytvořte účet a kontejner Azure Storage.
- Připojte webovou aplikaci k databázi a úložnému kontejneru pomocí nástroje Service Connector s ověřováním pomocí spravované identity.
- Interakce s webovou aplikací
Poznámka:
Tento kurz se podobá kurzu App Service Nasazení Python Django webové aplikace s PostgreSQL v Azure, ale používá systémem přiřazenou bezheslovou spravovanou identitu s Azure řízením přístupu na základě role (RBAC) pro přístup k dalším prostředkům Azure. Část Vytvoření připojení služby bez hesla v tomto článku ukazuje, jak konektor service connector zjednodušuje proces připojení.
Webová aplikace používá třídu DefaultAzureCredential klientské knihovny Python Azure Identity k automatickému zjištění, kdy existuje spravovaná identita a používá ji pro přístup k ostatním prostředkům.
Předpoklady
Předplatné Azure s oprávněními k zápisu a přiřazení rolí pro prostředky kurzu v oblasti Azure, která podporuje Service Connector a má dostatečnou podporu a kvótu App Service.
Azure Cloud Shell pro spuštění kroků tutoriálu, nebo pokud chcete spustit místně:
Nastavení prostředí
Zaregistrujte si poskytovatele
Microsoft.ServiceLinkerMicrosoft.DBforPostgreSQLzdrojů pro své předplatné.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLNainstalujte nejnovější verzi rozšíření Service Connector bez hesla. Parametr
--upgradeaktualizuje rozšíření, pokud je již nainstalované:az extension add --name serviceconnector-passwordless --upgrade
Klonování ukázkové aplikace
Important
Ukázkový archiv tutoriálu byl archivován 15. června 2026 a již není aktivně udržován. Použijte ho pouze k dokončení tohoto tutoriálu.
Naklonujte úložiště ukázkové aplikace.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativně si můžete aplikaci stáhnout z repozitáře serviceconnector-webapp-postgresql-django-passwordless a rozbalit ji do složky s názvem serviceconnector-webapp-postgresql-django-passwordless.
Přejděte do složky úložiště
cd serviceconnector-webapp-postgresql-django-passwordlessa z této složky spusťte všechny zbývající příkazy.
V ukázkové aplikaci jsou nastavení produkce webových aplikací v souboru azureproject/production.py . Vývojová nastavení jsou v AzureProject/settings.py. Nastavení produkčního prostředí konfiguruje Django tak, aby běžela v libovolném produkčním prostředí a nejsou specifická pro Službu App Service.
Když je proměnná prostředí WEBSITE_HOSTNAME nastavená, aplikace používá produkční nastavení. App Service nastavuje tuto proměnnou na hostitelské jméno aplikace, například msdocs-django.azurewebsites.net.
Další informace najdete v kontrolním seznamu nasazení Django. Viz také nastavení Production pro Django na Azure.
Definování počátečních proměnných prostředí
Následující kód definuje nezbytné proměnné prostředí pro účely tohoto kurzu.
-
LOCATIONmusí být Azure oblast, kde má vaše předplatné dostatečnou kvótu pro vytvoření prostředků a kde není Azure Database for PostgreSQL pro vaše předplatné omezená. - Administrátorské heslo PostgreSQL musí obsahovat 8 až 128 znaků alespoň ze tří z těchto kategorií: velká písmena, malá písmena, číslice a nealfanumerické znaky. Nepoužívej
$heslo do tohoto tutoriálu.
Nastavte následující proměnné prostředí a nahraďte
<region>platnou hodnotou:LOCATION="<region>" RAND_ID=$RANDOM$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" DATABASE_NAME="restaurant" STORAGE_ACCOUNT_NAME="account$RAND_ID" ADMIN_USER="demoadmin"Přečtěte si administrátorské heslo PostgreSQL, aniž byste ho zobrazovali nebo přidávali do historie shellu:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoVytvořte skupinu prostředků , která bude obsahovat všechny zdroje projektu. Název skupiny prostředků se ukládá do mezipaměti a automaticky se použije na následné příkazy.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Nasazení kódu aplikace do služby App Service
Vytvořte hostitele aplikace v App Service, povolte automatizaci sestavení a nasadíte ukázkový kód aplikace. Plán služby App Service Basic (B1) použitý v tomto tutoriálu je zpoplatněn v rámci vašeho předplatného Azure. Aktuální ceny najdete v článku Ceny App Service.
requirements.txt soubor archivovaného vzorku neoznačuje server Gunicorn, který používá start.sh. Přidejte ho do své lokální kopie, pokud už není přítomen:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtVytvořte plán Linux App Service v cenové kategorii Basic (B1) a poté vytvořte webovou aplikaci pomocí příkazu startup ze vzorku:
az appservice plan create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_PLAN_NAME \ --location $LOCATION \ --sku B1 \ --is-linux az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --runtime "PYTHON:3.14" \ --startup-file "start.sh"Povolte automatizaci sestavování App Service tak, aby nasazení nainstalovalo balíčky v requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueZ kořene repozitáře vytvořte ZIP soubor ukázkové aplikace a nasaděte jej pomocí az webapp deploy:
rm -f app.zip python -m zipfile -c app.zip * az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --src-path app.zip \ --type zip \ --track-status false rm app.zipPříkaz k nasazení uspěje, když App Service přijme ZIP soubor. Sestavování pokračuje v App Service a může trvat několik minut.
Vytvořte databázi PostgreSQL v Azure
Vytvořte flexibilní server a databázi Azure Database for PostgreSQL pro ukládání dat aplikace.
Vytvořte server Azure Database for PostgreSQL:
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledPříkaz bude úspěšný, když je stav zřizování flexibilního serveru PostgreSQL
Succeeded.Odstraňte administrátorské heslo z aktuálního shellu po vytvoření serveru:
unset ADMIN_PWVytvořte databázi pomocí az postgres flexible-server db create:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Vytvořit připojení ke službě bez hesla
Použijte az webapp connection a vytvořte Postgres-flexible pro přidání servisního konektoru, který propojí webovou aplikaci Azure s databází PostgreSQL pomocí bezheslové spravované identity authentication. Následující příkaz nakonfiguruje Azure Database for PostgreSQL pro použití spravované identity a Azure řízení přístupu na základě role. Výstup příkazu zobrazí seznam akcí, které service Connector provede.
Příkaz vytvoří nastavení aplikace s názvem AZURE_POSTGRESQL_CONNECTIONSTRING obsahující informace o připojení k databázi. Ukázková aplikace načítá toto nastavení v azureproject/production.py. Další informace najdete v tématu Proměnné prostředí Accessu.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database $DATABASE_NAME \
--client-type python \
--system-identity \
--yes
Spojení je připraveno, když příkaz nahlásí připojení k flexibilnímu serveru PostgreSQL a vytvoří AZURE_POSTGRESQL_CONNECTIONSTRING nastavení aplikace.
Propojení webové aplikace Django se službou Azure Storage pomocí nástroje Service Connector
Vytvořte účet úložiště Azure a potom ho pomocí příkazu az webapp connection create storage-blob připojte k webové aplikaci. Příkaz k připojení provádí následující kroky:
- Povolí spravovanou identitu přiřazenou systémem ve webové aplikaci.
- Přidává webovou aplikaci s rolí Storage Blob Data Contributor do úložného účtu.
- Nakonfiguruje síť účtu úložiště tak, aby přijímala přístup z webové aplikace.
- Proměnnou prostředí s názvem
AZURE_STORAGEBLOB_RESOURCEENDPOINTvytvoří pro účet služby Azure Storage.
Vytvoření účtu služby Azure Storage
Vytvořte účet úložiště pro obecné účely v2 s lokálně redundantním úložištěm:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Vytvořte bezheslové úložiště
Vytvořte bezheslové připojení k úložnému účtu:
az webapp connection create storage-blob \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--account $STORAGE_ACCOUNT_NAME \
--client-type python \
--system-identity
Připojení je připravené, jakmile příkaz oznámí připojení k účtu úložiště a vytvoří nastavení aplikace AZURE_STORAGEBLOB_RESOURCEENDPOINT.
Konfigurujte kontejner vzorových fotografií
Aktualizujte účet Azure Storage, aby umožňoval veřejný přístup ke čtení blobů pro tuto archivovanou ukázkovou aplikaci.
Poznámka:
Tento archivovaný vzorek používá přímé blob URL k zobrazení fotografií, takže tutoriál umožňuje anonymní čtení kontejneru
photos. Toto nastavení je specifické pro daný vzorek a Service Connector ho nevyžaduje. U produkčních aplikací udržujte kontejnery soukromé a používejte kontrolovaný způsob doručení, například ověřený aplikační endpoint.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access truePřiřaďte svému přihlášenému uživateli oprávnění k vytvoření kontejneru pomocí autentizace Microsoft Entra:
SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv) STORAGE_ACCOUNT_ID=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query id \ --output tsv) MSYS_NO_PATHCONV=1 az role assignment create \ --assignee-object-id $SIGNED_IN_USER_ID \ --assignee-principal-type User \ --role "Storage Blob Data Contributor" \ --scope $STORAGE_ACCOUNT_IDNastavení
MSYS_NO_PATHCONVpro tento příkaz zabrání aplikaci Git Bash ve Windows převést ID prostředku Azure na cestu systému Windows. Nemá žádný vliv v Azure Cloud Shell ani jiných prostředích Bash. Přiřazení rolí může trvat několik minut, než se stanou efektivními.Použijte az storage container create k vytvoření kontejneru nazvaného
photosa povolte anonymní čtení k blobům v tomto kontejneru:BLOB_ENDPOINT=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query primaryEndpoints.blob \ --output tsv) az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINTKontejner je připraven, když odpověď zobrazuje
"created": truepro kontejnerphotos.
Testování webové aplikace Python v Azure
Otevřete a otestujte webovou aplikaci Azure Restaurant Review. Aplikace používá balíček azure.identity a její DefaultAzureCredential třídu. Když je aplikace spuštěná v Azure, DefaultAzureCredential automaticky zjistí, kdy pro službu App Service existuje spravovaná identita, a použije ji pro přístup k Azure Storage a Azure Database for PostgreSQL prostředkům. Aplikace pro přístup k těmto prostředkům nemusí poskytovat klíče úložiště, certifikáty ani přihlašovací údaje.
Pro místní instalaci Azure CLI můžete aplikaci otevřít ve výchozím prohlížeči pomocí
az webapp browse:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell nemůže otevřít místní prohlížeč, takže nepodporuje příkaz
az webapp browse. Z Cloud Shell vyberte odkaz Default domain v pravém horním rohu stránky Azure portálu aplikace.
Spuštění aplikace může trvat minutu nebo dvě. Pokud se zobrazí výchozí stránka aplikace, která není ukázkovou aplikací, počkejte minutu a aktualizujte prohlížeč.
Otestujte funkčnost ukázkové aplikace přidáním restaurace a několika recenzemi s fotkami. Aplikace by měla vypadat podobně jako na následujícím snímku obrazovky:
Vyčištění prostředků
Pokud se chcete vyhnout průběžným poplatkům, můžete odstranit prostředky, které jste pro tento kurz vytvořili, odstraněním skupiny prostředků, která je obsahuje. Před spuštěním příkazu se ujistěte, že už aplikaci nebo prostředky nepotřebujete.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Příkaz se okamžitě vrátí, zatímco Azure smaže zdroje.
Troubleshooting
Pokud se aplikace nespustí nebo se nepřipojí ke svým prostředkům, zkontrolujte protokoly nasazení služby App Service, ověřte, že nastavení aplikace AZURE_POSTGRESQL_CONNECTIONSTRING a AZURE_STORAGEBLOB_RESOURCEENDPOINT existují, a počkejte několik minut, než se přiřazení rolí Azure projeví. Pro problémy se startem Python aplikací viz následující článek: