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.
Tento článek vysvětluje, jak nasadit aplikaci Django, která používá mssql-django back-end k Azure App Service, včetně konfigurace ovladače ODBC, tajných kódů založených na prostředí a ověřování spravované identity.
Prerequisites
- Předplatné Azure
- Instance služby Azure SQL Database nebo SQL Serveru dostupná z Azure
- Projekt Django nakonfigurovaný pomocí
mssql-django - Nainstalované rozhraní Azure CLI
Ovladač ODBC na Azure App Service
Azure App Service instance Linuxu zahrnují ovladač MICROSOFT ODBC pro SQL Server. Nainstalovanou verzi ovladače můžete ověřit spuštěním následujícího příkazu:
az webapp ssh --resource-group <your-rg> --name <your-app>
odbcinst -j
Note
Azure App Service obvykle zahrnuje ovladač ODBC 17 a/nebo 18 předinstalovaný v plánech Linuxu. Plány služby App Service ve Windows také zahrnují ovladač ODBC.
Použití proměnných prostředí pro tajné kódy
Nezakódujte přihlašovací údaje databáze v settings.pysouboru . Použijte proměnné prostředí a nakonfigurujte je v nastavení aplikace služby App Service:
import os
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": os.environ.get("DB_NAME", "<your-database>"),
"USER": os.environ.get("DB_USER", ""),
"PASSWORD": os.environ.get("DB_PASSWORD", ""),
"HOST": os.environ.get("DB_HOST", "<your-server>.database.windows.net"),
"PORT": os.environ.get("DB_PORT", "1433"),
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Tip
U požadovaných hodnot, jako jsou DB_NAME a DB_HOST, zvažte použití os.environ["DB_NAME"] (bez výchozí hodnoty), aby aplikace při chybějící proměnné prostředí okamžitě selhala s jasnou chybou KeyError.
Nastavte proměnné prostředí v Azure App Service:
az webapp config appsettings set \
--resource-group <your-rg> \
--name <your-app> \
--settings DB_NAME=<your-database> DB_HOST=<your-server>.database.windows.net DB_USER=<your-username> DB_PASSWORD=<your-password>
Použijte ověřování pomocí spravované identity
Pro produkční nasazení použijte spravovanou identitu, abyste se vyhnuli ukládání přihlašovacích údajů. Povolte spravovanou identitu přiřazenou systémem ve službě App Service:
az webapp identity assign --resource-group <your-rg> --name <your-app>
Udělte spravované identitě přístup k vaší databázi Azure SQL:
CREATE USER [<your-app-name>] FOR EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<your-app-name>];
ALTER ROLE db_datawriter ADD MEMBER [<your-app-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<your-app-name>];
Note
Udělte pouze role, které vaše aplikace potřebuje.
Db_ddladmin pevná role databáze se vyžaduje jenom v případě, že aplikace spouští migrace. Pro úlohy jen pro čtení je db_datareader dostačující.
Pokud je váš server nakonfigurovaný pro ověřování pouze pomocí Microsoft Entra, FROM EXTERNAL PROVIDER selže s chybou Msg 33130, protože server nemůže kontaktovat Microsoft Graph, aby přeložil název identity. Vytvořte uživatele ručně pomocí CREATE USER [<your-app-name>] WITH SID = 0x<sid-hex>, TYPE = E, kde <sid-hex> je odvozen z ID aplikace spravované identity (klienta), nikoli jeho ID objektu. Postup převodu najdete v tématu Udělení přístupu k identitě v Azure SQL.
Nakonfigurujte settings.py pro použití spravované identity:
import os
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": os.environ.get("DB_NAME", "<your-database>"),
"HOST": os.environ.get("DB_HOST", "<your-server>.database.windows.net"),
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryMsi",
},
},
}
Použití přístupových tokenů s využitím ManagedIdentityCredential
Případně použijte nastavení TOKEN společně s azure.identity:
Caution
Hodnota TOKEN se načte jednou při spuštění procesu a vyprší po 60 až 90 minutách. U dlouhotrvajících nasazení služby App Service použijte tento přístup pouze v případě, že implementujete také logiku aktualizace tokenu nebo krátkodobou recyklaci pracovních procesů. Pokud ve vašem prostředí funguje přímý vzor ActiveDirectoryMsi, vyhnete se problému s tokenem při spuštění.
import os
from azure.identity import ManagedIdentityCredential
credential = ManagedIdentityCredential()
token = credential.get_token("https://database.windows.net/.default").token
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": os.environ.get("DB_NAME", "<your-database>"),
"HOST": os.environ.get("DB_HOST", "<your-server>.database.windows.net"),
"PORT": "1433",
"TOKEN": token,
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Tip
DefaultAzureCredentialje vhodný pro vývoj a sdílené základy kódu, protože zkouší více typů přihlašovacích údajů automaticky, takže stejný kód funguje na přenosném počítači, v CI a v Azure. Každý typ přihlašovacích údajů, který nelze použít, však přidává několik sekund zpoždění, což zpomaluje spouštění. Vzhledem k tomu, že služba App Service má vždy k dispozici spravovanou identitu, ManagedIdentityCredential ověřuje se okamžitě bez řetězu testů. Nainstalujte azure-identity do souboru s požadavky: pip install azure-identity.
Spouštění migrací během nasazení
Přidejte skript po nasazení nebo spouštěcí příkaz pro automatické spouštění migrací:
az webapp config set \
--resource-group <your-rg> \
--name <your-app> \
--startup-file "python manage.py migrate && gunicorn myproject.wsgi"
Shromažďování statických souborů
Konfigurace zpracování statických souborů pro produkční prostředí:
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
Spusťte collectstatic jako součást nasazení:
python manage.py collectstatic --noinput
Nasazení do služby App Service
App Service může hostovat aplikaci Django dvěma způsoby:
- Integrovaná image Python Linuxu: App Service sestaví kód ze zdroje a poskytuje modul runtime Python.
- Vlastní image Dockeru: image si sestavíte sami a odkážete na ni v registru kontejnerů.
Obě cesty můžou použít spravovanou identitu přiřazenou systémem k ověření v Azure SQL, ale recept se liší. Vyberte kartu, která odpovídá vašemu nasazení.
S předem připravenou imagí Linuxu s Pythonem nástroj Oryx Builder služby App Service automaticky nainstaluje requirements.txt a spustí vaši aplikaci Django pod gunicorn. Místní HTTP proxy pro spravovanou identitu umožňuje, aby Authentication=ActiveDirectoryMsi fungovalo přímo v rámci připojovacího řetězce ODBC. Použijte settings.py, jak je uvedeno v části Použití ověřování pomocí spravované identity.
Nasaďte kód pomocí az webapp up, povolte spravovanou identitu přiřazenou systémem a nastavte proměnné prostředí databáze:
az webapp up \
--resource-group <your-rg> \
--name <your-app> \
--runtime "PYTHON:3.12" \
--sku B1
az webapp identity assign --resource-group <your-rg> --name <your-app>
az webapp config appsettings set \
--resource-group <your-rg> \
--name <your-app> \
--settings DB_NAME=<your-database> DB_HOST=<your-server>.database.windows.net
Potom udělte spravované identitě přístup v SQL, jak je popsáno v tématu Použití ověřování spravované identity.
Místní vývoj s využitím Docker Compose
Pro místní vývoj a testování použijte Docker Compose ke spuštění aplikace Django společně s kontejnerem SQL Server:
# docker-compose.yml
services:
db:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "<password>" # Must meet SQL Server complexity requirements
ports:
- "1433:1433"
web:
build: .
ports:
- "8000:8000"
environment:
DB_HOST: db
DB_NAME: mydb
DB_USER: sa
DB_PASSWORD: "<password>"
depends_on:
- db
Tip
Kontejner SQL Server nevytvoří databáze aplikací automaticky. Po spuštění kontejnerů vytvořte databázi a spusťte migrace:
docker compose exec db /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "<password>" -No -Q "CREATE DATABASE mydb"
docker compose exec web python manage.py migrate
Image kontejneru SQL Server vyžaduje ACCEPT_EULA=Y a silné heslo SA. V produkčních prostředích místo přihlašovacích údajů SQL Server použijte Azure SQL Database se spravovanou identitou. Viz Použití ověřování spravované identity.