Udostępnij za pośrednictwem


Wdrażanie aplikacji internetowej Django w języku Python za pomocą bazy danych PostgreSQL na platformie Azure

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.

Diagram architektury przedstawiający usługę App Service z bazą danych PostgreSQL na platformie Azure.

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.
  • 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:

  1. Zaloguj się na istniejącym koncie GitHub.
  2. Przejdź do https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
  3. Usuń zaznaczenie opcji Kopiuj tylko gałąź główną. Chcesz wszystkie gałęzie.
  4. Wybierz pozycję Utwórz fork.

Krok 2: W forku GitHub:

  1. 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.
  2. 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:

  1. Uruchom migracje bazy danych za pomocą polecenia python manage.py migrate.
  2. Uruchom aplikację za pomocą polecenia python manage.py runserver.
  3. 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ę, wpisz Ctrl+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:

  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. 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.

  1. Grupa zasobów: wybierz pozycję Utwórz nową i użyj nazwy msdocs-django-postgres-tutorial.
  2. Region: dowolny region świadczenia usługi Azure blisko Ciebie.
  3. Nazwa: msdocs-python-postgres-XYZ.
  4. Stos uruchomieniowy: Python 3.12.
  5. 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.
  6. Dodaj usługę Azure Cache for Redis: tak.
  7. Plan hostingu: Podstawowy. Gdy wszystko będzie gotowe, możesz skalować w górę do warstwy cenowej produkcyjnej.
  8. Wybierz opcję Przejrzyj i utwórz.
  9. 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

  1. W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
  2. Wybierz AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. W Dodaj/Edytuj ustawienie aplikacji, w polu Wartość znajdź część hasło= na końcu ciągu.
  4. 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

  1. Na górnym pasku wyszukiwania wpisz "key vault", następnie wybierz Marketplace>Key Vault.
  2. W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
  3. W Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
  4. W obszarze Region ustaw tę samą lokalizację co grupa zasobów.

Krok 3. Zabezpiecz magazyn kluczy przy użyciu prywatnego punktu końcowego

  1. Wybierz kartę Sieć.
  2. Usuń zaznaczenie pozycji Włącz dostęp publiczny.
  3. Wybierz pozycję Utwórz prywatny punkt końcowy.
  4. W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
  5. W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
  6. W polu Nazwa wpisz msdocs-python-postgres-XYZVaultEndpoint.
  7. W sieci wirtualnej wybierz pozycję msdocs-python-postgres-XYZVnet.
  8. W Podsiecimsdocs-python-postgres-XYZSubnet.
  9. Wybierz przycisk OK.
  10. 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

  1. 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.
  2. Na stronie App Service, w menu po lewej stronie wybierz Ustawienia usługi > Łącznik. Istnieją już dwa łączniki utworzone przez kreator aplikacji.
  3. Zaznacz pole wyboru obok łącznika PostgreSQL, a następnie wybierz pozycję Edytuj.
  4. 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.
  5. Wybierz kartę Uwierzytelnianie.
  6. W polu Hasło wklej skopiowane wcześniej hasło.
  7. Wybierz pozycję Przechowaj wpis tajny w usłudze Key Vault.
  8. 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

  1. W oknie dialogowym Tworzenie połączenia dla połączenia Key Vault, w Key Vault wybierz utworzony wcześniej magazyn kluczy.
  2. Wybierz Przejrzyj + Utwórz.
  3. Po zakończeniu walidacji wybierz pozycję Utwórz.

Krok 6. Finalizowanie ustawień łącznika PostgreSQL

  1. 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.
  2. Wybierz pozycję Dalej: Sieć.
  3. 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

  1. Na stronie Łączniki usługi zaznacz pole wyboru obok łącznika Cache for Redis, a następnie wybierz pozycję Edytuj.
  2. Wybierz kartę Uwierzytelnianie.
  3. Wybierz pozycję Przechowaj wpis tajny w usłudze Key Vault.
  4. W obszarze Połączenie z usługą Key Vault wybierz utworzony magazyn kluczy.
  5. Wybierz pozycję Dalej: Sieć.
  6. 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.
  7. Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .

Krok 8. Weryfikowanie integracji z usługą Key Vault

  1. W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
  2. 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.
  3. 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.

  1. Na karcie Ustawienia aplikacji wybierz pozycję Dodaj.
  2. Ustaw Nazwa na SECRET_KEY.
  3. Ustaw wartość na długi ciąg losowy.
  4. 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:

  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
  3. W obszarze Organizacja wybierz swoje konto.
  4. W obszarze Repozytorium wybierz pozycję msdocs-django-postgresql-sample-app.
  5. 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.
  6. W polu Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
  7. 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):

  1. Rozpocznij nową sesję czatu, wybierając widok Czat, a następnie wybierając +.
  2. 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.
  3. 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."
  4. Otwórz plik azureproject/production.py w eksploratorze i dodaj sugestię kodu.
  5. 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.
  6. 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):

  1. Otwórz plik azureproject/production.py w eksploratorze.
  2. 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_PASSWORDAZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAMEi AZURE_REDIS_CONNECTIONSTRING.

Krok 5:

  1. Wybierz rozszerzenie Kontrola źródła.
  2. 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.
  3. Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
  4. 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:

  1. Wybierz kartę Dzienniki , a następnie wybierz pozycję Odśwież , aby wyświetlić nowe uruchomienie wdrożenia.
  2. 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

  1. Wybierz Narzędzia deweloperskie>SSH.
  2. 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:

  1. W menu po lewej stronie wybierz pozycję Przegląd.
  2. 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:

  1. Z menu po lewej stronie wybierz Monitorowanie>dzienniki usługi App Service.
  2. W obszarze Rejestrowanie aplikacji, wybierz File System.
  3. 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:

  1. Wpisz nazwę grupy zasobów.
  2. Wybierz odpowiednią grupę zasobów.

Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.

Krok 3:

  1. Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
  2. 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).

  1. W katalogu głównym repozytorium uruchom polecenie azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. 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.
  3. Zaloguj się do azd auth login Azure, uruchamiając polecenie i postępując zgodnie z instrukcjami.

    azd auth login
    
  4. 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ą polecenia azd 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.

  1. W danych wyjściowych AZD znajdź ustawienia AZURE_POSTGRESQL_USER, , AZURE_POSTGRESQL_PASSWORDAZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAMEi AZURE_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
     
  2. 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

  1. W środowisku GitHub Codespace rozpocznij nową sesję czatu, wybierając widok Czat, a następnie + pozycję.

  2. 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.

  3. 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."

  4. 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?.

  5. 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.

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

    Zrzut ekranu przedstawiający polecenia do uruchomienia w powłoce SSH i ich wyniki (Django).

    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

  1. 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>
     
  2. Dodaj kilka restauracji do listy.

    Zrzut ekranu aplikacji internetowej Django z bazą danych PostgreSQL działającą na platformie Azure przedstawiający restauracje i recenzje restauracji (Django).

    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_HOSTi 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?

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:

  1. Przypisanie roli zakresu usługi Key Vault
  2. Dodaj tajemnicę do Key Vault
  3. Pobierz tajemnicę z usługi Key Vault
  4. Konfigurowanie ustawień aplikacji

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: