Tutoriál: Připojit webovou aplikaci Django k Azure Database for PostgreSQL pomocí Service Connector

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:

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ě:

    1. Nainstalujte Azure CLI 2.87.0 nebo novější. Pokud chcete zkontrolovat verzi, spusťte az versionpříkaz . Upgrade provedete spuštěním az upgrade.
    2. Nainstalujte Python 3.
    3. Nainstalujte Git.
    4. Přihlaste se k Azure pomocí příkazu az login a podle pokynů.

Nastavení prostředí

  1. Zaregistrujte si poskytovatele Microsoft.ServiceLinkerMicrosoft.DBforPostgreSQL zdrojů pro své předplatné.

    az provider register --namespace Microsoft.ServiceLinker
    az provider register --namespace Microsoft.DBforPostgreSQL
    
  2. Nainstalujte nejnovější verzi rozšíření Service Connector bez hesla. Parametr --upgrade aktualizuje 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.

  1. Naklonujte úložiště ukázkové aplikace.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Alternativně 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.

  2. Přejděte do složky úložiště cd serviceconnector-webapp-postgresql-django-passwordless a 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.

  • LOCATION musí 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.
  1. 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"
    
  2. 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 && echo
    
  3. Vytvoř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.

  1. 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.txt
    
  2. Vytvoř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"
    
  3. 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=true
    
  4. Z 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.zip
    

    Pří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.

  1. 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 Enabled
    

    Příkaz bude úspěšný, když je stav zřizování flexibilního serveru PostgreSQL Succeeded.

  2. Odstraňte administrátorské heslo z aktuálního shellu po vytvoření serveru:

    unset ADMIN_PW
    
  3. Vytvoř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_RESOURCEENDPOINT vytvoří 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í

  1. 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 true
    
  2. Př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_ID
    

    Nastavení MSYS_NO_PATHCONV pro 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.

  3. Použijte az storage container create k vytvoření kontejneru nazvaného photos a 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_ENDPOINT
    

    Kontejner je připraven, když odpověď zobrazuje "created": true pro kontejner photos.

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_NAME
    
  • Azure 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:

Screenshot ukázkové webové aplikace s recenzemi restaurace, kde je záznam o restauraci s recenzí zákazníka a nahranou fotografií.

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: