Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, ODBC sürücüsü yapılandırması, ortam tabanlı gizli bilgiler ve yönetilen kimlik doğrulaması da dahil olmak üzere, mssql-django arka ucunu kullanan bir Django uygulamasının Azure App Service'e nasıl dağıtılacağı açıklanmaktadır.
Prerequisites
- Azure aboneliği
- Azure'den erişilebilen bir Azure SQL Veritabanı veya SQL Server örneği
- ile yapılandırılmış bir Django projesi
mssql-django - Azure CLI yüklendi
Azure App Service'da ODBC sürücüsü
Azure App Service Linux örnekleri, SQL Server için Microsoft ODBC Sürücüsünü içerir. Aşağıdakini çalıştırarak yüklü sürücü sürümünü doğrulayabilirsiniz:
az webapp ssh --resource-group <your-rg> --name <your-app>
odbcinst -j
Note
Azure App Service genellikle Linux planlarında önceden yüklenmiş ODBC Sürücüsü 17 ve/veya 18'i içerir. Windows Uygulaması Hizmet planları ODBC sürücüsünü de içerir.
Gizli bilgiler için ortam değişkenlerini kullanın
settings.py içinde veritabanı kimlik bilgilerini sabit kod olarak yazmayın. Ortam değişkenlerini kullanın ve bunları App Service uygulama ayarları olarak yapılandırın:
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
DB_NAME ve DB_HOST gibi gerekli değerler için, ortam değişkeni eksik olduğunda uygulamanın açık bir KeyError ile hemen başarısız olması amacıyla, os.environ["DB_NAME"] öğesini (varsayılan olmadan) kullanmayı göz önünde bulundurun.
ortam değişkenlerini Azure App Service ayarlayın:
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>
Yönetilen kimlik doğrulama kullanma
Üretim dağıtımlarında kimlik bilgilerinin depolanmasını önlemek için yönetilen kimliği kullanın. App Service'inizde sistem tarafından atanan yönetilen kimliği etkinleştirin:
az webapp identity assign --resource-group <your-rg> --name <your-app>
Yönetilen kimliğe Azure SQL veritabanınıza erişim izni verin:
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
Yalnızca uygulamanızın ihtiyaç duyduğu rolleri verin.
db_ddladmin sabit veritabanı rolü yalnızca uygulama geçişleri çalıştırıyorsa gereklidir. Yalnızca okuma iş yükleri için db_datareader yeterlidir.
Sunucunuz yalnızca Microsoft Entra kimlik doğrulaması için yapılandırılmışsa, sunucu kimlik adını çözümlemek için Microsoft Graph’a erişemediğinden FROM EXTERNAL PROVIDER, Msg 33130 ile başarısız olur. Kullanıcıyı CREATE USER [<your-app-name>] WITH SID = 0x<sid-hex>, TYPE = E kullanarak el ile oluşturun; burada <sid-hex>, nesne kimliğinden değil, yönetilen kimliğin uygulama (istemci) kimliğinden türetilir. Dönüştürme adımları için bkz. Azure SQL kimlik erişimi verme.
settings.py öğesini yönetilen kimliği kullanacak şekilde yapılandırın:
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",
},
},
}
ManagedIdentityCredential ile erişim belirteçlerini kullanma
Alternatif olarak, azure.identity ile TOKEN ayarını kullanın:
Caution
Değer TOKEN işlem başlangıcında bir kez getirilir ve 60-90 dakika sonra süresi dolar. Uzun süreli App Service dağıtımları için bu yaklaşımı yalnızca belirteç yenileme mantığını ya da kısa ömürlü çalışanların geri dönüştürülmesini de uyguluyorsanız kullanın. Doğrudan ActiveDirectoryMsi kalıbı ortamınızda çalışıyorsa, başlatma sırasında ortaya çıkan belirteç sorununu önler.
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
DefaultAzureCredentialgeliştirme ve paylaşılan kod temelleri için kullanışlıdır çünkü birden çok kimlik bilgisi türünü otomatik olarak dener, bu nedenle aynı kod dizüstü bilgisayarda, CI'de ve Azure'de çalışır. Ancak, uygulanmayan her kimlik bilgisi türü birkaç saniyelik zaman aşımı ekler ve bu da başlatmayı yavaşlatır. App Service her zaman yönetilen kimliğe sahip olduğundan, ManagedIdentityCredential yoklama zinciri olmadan hemen kimlik doğrulaması yapar. Gereksinimler dosyanıza yükleyin azure-identity : pip install azure-identity.
Dağıtım sırasında geçişleri çalıştırın
Geçişleri otomatik olarak çalıştırmak için dağıtım sonrası betiği veya başlangıç komutu ekleyin:
az webapp config set \
--resource-group <your-rg> \
--name <your-app> \
--startup-file "python manage.py migrate && gunicorn myproject.wsgi"
Statik dosyaları toplama
Üretim için statik dosya işlemeyi yapılandırın:
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
Dağıtımınızın bir parçası olarak collectstatic öğesini çalıştırın:
python manage.py collectstatic --noinput
App Service’e dağıtım yapın
App Service bir Django uygulamasını iki şekilde barındırabilir:
- Yerleşik Linux Python görüntüsü: App Service kodunuzu kaynaktan oluşturur ve Python çalışma zamanını sağlar.
- Özel Docker imajı: imajı kendiniz oluşturur ve bir kapsayıcı kayıt defterinden ona referans verirsiniz.
Her iki yol da sistem tarafından atanan yönetilen kimliği kullanarak Azure SQL kimlik doğrulaması yapabilir, ancak tarif farklıdır. Dağıtımınızla eşleşen sekmeyi seçin.
Yerleşik Linux Python imajıyla App Service'in Oryx oluşturucusu requirements.txt öğesini yükler ve Django uygulamanızı gunicorn altında otomatik olarak başlatır. Yerel yönetilen kimlik için HTTP vekil sunucusu, Authentication=ActiveDirectoryMsi öğesinin doğrudan ODBC bağlantı dizesinden çalışmasını sağlar.
Yönetilen kimlik kimlik doğrulamasını kullanma bölümünde gösterilen settings.py öğesini kullanın.
ile az webapp upkodunuzu dağıtın, sistem tarafından atanan yönetilen kimliği etkinleştirin ve veritabanı ortam değişkenlerini ayarlayın:
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
Ardından, Yönetilen kimlik doğrulamasını kullanma bölümünde açıklandığı gibi, SQL'de yönetilen kimliğe erişim izni verin.
Docker Compose ile yerel geliştirme
Yerel geliştirme ve test için Docker Compose'u kullanarak Django uygulamanızı SQL Server kapsayıcıyla birlikte çalıştırın:
# 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
SQL Server kapsayıcısı uygulama veritabanlarını otomatik olarak oluşturmaz. Kapsayıcıları başlattıktan sonra veritabanını oluşturun ve geçişleri çalıştırın:
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
SQL Server kapsayıcı görüntüsü için ACCEPT_EULA=Y ve güçlü bir SA parolası gerekir. Üretim ortamları için SQL Server kimlik bilgileri yerine yönetilen kimlikle Azure SQL Veritabanı kullanın. Bkz. Yönetilen kimlik doğrulamasını kullanma.