Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Z tego samouczka dowiesz się, jak wdrożyć aplikację internetową Python Django opartą na danych do usługi Azure App Service oraz jak użyć Service Connector do połączenia z innymi usługami Azure. Przykładowa aplikacja internetowa przechowuje informacje o restauracjach i recenzjach w bazie danych Azure Database for PostgreSQL oraz przechowuje zdjęcia w kontenerze Azure Storage.
Aby wykonać następujące zadania, należy użyć Azure CLI:
- Utwórz aplikację internetową Python Django i wdróż ją w Azure App Service.
- Utwórz Azure Database for PostgreSQL serwer elastyczny i bazę danych.
- Utwórz konto i kontener Azure Storage.
- Połącz aplikację internetową z bazą danych i kontenerem magazynu za pomocą narzędzia Service Connector i uwierzytelniania zarządzaną tożsamością.
- Interakcja z aplikacją internetową.
Uwaga / Notatka
Ten samouczek jest podobny do samouczka Deploy a Python Django web app with PostgreSQL in Azure usługi aplikacyjnej, ale korzysta z tożsamości zarządzanej bez hasła przypisanej przez system z kontrolą dostępu opartą na rolach Azure, aby uzyskać dostęp do innych zasobów Azure. W sekcji Tworzenie połączenia z usługą bez hasła w tym artykule pokazano, jak łącznik usługi upraszcza proces nawiązywania połączenia.
Aplikacja internetowa używa klasy DefaultAzureCredential klasy Python Azure Identity client library aby automatycznie wykrywać, kiedy istnieje tożsamość zarządzana i używa jej do uzyskiwania dostępu do innych zasobów.
Wymagania wstępne
Subskrypcja Azure z uprawnieniami do zapisu i przypisywania ról dla zasobów samouczka w regionie Azure, który obsługuje Łącznik Usługi i ma wystarczające wsparcie App Service i limitem przydziału.
Azure Cloud Shell aby uruchomić kroki samouczka lub jeśli wolisz uruchomić lokalnie:
Konfigurowanie środowiska
Zarejestruj dostawców zasobów
Microsoft.ServiceLinkeriMicrosoft.DBforPostgreSQLdla swojej subskrypcji.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLZainstaluj najnowszą wersję rozszerzenia Service Connector bez hasła. Parametr
--upgradeaktualizuje rozszerzenie, jeśli jest już zainstalowane:az extension add --name serviceconnector-passwordless --upgrade
Klonowanie przykładowej aplikacji
Important
Repozytorium przykładów tutorialu zostało zarchiwizowane 15 czerwca 2026 roku i nie jest już aktywnie utrzymywane. Używaj go tylko do ukończenia tego tutorialu.
Sklonuj przykładowe repozytorium aplikacji.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternatywnie możesz pobrać aplikację z repozytorium serviceconnector-webapp-postgresql-django-passwordless i rozpakować ją do folderu o nazwie serviceconnector-webapp-postgresql-django-passwordless.
Zmień katalogi w folderze repozytorium przy użyciu polecenia
cd serviceconnector-webapp-postgresql-django-passwordlessi uruchom wszystkie pozostałe polecenia z tego folderu.
W przykładowej aplikacji ustawienia produkcji aplikacji webowej znajdują się w pliku azureproject/production.py . Ustawienia deweloperskie są w Azureproject/settings.py. Ustawienia produkcyjne konfigurują platformę Django do uruchamiania w dowolnym środowisku produkcyjnym i nie są specyficzne dla usługi App Service.
Aplikacja używa ustawień produkcyjnych, gdy zmienna środowiskowa jest ustawiona WEBSITE_HOSTNAME . App Service ustawia tę zmienną na nazwę hosta aplikacji, na przykład .msdocs-django.azurewebsites.net
Aby uzyskać więcej informacji, zobacz listę kontrolną wdrażania Django. Zobacz również ustawienia Production dla platformy Django w Azure.
Definiowanie początkowych zmiennych środowiskowych
Poniższy kod definiuje niezbędne zmienne środowiskowe na potrzeby tego samouczka.
-
LOCATIONmusi być regionem Azure, w którym subskrypcja ma wystarczający limit, aby utworzyć zasoby, i nie ogranicza usługi Azure Database for PostgreSQL dla tej subskrypcji. - Hasło administratora PostgreSQL musi zawierać od 8 do 128 znaków z co najmniej trzech z tych kategorii: wielkie litery, małe litery, cyfry oraz znaki niealfanumeryczne. Nie używaj
$hasła do tego tutoriala.
Ustaw następujące zmienne środowiskowe, zastępując
<region>je wartością poprawną: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"Odczytaj hasło administratora PostgreSQL bez wyświetlania hasła lub dodawania go do historii powłoki:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoUtwórz grupę zasobów zawierającą wszystkie zasoby projektu. Nazwa grupy zasobów jest buforowana i automatycznie stosowana do kolejnych poleceń.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Wdrażanie kodu aplikacji w usłudze App Service
Stwórz hosta aplikacji w App Service, włącz automatyzację budowania i wdroż przykładowy kod aplikacji. Plan usługi App Service Basic (B1) używany w tym samouczku powoduje naliczanie opłat w ramach subskrypcji platformy Azure. Aktualne ceny można znaleźć w artykule Ceny App Service.
Plik requirements.txt zarchiwizowanej próbki nie deklaruje serwera Gunicorn używanego przez start.sh. Dodaj go do swojej lokalnej kopii, jeśli nie jest jeszcze dostępny:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtUtwórz plan usługi App Service dla systemu Linux w warstwie cenowej Basic (B1), a następnie utwórz aplikację internetową przy użyciu przykładowego polecenia startowego:
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"Włącz automatyzację budowania App Service, aby wdrożenie instalowało pakiety w requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueZ korzenia repozytorium stwórz plik ZIP przykładowej aplikacji i wdroż go, korzystając z 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.zipPolecenie wdrożenia kończy się sukcesem, gdy App Service zaakceptuje plik ZIP. Budowa trwa dalej w App Service i może zająć kilka minut.
Utwórz bazę danych PostgreSQL na platformie Azure
Stwórz Azure Database for PostgreSQL elastyczny serwer i bazę danych do przechowywania danych aplikacji.
Utwórz serwer 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 EnabledPolecenie kończy się powodzeniem, gdy stan aprowizacji elastycznego serwera PostgreSQL wynosi
Succeeded.Usuń hasło administratora z obecnej powłoki po utworzeniu serwera:
unset ADMIN_PWUtwórz bazę danych za pomocą polecenia 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
Tworzenie połączenia usługi bez hasła
Użyj polecenia az webapp connection create postgres-flexible, aby dodać łącznik usługi, który łączy aplikację internetową platformy Azure z bazą danych PostgreSQL przy użyciu uwierzytelniania bezhasłowego za pomocą tożsamości zarządzanej. Następujące polecenie konfiguruje Azure Database for PostgreSQL do używania tożsamości zarządzanej i Azure kontroli dostępu opartej na rolach. Dane wyjściowe polecenia zawierają listę akcji, które wykonuje łącznik usługi.
Polecenie tworzy ustawienie aplikacji o nazwie AZURE_POSTGRESQL_CONNECTIONSTRING zawierające informacje o połączeniu z bazą danych. Próbka odczytuje to ustawienie w azureproject/production.py. Aby uzyskać więcej informacji, zobacz Access environment variables (Uzyskiwanie dostępu do zmiennych środowiskowych).
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
Połączenie jest gotowe, gdy polecenie wyświetli informację o połączeniu z elastycznym serwerem PostgreSQL i utworzy ustawienie aplikacji AZURE_POSTGRESQL_CONNECTIONSTRING.
Połącz aplikację internetową Django z usługą Azure Storage za pomocą Service Connector
Utwórz konto Azure storage, a następnie użyj połączenia z aplikacją webową AZ i utworz storage-blob, aby połączyć je z aplikacją webową. Polecenie połączenia wykonuje następujące działania:
- Włącza tożsamość zarządzaną przypisaną przez system w aplikacji internetowej.
- Dodaje aplikację webową z rolą Storage Blob Data Contributor do konta magazynowego.
- Konfiguruje sieć konta magazynowania tak, aby akceptowała dostęp z aplikacji webowej.
- Tworzy zmienną środowiskową o nazwie
AZURE_STORAGEBLOB_RESOURCEENDPOINTdla konta Azure Storage.
Tworzenie konta Azure Storage
Utwórz konto magazynu ogólnego przeznaczenia w wersji 2 z magazynem lokalnie nadmiarowym:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Stwórz połączenie pamięci bez hasła
Stwórz połączenie bezhasłowe do konta magazynowego:
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
Połączenie jest gotowe, gdy komenda zgłasza połączenie z kontem pamięci i tworzy AZURE_STORAGEBLOB_RESOURCEENDPOINT ustawienia aplikacji.
Konfiguruj przykładowy pojemnik zdjęć
Zaktualizuj konto Azure Storage, aby umożliwić publiczny dostęp do blobów dla tej zarchiwizowanej przykładowej aplikacji.
Uwaga / Notatka
Ten zarchiwizowany przykład wykorzystuje bezpośrednie adresy URL do wyświetlania zdjęć, dzięki czemu samouczek umożliwia anonimowy dostęp do odczytu kontenera
photos. To ustawienie jest specyficzne dla próbki i nie jest wymagane przez Service Connector. W przypadku aplikacji produkcyjnych zachowaj prywatność kontenerów i stosuj kontrolowaną metodę dostarczania, taką jak uwierzytelniony punkt końcowy aplikacji.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access truePrzypisz użytkownikowi uprawnienia do utworzenia kontenera, korzystając z uwierzytelniania 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_IDUstawienie parametru
MSYS_NO_PATHCONVdla tego polecenia zapobiega konwertowaniu przez Git Bash w systemie Windows identyfikatora zasobu platformy Azure na ścieżkę systemu Windows. Nie ma to wpływu w Azure Cloud Shell ani innych środowiskach Bash. Przypisania ról mogą zacząć obowiązywać po kilku minutach.Użyj az storage container create do stworzenia kontenera o nazwie
photosi umożliwienia anonimowego dostępu do odczytu blobów w tym kontenerze: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_ENDPOINTKontener jest gotowy, gdy odpowiedź wyświetla
"created": truedla konteneraphotos.
Testowanie aplikacji internetowej Python w Azure
Otwórz i przetestuj aplikację internetową Azure Restaurant Review. Aplikacja używa pakietu azure.identity i jej DefaultAzureCredential klasy. Gdy aplikacja jest uruchomiona w Azure, DefaultAzureCredential automatycznie wykrywa, kiedy istnieje tożsamość zarządzana dla usługi App Service i używa jej do uzyskiwania dostępu do zasobów Azure Storage i Azure Database for PostgreSQL. Aplikacja nie musi dostarczać kluczy magazynu, certyfikatów ani poświadczeń w celu uzyskania dostępu do tych zasobów.
W przypadku instalacji lokalnej Azure CLI możesz użyć
az webapp browse, aby otworzyć aplikację w przeglądarce domyślnej:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell nie może otworzyć przeglądarki lokalnej, więc nie obsługuje polecenia
az webapp browse. W Cloud Shell wybierz link Default domain w prawym górnym rogu strony aplikacji w witrynie Azure Portal.
Uruchomienie aplikacji może potrwać minutę lub dwie. Jeśli zostanie wyświetlona domyślna strona aplikacji, która nie jest przykładową aplikacją, zaczekaj minutę i odśwież przeglądarkę.
Przetestuj funkcjonalność przykładowej aplikacji, dodając restaurację i kilka recenzji ze zdjęciami. Aplikacja powinna przypominać następujący zrzut ekranu:
Uprzątnij zasoby
Aby uniknąć bieżących opłat, możesz usunąć zasoby utworzone na potrzeby tego samouczka, usuwając grupę zasobów, która je zawiera. Przed uruchomieniem polecenia upewnij się, że nie potrzebujesz już aplikacji ani zasobów.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Polecenie wraca natychmiast, podczas gdy Azure usuwa zasoby.
Troubleshooting
Jeśli aplikacja nie uruchamia się ani nie łączy ze swoimi zasobami, sprawdź dzienniki wdrożenia usługi App Service, potwierdź, że ustawienia aplikacji AZURE_POSTGRESQL_CONNECTIONSTRING i AZURE_STORAGEBLOB_RESOURCEENDPOINT istnieją, i odczekaj kilka minut, aż przypisania ról platformy Azure zaczną obowiązywać. W przypadku problemów z uruchamianiem aplikacji Python zobacz następujący artykuł: