Uwaga
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.
W tym samouczku wdrożysz aplikację webową Python opartą na Django na platformie Azure App Service, korzystając z relacyjnej bazy danych Azure Database for PostgreSQL. Usługa Azure App Service obsługuje język Python w środowisku serwera Linux. Jeśli chcesz, zobacz zamiast tego samouczek platformy Flask lub samouczek FastAPI.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Utwórz domyślnie bezpieczną architekturę usługi App Service, PostgreSQL i pamięci podręcznej Redis.
- Zabezpiecz tajemnice połączenia przy użyciu tożsamości zarządzanej i odnośników Key Vault.
- Wdróż przykładową aplikację w języku Python w usłudze App Service z repozytorium GitHub.
- Uzyskaj dostęp do parametrów połączenia usługi App Service i ustawień aplikacji w kodzie aplikacji.
- Wprowadź aktualizacje i ponownie wdróż kod aplikacji.
- Wygeneruj schemat bazy danych, uruchamiając migracje baz danych.
- Strumieniowanie dzienników diagnostycznych z Azure.
- Zarządzanie aplikacją w witrynie Azure Portal.
- Aprowizuj tę samą architekturę i wdróż przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
- Zoptymalizuj przepływ pracy programowania za pomocą usług GitHub Codespaces i GitHub Copilot.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
- Konto usługi GitHub. Możesz również uzyskać jeden za darmo.
- Znajomość języka Python przy użyciu programowania Django.
- (Opcjonalnie) Aby wypróbować GitHub Copilot, wymagane jest konto GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
- Zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure. Możesz wykonać kroki opisane w usłudze Azure Cloud Shell, ponieważ ma już zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure.
- Znajomość języka Python przy użyciu programowania Django.
- (Opcjonalnie) Aby wypróbować GitHub Copilot, wymagane jest konto GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.
Przejdź do końca
Jeśli chcesz zobaczyć przykładową aplikację w tym samouczku uruchomionym na platformie Azure, uruchom następujące polecenia w usłudze Azure Cloud Shell i postępuj zgodnie z monitem:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
1. Uruchamianie przykładu
Najpierw należy skonfigurować przykładową aplikację opartą na danych jako punkt wyjścia. Dla wygody przykładowe repozytorium zawiera konfigurację kontenera deweloperskiego . Kontener deweloperski ma wszystko, czego potrzebujesz, aby opracować aplikację, w tym bazę danych, pamięć podręczną i wszystkie zmienne środowiskowe wymagane przez przykładową aplikację. Kontener deweloperski może działać w usłudze GitHub codespace, co oznacza, że można uruchomić przykład na dowolnym komputerze z przeglądarką internetową.
Uwaga
Jeśli korzystasz z tego samouczka z własną aplikacją, zapoznaj się z opisem pliku requirements.txt w README.md , aby zobaczyć, jakich pakietów potrzebujesz.
Krok 1. W nowym oknie przeglądarki:
- Zaloguj się na istniejącym koncie GitHub.
- Przejdź do https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Usuń zaznaczenie opcji Kopiuj tylko gałąź główną. Chcesz wszystkie gałęzie.
- Wybierz pozycję Utwórz fork.
Krok 2: W forku GitHub:
- Wybierz main>starter-no-infra dla gałęzi początkowej. Ta gałąź zawiera tylko przykładowy projekt i brak plików ani konfiguracji związanych z platformą Azure.
- Wybierz Code>Create codespace on starter-no-infra.
Konfiguracja przestrzeni kodu trwa kilka minut, a na końcu automatycznie uruchamia
pip install -r requirements.txt
dla twojego repozytorium. Ponadto podany plik env
Krok 3. W terminalu usługi Codespace:
- Uruchom migracje bazy danych za pomocą polecenia
python manage.py migrate
. - Uruchom aplikację za pomocą polecenia
python manage.py runserver
. - Po wyświetleniu powiadomienia
Your application running on port 8000 is available.
wybierz pozycję Otwórz w przeglądarce. Przykładowa aplikacja powinna być widoczna na nowej karcie przeglądarki. Aby zatrzymać aplikację, wpiszCtrl
+C
.
Napiwek
Możesz zapytać narzędzie GitHub Copilot o to repozytorium. Na przykład:
- @workspace Co robi ten projekt?
- @workspace Co robi folder .devcontainer?
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
2. Tworzenie usługi App Service, bazy danych i pamięci podręcznej
W tym kroku utworzysz zasoby platformy Azure. Kroki używane w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługę App Service, usługę Azure Database for PostgreSQL i usługę Azure Cache. W przypadku procesu tworzenia należy określić:
- Nazwa aplikacji internetowej. Jest ona używana jako część nazwy DNS dla aplikacji.
- Region do fizycznego uruchamiania aplikacji na świecie. Jest ona również używana jako część nazwy DNS aplikacji.
- Stos wykonawczy dla aplikacji. W tym miejscu wybierasz wersję języka Python, która ma być używana dla aplikacji.
- Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
- Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.
Zaloguj się do Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby usługi Azure App Service.
Krok 1. W witrynie Azure Portal:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
- Wybierz element oznaczony jako Web App + Database pod nagłówkiem Marketplace. Możesz również przejść bezpośrednio do kreatora tworzenia.
Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.
- Grupa zasobów: wybierz pozycję Utwórz nową i użyj nazwy msdocs-django-postgres-tutorial.
- Region: dowolny region świadczenia usługi Azure blisko Ciebie.
- Nazwa: msdocs-python-postgres-XYZ.
- Stos uruchomieniowy: Python 3.12.
- Baza danych: PostgreSQL – elastyczny serwer jest domyślnie wybrany jako silnik bazy danych. Nazwa serwera i nazwa bazy danych są również domyślnie ustawione na odpowiednie wartości.
- Dodaj usługę Azure Cache for Redis: tak.
- Plan hostingu: Podstawowy. Gdy wszystko będzie gotowe, możesz skalować w górę do warstwy cenowej produkcyjnej.
- Wybierz opcję Przejrzyj i utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 3. Ukończenie wdrożenia trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Jesteś przekierowany bezpośrednio do aplikacji usługi App Service, ale tworzone są następujące zasoby:
- Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
- Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Plan systemu Linux w warstwie Podstawowej jest utworzony.
- App Service: reprezentuje aplikację i działa w planie usługi App Service.
- Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
- Prywatny punkt końcowy: punkt dostępu do pamięci podręcznej Redis w sieci wirtualnej.
- Interfejsy sieciowe: reprezentuje prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
- Serwer elastyczny usługi Azure Database for PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
- Azure Cache for Redis: dostępna tylko zza sieci prywatnej.
- Prywatne strefy DNS: Umożliwiają rozpoznawanie nazw DNS serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.
3. Zabezpieczanie tajnych danych połączenia i dodawanie SECRET_KEY
Kreator tworzenia wygenerował zmienne łączności dla ciebie już jako ustawienia aplikacji. Jednak najlepszą praktyką w zakresie zabezpieczeń jest całkowite trzymanie tajemnic poza usługą App Service. Przeniesiesz swoje tajemnice do magazynu kluczy i zmienisz ustawienia aplikacji na odwołania do Key Vault za pomocą Service Connectors.
Krok 1. Pobieranie istniejącej parametry połączenia
- W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
- Wybierz AZURE_POSTGRESQL_CONNECTIONSTRING.
- W Dodaj/Edytuj ustawienie aplikacji, w polu Wartość znajdź część hasło= na końcu ciągu.
- Skopiuj ciąg hasła po haśle = do późniejszego użycia.
Te ustawienia aplikacji pozwalają połączyć się z bazą danych Postgres i pamięcią podręczną Redis, które są zabezpieczone za prywatnymi punktami końcowymi. Wpisy tajne są jednak zapisywane bezpośrednio w aplikacji usługi App Service, co nie jest najlepsze. Zmienisz to. Ponadto dodasz ustawienie
SECRET_KEY
, które jest wymagane przez twoją aplikację Django.
Krok 2: Utwórz magazyn kluczy do bezpiecznego zarządzania sekretami
- Na górnym pasku wyszukiwania wpisz "key vault", następnie wybierz Marketplace>Key Vault.
- W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
- W Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
- W obszarze Region ustaw tę samą lokalizację co grupa zasobów.
Krok 3. Zabezpiecz magazyn kluczy przy użyciu prywatnego punktu końcowego
- Wybierz kartę Sieć.
- Usuń zaznaczenie pozycji Włącz dostęp publiczny.
- Wybierz pozycję Utwórz prywatny punkt końcowy.
- W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
- W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
- W polu Nazwa wpisz msdocs-python-postgres-XYZVaultEndpoint.
- W sieci wirtualnej wybierz pozycję msdocs-python-postgres-XYZVnet.
- W Podsiecimsdocs-python-postgres-XYZSubnet.
- Wybierz przycisk OK.
- Wybierz pozycję Przeglądanie i tworzenie, a następnie wybierz pozycję Utwórz. Poczekaj na zakończenie wdrożenia usługi Key Vault. Powinien zostać wyświetlony komunikat "Wdrożenie zostało ukończone".
Krok 4. Konfigurowanie łącznika PostgreSQL
- Na górnym pasku wyszukiwania wpisz msdocs-python-postgres, a następnie wybierz zasób usługi App Service o nazwie msdocs-python-postgres-XYZ.
- Na stronie App Service, w menu po lewej stronie wybierz Ustawienia usługi > Łącznik. Istnieją już dwa łączniki utworzone przez kreator aplikacji.
- Zaznacz pole wyboru obok łącznika PostgreSQL, a następnie wybierz pozycję Edytuj.
- W polu Typ klienta wybierz pozycję Django. Typ klienta Django w łączniku usługi PostgreSQL dostarcza zmienne bazy danych w osobnych ustawieniach zamiast jednego ciągu połączenia. Oddzielne zmienne są łatwiejsze do użycia w ustawieniach bazy danych Django.
- Wybierz kartę Uwierzytelnianie.
- W polu Hasło wklej skopiowane wcześniej hasło.
- Wybierz pozycję Przechowaj wpis tajny w usłudze Key Vault.
- W obszarze Połączenie z usługą Key Vault wybierz pozycję Utwórz nową. Okno dialogowe Tworzenie połączenia jest otwierane w górnej części okna dialogowego edycji.
Krok 5. Ustanawianie połączenia usługi Key Vault
- W oknie dialogowym Tworzenie połączenia dla połączenia Key Vault, w Key Vault wybierz utworzony wcześniej magazyn kluczy.
- Wybierz Przejrzyj + Utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 6. Finalizowanie ustawień łącznika PostgreSQL
- Wrócisz do okna dialogowego edycji domyślnegoŁącznika. Na karcie Uwierzytelnianie poczekaj na utworzenie łącznika usługi Key Vault. Po zakończeniu pole wyboru Połączenie z Key Vault zostanie automatycznie zaznaczone.
- Wybierz pozycję Dalej: Sieć.
- Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .
Krok 7: Skonfiguruj łącznik usługi Redis do używania tajemnic z Key Vault
- Na stronie Łączniki usługi zaznacz pole wyboru obok łącznika Cache for Redis, a następnie wybierz pozycję Edytuj.
- Wybierz kartę Uwierzytelnianie.
- Wybierz pozycję Przechowaj wpis tajny w usłudze Key Vault.
- W obszarze Połączenie z usługą Key Vault wybierz utworzony magazyn kluczy.
- Wybierz pozycję Dalej: Sieć.
- Wybierz pozycję Konfiguruj reguły zapory, aby włączyć dostęp do usługi docelowej. Kreator tworzenia aplikacji zabezpieczył już bazę danych SQL przy użyciu prywatnego punktu końcowego.
- Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .
Krok 8. Weryfikowanie integracji z usługą Key Vault
- W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
-
Obok pozycji AZURE_POSTGRESQL_PASSWORD wybierz pozycję Pokaż wartość. Wartość powinna być
@Microsoft.KeyVault(...)
, co oznacza, że jest to odwołanie do magazynu kluczy, ponieważ tajemnica jest teraz zarządzana w magazynie kluczy. - Aby zweryfikować ciąg połączenia Redis, wybierz pozycję Pokaż wartość obok AZURE_REDIS_CONNECTIONSTRING.
Krok 9. Przykładowa aplikacja odczytuje zmienną środowiskową SECRET_KEY, aby ustawić wymagane ustawienie SECRET_KEY. Utworzysz je jako ustawienie aplikacji w tym kroku.
- Na karcie Ustawienia aplikacji wybierz pozycję Dodaj.
- Ustaw Nazwa na SECRET_KEY.
- Ustaw wartość na długi ciąg losowy.
- Kliknij przycisk Zastosuj, a następnie ponownie zastosuj , a następnie potwierdź.
Podsumowując, proces zabezpieczania tajnych informacji połączenia obejmował:
- Pobieranie tajnych informacji dotyczących połączenia ze zmiennych środowiskowych aplikacji App Service.
- Tworzenie repozytorium kluczy.
- Tworzenie połączenia usługi Key Vault z tożsamością zarządzaną przypisaną przez system.
- Aktualizowanie łączników usługi w celu przechowywania tajnych danych w skarbcu kluczy.
Uwaga
SECRET_KEY
W idealnym przypadku ustawienie aplikacji powinno być również skonfigurowane jako odwołanie do magazynu kluczy, co jest procesem wieloetapowym. Aby uzyskać więcej informacji, zobacz Jak mogę zmienić ustawienie aplikacji SECRET_KEY na odwołanie do usługi Key Vault?
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
4. Wdrażanie przykładowego kodu
W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w usłudze App Service, ale również doskonały sposób na zapewnienie ciągłej integracji w procesie wdrażania. Domyślnie każde git push
do twojego repozytorium GitHub uruchamia akcję kompilacji i wdrażania.
Krok 1. W menu po lewej stronie wybierz pozycję .
Krok 2. Na stronie Centrum wdrażania:
- W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
- Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
- W obszarze Organizacja wybierz swoje konto.
- W obszarze Repozytorium wybierz pozycję msdocs-django-postgresql-sample-app.
- W obszarze Gałąź wybierz pozycję starter-no-infra. Jest to ta sama gałąź, w której pracowaliśmy z przykładową aplikacją bez żadnych plików ani konfiguracji związanych z platformą Azure.
- W polu Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
- W górnym menu wybierz pozycję Zapisz.
App Service wprowadza plik przepływu pracy do wybranego repozytorium GitHub w katalogu
.github/workflows
. Domyślnie centrum wdrożeń tworzy tożsamość przypisywaną przez użytkownika dla przepływu pracy do uwierzytelniania przy użyciu Microsoft Entra (uwierzytelnianie OIDC). Aby uzyskać informacje o opcjach uwierzytelniania alternatywnego, zobacz Wdrażanie w usłudze App Service przy użyciu funkcji GitHub Actions.
Krok 3: Po powrocie do codespace'u GitHub Twojego przykładowego forka, uruchom git pull origin starter-no-infra
.
Spowoduje to ściągnięcie nowo zatwierdzonego pliku przepływu pracy do przestrzeni kodu.
Krok 4 (opcja 1: w usłudze GitHub Copilot):
- Rozpocznij nową sesję czatu, wybierając widok Czat, a następnie wybierając +.
- Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych i usługą Redis?". Copilot może wyjaśnić, jak ustawienia są skonfigurowane w usłudze azureproject/development.py i azureproject/production.py.
- Zadaj pytanie: "@workspace W trybie produkcyjnym moja aplikacja jest uruchomiona w aplikacji internetowej App Service, która używa Azure Service Connector do łączenia się z elastycznym serwerem PostgreSQL przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć? Copilot może zasugerować kod podobny do tego w opcji 2: bez użycia GitHub Copilot i nawet poinstruować Cię o dokonaniu zmian w pliku azureproject/production.py."
- Otwórz plik azureproject/production.py w eksploratorze i dodaj sugestię kodu.
- Zapytaj: "@workspace Moja aplikacja usługi App Service używa również łącznika usługi Azure Service do nawiązywania połączenia z usługą Cache for Redis przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć?*" Copilot może zasugerować kod podobny do tego w krokach Opcja 2: bez użycia GitHub Copilot poniżej i nawet zasugerować dokonanie zmiany w pliku azureproject/production.py.
- Dodaj sugestię kodu. Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. Może być konieczne zadawanie większej liczby pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.
Krok 4 (opcja 2: bez narzędzia GitHub Copilot):
- Otwórz plik azureproject/production.py w eksploratorze.
- Znajdź skomentowany kod (wiersze 29–48) i usuń komentarz.
Spowoduje to utworzenie połączeń PostgreSQL i Redis przy użyciu metod
AZURE_POSTGRESQL_USER
, ,AZURE_POSTGRESQL_PASSWORD
AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
iAZURE_REDIS_CONNECTIONSTRING
.
Krok 5:
- Wybierz rozszerzenie Kontrola źródła.
- W polu tekstowym wpisz komunikat zatwierdzenia, taki jak
Configure Azure database and cache connections
. Możesz też wybraći zezwolić usłudze GitHub Copilot na wygenerowanie komunikatu zatwierdzenia.
- Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
- Wybierz pozycję Synchronizuj zmiany 1, a następnie potwierdź przy użyciu przycisku OK.
Krok 6. Powrót do strony Centrum wdrażania w witrynie Azure Portal:
- Wybierz kartę Dzienniki , a następnie wybierz pozycję Odśwież , aby wyświetlić nowe uruchomienie wdrożenia.
- W logu przebiegu wdrożenia wybierz wpis Build/Deploy Logs z najnowszym znacznikiem czasu.
Krok 7. Zostaniesz przekierowany do swojego repozytorium GitHub i zobaczysz, że akcja GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Poczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Powodzenie. Trwa to około 5 minut.
Masz problemy? Zapoznaj się z przewodnikiem rozwiązywania problemów.
5. Generowanie schematu bazy danych
W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchamiania migracji baz danych Django jest sesja SSH z kontenerem systemu Linux w usłudze App Service.
Krok 1. Powrót na stronę usługi App Service w menu po lewej stronie
- Wybierz Narzędzia deweloperskie>SSH.
- Wybierz Przejdź.
Krok 2. W sesji SSH uruchom polecenie python manage.py migrate
. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.
Napiwek
W sesji SSH tylko zmiany w plikach w /home
mogą przetrwać ponowne uruchomienia aplikacji. Zmiany poza programem /home
nie są utrwalane. Sesja SSH jest przydatna do uruchamiania typowych python manage.py
poleceń, takich jak tworzenie użytkownika za pomocą polecenia python manage.py createsuperuser
. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą django django-admin i manage.py. Użyj konta administratora, aby uzyskać dostęp do /admin
części witryny sieci Web.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
6. Przejdź do aplikacji
Krok 1. Na stronie usługi App Service:
- W menu po lewej stronie wybierz pozycję Przegląd.
- Wybierz adres URL aplikacji.
Krok 2. Dodaj kilka restauracji do listy. Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.
7. Strumieniowanie dzienników diagnostycznych
Usługa aplikacyjna Azure przechwytuje wszystkie dzienniki konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja zawiera print()
polecenia, aby zademonstrować tę funkcję, jak pokazano poniżej.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Krok 1. Na stronie usługi App Service:
- Z menu po lewej stronie wybierz Monitorowanie>dzienniki usługi App Service.
- W obszarze Rejestrowanie aplikacji, wybierz File System.
- W górnym menu wybierz pozycję Zapisz.
Krok 2: W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.
Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.
8. Czyszczenie zasobów
Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.
Krok 1. Na pasku wyszukiwania w górnej części witryny Azure Portal:
- Wpisz nazwę grupy zasobów.
- Wybierz odpowiednią grupę zasobów.
Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.
Krok 3:
- Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
- Wybierz Usuń.
2. Tworzenie zasobów platformy Azure i wdrażanie przykładowej aplikacji
W tym kroku utworzysz zasoby platformy Azure i wdrożysz przykładową aplikację w celu App Service dla systemu Linux. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługę App Service, usługę Azure Database for PostgreSQL i usługę Azure Cache for Redis.
Kontener deweloperski ma już interfejs wiersza polecenia dla deweloperów platformy Azure (AZD).
W katalogu głównym repozytorium uruchom polecenie
azd init
.azd init --template python-app-service-postgresql-infra
Po wyświetleniu monitu podaj następujące odpowiedzi:
Pytanie Odpowiedź Bieżący katalog nie jest pusty. Czy chcesz zainicjować projekt tutaj w katalogu "<your-directory>"? Y Co chcesz zrobić z tymi plikami? Zachowaj istniejące pliki bez zmian Wprowadź nową nazwę środowiska Wpisz unikatową nazwę. Szablon AZD używa tej nazwy jako części nazwy DNS aplikacji internetowej na platformie Azure ( <app-name>-<hash>.azurewebsites.net
). Znaki alfanumeryczne i łączniki są dozwolone.Zaloguj się do
azd auth login
Azure, uruchamiając polecenie i postępując zgodnie z instrukcjami.azd auth login
Utwórz niezbędne zasoby platformy Azure za pomocą polecenia
azd provision
. Postępuj zgodnie z monitem, aby wybrać żądaną subskrypcję i lokalizację zasobów platformy Azure.azd provision
Wykonanie polecenia
azd provision
trwa około 15 minut (najwięcej czasu zajmuje pamięć podręczna Redis). Później zmodyfikujesz kod, aby pracować z usługą App Service i wdrożyć zmiany za pomocą poleceniaazd deploy
. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure.Ten szablon AZD zawiera pliki (azure.yaml i katalog infra ), które generują domyślną architekturę secure-by-default z następującymi zasobami platformy Azure:
- Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
- Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Plan systemu Linux w warstwie Podstawowej jest utworzony.
- App Service: reprezentuje aplikację i działa w planie usługi App Service.
- Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
- Prywatne punkty końcowe: punkty dostępowe dla magazynu kluczy oraz pamięci podręcznej Redis w sieci wirtualnej.
- Interfejsy sieciowe: reprezentuje prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
- Serwer elastyczny usługi Azure Database for PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
- Prywatna strefa DNS: Umożliwia rozwiązywanie nazw DNS serwera PostgreSQL w sieci wirtualnej.
- Obszar roboczy usługi Log Analytics: działa jako kontener docelowy aplikacji w celu wysłania dzienników, gdzie można również wykonywać zapytania dotyczące dzienników.
- Azure Cache for Redis: dostępna tylko ze swojego prywatnego punktu końcowego.
- Sejf kluczy: Dostępny tylko z prywatnego punktu końcowego. Służy do zarządzania tajnymi danymi dla aplikacji usługi App Service.
Po zakończeniu tworzenia zasobów i wdrażaniu kodu aplikacji po raz pierwszy wdrożona przykładowa aplikacja nie działa jeszcze, ponieważ musisz wprowadzić niewielkie zmiany, aby połączyć się z bazą danych na platformie Azure.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
3. Użyj łańcucha połączenia bazy danych
Szablon AZD, którego używasz, wygenerował zmienne łączności już jako ustawienia aplikacji i wyprowadza je do terminalu dla Twojej wygody. Ustawienia aplikacji są jednym ze sposobów na nieprzechowywanie tajnych danych połączeń w repozytorium kodu.
W danych wyjściowych AZD znajdź ustawienia
AZURE_POSTGRESQL_USER
, ,AZURE_POSTGRESQL_PASSWORD
AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
iAZURE_REDIS_CONNECTIONSTRING
. Aby zachować bezpieczeństwo wpisów tajnych, wyświetlane są tylko nazwy ustawień. Wyglądają one następująco w danych wyjściowych usługi AZD:App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
Dla wygody szablon AZD wyświetla bezpośredni link do strony ustawień aplikacji. Znajdź link i otwórz go na nowej karcie przeglądarki.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
4. Modyfikowanie przykładowego kodu i ponowne wdrażanie
W środowisku GitHub Codespace rozpocznij nową sesję czatu, wybierając widok Czat, a następnie + pozycję.
Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?" Copilot może dać wyjaśnienia dotyczące tego, jak ustawienia połączenia są skonfigurowane w plikach azureproject/development.py i azureproject/production.py.
Zadaj pytanie: "@workspace W trybie produkcyjnym moja aplikacja jest uruchomiona w aplikacji internetowej App Service, która używa Azure Service Connector do łączenia się z elastycznym serwerem PostgreSQL przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć? Copilot może zasugerować kod podobny do tego w opcji 2: bez użycia GitHub Copilot i nawet poinstruować Cię o dokonaniu zmian w pliku azureproject/production.py."
Otwórz plik azureproject/production.py w eksploratorze i dodaj sugestię kodu.
Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. Może być konieczne zadawanie większej liczby pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.
W terminalu uruchom polecenie
azd deploy
.azd deploy
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
5. Generowanie schematu bazy danych
W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchamiania migracji baz danych Django jest sesja SSH z kontenerem systemu Linux w usłudze App Service.
W danych wyjściowych usługi AZD znajdź adres URL sesji SSH i przejdź do niego w przeglądarce. Wygląda na to w danych wyjściowych:
Open SSH session to App Service container at: <URL>
W sesji SSH uruchom polecenie
python manage.py migrate
. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.Uwaga
Tylko zmiany w plikach w
/home
mogą być zachowane po ponownym uruchomieniu aplikacji. Zmiany poza programem/home
nie są utrwalane.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
6. Przejdź do aplikacji
W danych wyjściowych usługi AZD znajdź adres URL aplikacji i przejdź do niej w przeglądarce. Adres URL wygląda następująco w danych wyjściowych usługi AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Dodaj kilka restauracji do listy.
Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
7. Strumieniowanie dzienników diagnostycznych
Usługa Azure App Service może przechwytywać dzienniki konsoli, aby ułatwić diagnozowanie problemów z Twoją aplikacją. Dla wygody szablon AZD umożliwia już rejestrowanie w lokalnym systemie plików i wysyła dzienniki do obszaru roboczego usługi Log Analytics.
Przykładowa aplikacja zawiera print()
instrukcje, aby zademonstrować tę funkcjonalność, jak pokazano w następującym fragmencie kodu.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
W danych wyjściowych usługi AZD znajdź link do strumieniowego przesyłania dzienników usługi App Service i przejdź do niego w przeglądarce.
Stream App Service logs at: <URL>
Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
8. Czyszczenie zasobów
Aby usunąć wszystkie zasoby platformy Azure w bieżącym środowisku wdrażania, uruchom polecenie azd down
i postępuj zgodnie z monitami.
azd down
Rozwiązywanie problemów
Poniżej wymieniono problemy, które mogą wystąpić podczas próby wykonania czynności opisanych w tym samouczku i krokach, które należy rozwiązać.
Nie mogę nawiązać połączenia z sesją SSH
Jeśli nie możesz nawiązać połączenia z sesją SSH, uruchomienie samej aplikacji nie powiodło się.
Sprawdź dzienniki diagnostyczne, aby uzyskać szczegółowe informacje. Jeśli na przykład zostanie wyświetlony błąd KeyError: 'AZURE_POSTGRESQL_HOST'
podobny do , może to oznaczać, że brakuje zmiennej środowiskowej (być może usunięto ustawienie aplikacji).
Otrzymuję błąd podczas uruchamiania migracji bazy danych
Jeśli wystąpią jakiekolwiek błędy związane z nawiązywaniem połączenia z bazą danych, sprawdź, czy ustawienia aplikacji (AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
i AZURE_POSTGRESQL_NAME
) zostały zmienione lub usunięte. Bez tego parametry połączenia polecenie migracji nie może komunikować się z bazą danych.
Często zadawane pytania
- Ile kosztuje ta konfiguracja?
- Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?
- W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
- W jaki sposób przykład Django jest skonfigurowany do uruchamiania na Azure App Service?
- Jak mogę zmienić ustawienie aplikacji SECRET_KEY na odwołanie do usługi Key Vault?
- Jak debugować błędy podczas wdrażania za pomocą GitHub Actions?
- Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
- Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
- Ile kosztuje ta konfiguracja?
- Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?
- W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
- W jaki sposób przykład Django jest skonfigurowany do uruchamiania na Azure App Service?
- Jak debugować błędy podczas wdrażania za pomocą GitHub Actions?
- Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
- Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
Ile kosztuje ta konfiguracja?
Cennik utworzonych zasobów jest następujący:
- Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
- Serwer elastyczny PostgreSQL jest tworzony w najniższej klasie przeznaczonej do przeciążonych zasobów Standard_B1ms, z minimalnym rozmiarem przestrzeni dyskowej, którą można skalować w górę lub w dół. Zobacz Cennik usługi Azure Database for PostgreSQL.
- Sieć wirtualna nie powoduje naliczania opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak peering. Zobacz Cennik usługi Azure Virtual Network.
- Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.
Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?
- Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić
psql
z poziomu sesji SSH aplikacji. - Aby połączyć się z poziomu narzędzia komputerowego, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna platformy Azure połączona z jedną z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
- Usługę Azure Cloud Shell można również zintegrować z siecią wirtualną.
W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
Na przykład przy użyciu automatycznie wygenerowanego pliku przepływu pracy z usługi App Service każdy git push
rozpoczyna nowy przebieg kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub należy wprowadzić żądane aktualizacje i wypchnąć je do usługi GitHub. Na przykład:
git add .
git commit -m "<some-message>"
git push origin main
Jak skonfigurowany jest przykład Django do uruchamiania w usłudze Azure App Service?
Przykładowa aplikacja Django konfiguruje ustawienia w pliku azureproject/production.py, aby mogła działać w usłudze Azure App Service. Te zmiany są typowe dla wdrażania platformy Django w środowisku produkcyjnym, a nie specyficzne dla usługi App Service.
Django weryfikuje nagłówek HTTP_HOST w żądaniach przychodzących. Przykładowy kod używa zmiennej
WEBSITE_HOSTNAME
środowiskowej w usłudze App Service, aby dodać nazwę domeny aplikacji do ustawienia ALLOWED_HOSTS Django.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Platforma Django nie obsługuje obsługi plików statycznych w środowisku produkcyjnym. Na potrzeby tego samouczka użyjesz funkcji WhiteNoise , aby włączyć obsługę plików. Pakiet WhiteNoise został już zainstalowany przy użyciu pliku requirements.txt, a jego middleware zostało dodane do listy.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Następnie ustawienia pliku statycznego są konfigurowane zgodnie z dokumentacją platformy Django.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Aby uzyskać więcej informacji, zobacz Ustawienia produkcyjne aplikacji Django.
Jak mogę zmienić ustawienie aplikacji SECRET_KEY na odwołanie do usługi Key Vault?
W powyższych krokach portalu możesz zmienić SECRET_KEY
na odwołanie do Key Vault, uruchamiając następujące polecenia Azure CLI w usłudze Cloud Shell:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Możesz również wykonać to samo w portalu. Aby uzyskać więcej informacji, zobacz:
Jak debugować błędy podczas wdrażania za pomocą GitHub Actions?
Jeśli krok zakończy się niepowodzeniem w automatycznie wygenerowanym pliku przepływu pracy usługi GitHub, spróbuj zmodyfikować nieudane polecenie, aby wygenerować bardziej szczegółowe dane wyjściowe. Na przykład z polecenia python
możesz uzyskać więcej danych wyjściowych, dodając opcję -d
. Zatwierdź i prześlij zmiany, aby wyzwolić kolejne wdrożenie w usłudze App Service.
Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
Zobacz Konfigurowanie wdrożenia GitHub Actions z Centrum wdrażania.
Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
Być może zauważyłeś, że widok czatu GitHub Copilot był już dostępny, gdy tworzyłeś codespace. Dla Twojej wygody dołączamy rozszerzenie czatu Copilot w usłudze GitHub w definicji kontenera (zobacz .devcontainer/devcontainer.json). Potrzebujesz jednak konta GitHub Copilot (dostępna jest 30-dniowa bezpłatna wersja próbna).
Kilka wskazówek dotyczących rozmowy z usługą GitHub Copilot:
- Podczas jednej sesji czatu pytania i odpowiedzi wzajemnie się uzupełniają, a ty możesz modyfikować swoje pytania, aby doprecyzować uzyskaną odpowiedź.
- Domyślnie narzędzie GitHub Copilot nie ma dostępu do żadnego pliku w repozytorium. Aby zadać pytania dotyczące pliku, najpierw otwórz plik w edytorze.
- Aby umożliwić usłudze GitHub Copilot dostęp do wszystkich plików w repozytorium podczas przygotowywania odpowiedzi, zacznij od pytania
@workspace
. Aby uzyskać więcej informacji, zobacz Use the @workspace agent. - W sesji czatu narzędzie GitHub Copilot może proponować zmiany i wskazywać (z
@workspace
) nawet, gdzie należy je wprowadzić, ale nie może wprowadzać ich za ciebie. Wystarczy dodać sugerowane zmiany i przetestować je.
Następne kroki
Przejdź do następnego samouczka, aby dowiedzieć się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.
Dowiedz się, jak usługa App Service uruchamia aplikację w języku Python: