Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Anleitung werden Sie eine datengesteuerte Python-Web-App (Django) auf Azure App Service mit Azure Database for PostgreSQL als relationalen Datenbankdienst bereitstellen. Azure App Service unterstützt Python in einer Linux-Serverumgebung. Wenn Sie möchten, lesen Sie stattdessen das Flask-Lernprogramm oder das FastAPI-Lernprogramm .
In diesem Tutorial lernen Sie Folgendes:
- Erstellen einer standardmäßig sicheren Architektur mit App Service, PostgreSQL und Redis Cache
- Schützen von Verbindungsgeheimnissen mit einer verwalteten Identität und Key Vault-Verweisen
- Bereitstellen einer Python-Beispiel-App in App Service aus einem GitHub-Repository
- Greifen Sie auf App Service-App-Verbindungszeichenfolgen und -App-Einstellungen im Anwendungscode zu.
- Vornehmen von Änderungen und erneutes Bereitstellen des Anwendungscodes
- Generieren eines Datenbankschemas durch Ausführen von Datenbankmigrationsvorgängen
- Streamen von Diagnoseprotokollen aus Azure
- Verwalten der App im Azure-Portal
- Bereitstellen derselben Architektur und Bereitstellen mithilfe der Azure Developer CLI
- Optimieren des Entwicklungsworkflows mit GitHub Codespaces und GitHub Copilot
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie nicht über ein Azure-Konto verfügen, können Sie ein konto kostenlos erstellen.
- Ein GitHub-Konto. Sie können auch kostenlos eins erhalten.
- Kenntnisse von Python mit Django-Entwicklung.
- (Optional) Um GitHub Copilot zu testen, ein GitHub Copilot-Konto. Es ist eine kostenlose 30-Tage-Testversion verfügbar.
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie nicht über ein Azure-Konto verfügen, können Sie ein konto kostenlos erstellen.
- Azure Developer CLI installiert. Sie können die Schritte mit der Azure Cloud Shell ausführen, da azure Developer CLI bereits installiert ist.
- Kenntnisse von Python mit Django-Entwicklung.
- (Optional) Um GitHub Copilot zu testen, ein GitHub Copilot-Konto. Es ist eine kostenlose 30-Tage-Testversion verfügbar.
Zum Ende springen
Wenn Sie nur die Beispiel-App in diesem Lernprogramm in Azure anzeigen möchten, führen Sie einfach die folgenden Befehle in der Azure Cloud Shell aus, und folgen Sie der Eingabeaufforderung:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
1. Ausführen des Beispiels
Zunächst richten Sie eine datengesteuerte Beispiel-App als Ausgangspunkt ein. Aus Gründen Der Einfachheit halber umfasst das Beispiel-Repository eine Dev-Containerkonfiguration . Der Entwicklercontainer verfügt über alles, was Sie zum Entwickeln einer Anwendung benötigen, einschließlich der Datenbank, des Caches und aller Umgebungsvariablen, die von der Beispielanwendung benötigt werden. Der Entwicklercontainer kann in einem GitHub-Codespace ausgeführt werden, was bedeutet, dass Sie das Beispiel auf jedem Computer mit einem Webbrowser ausführen können.
Hinweis
Wenn Sie diesem Lernprogramm mit Ihrer eigenen App folgen, schauen Sie sich die requirements.txt Dateibeschreibung in README.md an, um zu sehen, welche Pakete Sie benötigen.
Schritt 1: In einem neuen Browserfenster:
- Melden Sie sich bei Ihrem GitHub-Konto an.
- Navigiere zu https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Deaktivieren Sie die Option Nur Mainbranch kopieren. Sie benötigen alle Branches.
- Wählen Sie "Verzweigung erstellen" aus.
Schritt 2: In der GitHub-Fork:
- Wählen Sie main>starter-no-infra für den Starterzweig aus. Dieser Branch enthält nur das Beispielprojekt und keine Azure-bezogenen Dateien oder Konfigurationen.
- Wählen Sie Code>Codespace in starter-no-infra erstellen aus.
Das Einrichten des Codespace dauert einige Minuten, dabei wird am Ende
pip install -r requirements.txt
für Ihr Repository ausgeführt. Außerdem enthält die bereitgestellte env-Datei bereits eine Dummy-VariableSECRET_KEY
, die Django lokal ausführen muss.
Schritt 3: Im Codespace-Terminal:
- Führen Sie eine Datenbankmigration mit
python manage.py migrate
aus. - Führen Sie die App mit
python manage.py runserver
aus. - Wenn die Benachrichtigung
Your application running on port 8000 is available.
angezeigt wird, wählen Sie "Im Browser öffnen" aus. Die Beispielanwendung sollte auf einer neuen Browserregisterkarte angezeigt werden. Um die Anwendung zu beenden, geben SieCtrl
+C
ein.
Tipp
Sie können GitHub Copilot zu diesem Repository fragen. Zum Beispiel:
- @workspace Was macht dieses Projekt?
- @workspace Was geschieht im Ordner ".devcontainer"?
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
2. Erstellen der App Service-Instanz, der Datenbank und des Caches
In diesem Schritt erstellen Sie die Azure-Ressourcen. Mit den in diesem Tutorial ausgeführten Schritten werden einige standardmäßig sicherer Ressourcen erstellt, zu denen App Service, Azure Database for PostgreSQL und Azure Cache gehören. Für den Erstellungsprozess geben Sie Folgendes an:
- Der Name für die Web-App. Sie wird als Teil des DNS-Namens für Ihre App verwendet.
- Die Region für die physische Ausführung der App in der Welt. Sie wird auch als Teil des DNS-Namens für Ihre App verwendet.
- Der Laufzeitstapel für die App. Hier wählen Sie die Version von Python aus, die für Ihre App verwendet werden soll.
- Der Hostingplan für die App. Dies ist der Tarif, der die Features und Skalierungskapazität für Ihre App enthält.
- Die Ressourcengruppe für die App. Mit einer Ressourcengruppe können Sie (in einem logischen Container) alle für die Anwendung benötigten Azure-Ressourcen gruppieren.
Melden Sie sich beim Azure-Portal an, und führen Sie die folgenden Schritte aus, um Ihre Azure App Service-Ressourcen zu erstellen.
Schritt 1: Im Azure-Portal:
- Geben Sie auf der Suchleiste oben im Azure-Portal „Web App Datenbank“ ein.
- Wählen Sie das Element mit der Bezeichnung Web App + Datenbank unter der Marketplace-Überschrift aus. Sie können auch direkt zum Erstellungs-Assistenten navigieren.
Schritt 2: Füllen Sie auf der Seite "Web App + Datenbank erstellen " das Formular wie folgt aus.
- Ressourcengruppe: Wählen Sie "Neu erstellen" aus, und verwenden Sie den Namen "msdocs-django-postgres-tutorial".
- Region: Eine beliebige Azure-Region in Ihrer Nähe.
- Name:msdocs-python-postgres-XYZ.
- Laufzeitstapel: Python 3.12.
- Datenbank: PostgreSQL – Flexibler Server ist standardmäßig als Datenbankmodul ausgewählt. Der Servername und der Datenbankname sind ebenfalls standardmäßig auf geeignete Werte festgelegt.
- Azure Cache für Redis hinzufügen: Ja.
- Hostingplan: Einfach. Wenn Sie bereit sind, können Sie auf ein Produktionspreisniveau skalieren .
- Wählen Sie "Überprüfen" und "Erstellen" aus.
- Nachdem die Überprüfung abgeschlossen ist, wählen Sie "Erstellen" aus.
Schritt 3: Die Bereitstellung dauert ein paar Minuten. Nachdem die Bereitstellung abgeschlossen ist, wählen Sie die Schaltfläche " Zur Ressource wechseln " aus. Sie werden direkt zur App Service App weitergeleitet, aber die folgenden Ressourcen werden erstellt:
- Ressourcengruppe: Der Container für alle erstellten Ressourcen.
- App Service-Plan: Definiert die Computeressourcen für App Service. Es wird ein Linux-Plan auf der Stufe "Einfach " erstellt.
- App Service: Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
- Virtuelles Netzwerk: In die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
- Privater Endpunkt: Zugriffsendpunkt für den Redis-Cache im virtuellen Netzwerk.
- Netzwerkschnittstellen: Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
- Azure Database for PostgreSQL flexible Server: Zugriff nur über das virtuelle Netzwerk. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
- Azure Cache für Redis: Zugriff nur über das private Netzwerk.
- Private DNS-Zonen: Ermöglicht die DNS-Auflösung des Datenbankservers und des Redis-Caches im virtuellen Netzwerk.
3. Schützen von Verbindungsgeheimnissen und Hinzufügen von SECRET_KEY
Der Erstellungs-Assistent hat die Konnektivitätsvariablen für Sie bereits als App-Einstellungen generiert. Die bewährte Sicherheitsmethode besteht jedoch darin, Geheimnisse vollständig aus App Service herauszuhalten. Sie verschieben Ihre Geheimnisse in einen Schlüsseltresor und ändern Ihre App-Einstellung mithilfe von Dienstconnectors in Key Vault-Verweise.
Schritt 1: Abrufen der vorhandenen Verbindungszeichenfolge
- Wählen Sie im linken Menü der Seite "App Service" Einstellungen > Umgebungsvariablen aus.
- Wählen Sie AZURE_POSTGRESQL_CONNECTIONSTRING aus.
- Suchen Sie in der Anwendungseinstellung 'Hinzufügen/Bearbeiten' im Feld „Wert“ den Kennwort=-Abschnitt am Ende der Zeichenfolge.
- Kopieren Sie die Kennwortzeichenfolge nach kennwort= zur späteren Verwendung.
Mit diesen App-Einstellungen können Sie eine Verbindung mit der Postgres-Datenbank und Redis Cache herstellen, die hinter privaten Endpunkten geschützt sind. Geheimnisse werden jedoch direkt in der App Service-App gespeichert, was nicht optimal ist. Sie ändern dieses Verhalten. Darüber hinaus fügen Sie eine
SECRET_KEY
-Einstellung hinzu, die für Ihre Django-App erforderlich ist.
Schritt 2: Erstellen eines Schlüsseltresors für die sichere Verwaltung von Geheimnissen
- Geben Sie in der oberen Suchleiste "Key Vault" ein, und wählen Sie dann Marketplace>Key Vault aus.
- Wählen Sie in der Ressourcengruppe"msdocs-python-postgres-tutorial" aus.
- Geben Sie im Key Vault-Namen einen Namen ein, der nur aus Buchstaben und Zahlen besteht.
- Legen Sie ihn in "Region" auf denselben Speicherort wie die Ressourcengruppe fest.
Schritt 3: Schützen des Schlüsseltresors mit einem privaten Endpunkt
- Wählen Sie die Registerkarte "Netzwerk " aus.
- Deaktivieren Sie die Option "Öffentlichen Zugriff aktivieren".
- Wählen Sie "Privaten Endpunkt erstellen" aus.
- Wählen Sie in der Ressourcengruppe"msdocs-python-postgres-tutorial" aus.
- Wählen Sie im Dialogfeld Standort denselben Standort wie Ihre App Service-App aus.
- Geben Sie im Namen"msdocs-python-postgres-XYZVaultEndpoint" ein.
- Wählen Sie im virtuellen Netzwerk"msdocs-python-postgres-XYZVnet" aus.
- Wählen Sie unter Subnetz die Option msdocs-python-postgres-XYZSubnet aus.
- Wählen Sie "OK" aus.
- Wählen Sie "Überprüfen" und "Erstellen" und dann " Erstellen" aus. Warten Sie, bis die Bereitstellung des Schlüsseltresors abgeschlossen ist. Die Meldung „Ihre Bereitstellung wurde abgeschlossen.“ sollte angezeigt werden.
Schritt 4: Konfigurieren des PostgreSQL-Connectors
- Geben Sie in der oberen Suchleiste msdocs-python-postgres ein, und wählen Sie dann die App Service-Ressource namens "msdocs-python-postgres-XYZ" aus.
- Wählen Sie auf der Seite "App Service" im linken Menü Einstellungen Service Connector> aus. Es gibt bereits zwei Connectors, die der App-Erstellungs-Assistent für Sie erstellt hat.
- Aktivieren Sie das Kontrollkästchen neben dem PostgreSQL-Connector, und wählen Sie dann "Bearbeiten" aus.
- Wählen Sie im ClienttypDjango aus. Der Django-Client-Typ im PostgreSQL-Dienstconnector stellt Ihnen Datenbankvariablen in separaten Einstellungen zur Verfügung, anstatt einer einzigen Verbindungszeichenfolge. Die separaten Variablen sind einfacher für Sie in den Datenbankeinstellungen von Django zu verwenden.
- Wählen Sie die Registerkarte "Authentifizierung " aus.
- Fügen Sie im Kennwort das Kennwort ein, das Sie zuvor kopiert haben.
- Wählen Sie Geheimnis im Schlüsseltresor speichern aus.
- Wählen Sie unter "Key Vault-Verbindung" die Option "Neu erstellen" aus. Über dem Bearbeitungsdialogfeld wird ein Dialogfeld "Verbindung erstellen " geöffnet.
Schritt 5: Einrichten der Key Vault-Verbindung
- Wählen Sie im Dialogfeld "Verbindung erstellen" für die Key Vault-Verbindung den zuvor erstellten Key Vault aus.
- Wählen Sie "Überprüfen" und "Erstellen" aus.
- Wenn die Überprüfung abgeschlossen ist, wählen Sie "Erstellen" aus.
Schritt 6: Abschließen der Einstellungen für den PostgreSQL-Connector
- Sie befinden sich wieder im Bearbeitungsdialogfeld für defaultConnector. Warten Sie auf der Registerkarte Authentifizierung, bis der Schlüsseltresorconnector erstellt wurde. Nach Abschluss des Vorgangs wird er automatisch in der Dropdownliste Key Vault-Verbindung ausgewählt.
- Wählen Sie "Weiter" aus: Netzwerk.
- Wählen Sie "Speichern" aus. Warten Sie, bis die Aktualisierung erfolgreich angezeigt wird.
Schritt 7: Den Redis-Connector zur Verwendung von Key Vault-Geheimnissen konfigurieren
- Aktivieren Sie auf der Seite "Service-Connectoren" das Kontrollkästchen neben dem Redis-Cache-Connector, und wählen Sie dann Bearbeiten aus.
- Wählen Sie die Registerkarte "Authentifizierung " aus.
- Wählen Sie Geheimnis im Schlüsseltresor speichern aus.
- Wählen Sie unter Key Vault-Verbindung den von Ihnen erstellten Schlüsseltresor aus.
- Wählen Sie "Weiter" aus: Netzwerk.
- Wählen Sie "Firewallregeln konfigurieren" aus, um den Zugriff auf den Zieldienst zu ermöglichen. Der App-Erstellungs-Assistent hat die SQL-Datenbank bereits mit einem privaten Endpunkt geschützt.
- Wählen Sie "Speichern" aus. Warten Sie, bis die Aktualisierung erfolgreich angezeigt wird.
Schritt 8: Überprüfen der Key Vault-Integration
- Wählen Sie im linken Menü erneut Einstellungen > Umgebungsvariablen aus.
- Wählen Sie neben AZURE_POSTGRESQL_PASSWORD die Option "Wert anzeigen" aus. Der Wert sollte
@Microsoft.KeyVault(...)
sein, was bedeutet, dass es sich um einen Schlüsseltresorverweis handelt, da der geheime Schlüssel jetzt im Schlüsseltresor verwaltet wird. - Um die Redis-Verbindungszeichenfolge zu überprüfen, wählen Sie neben AZURE_REDIS_CONNECTIONSTRING"Wert anzeigen" aus.
Schritt 9: Die Beispielanwendung liest die SECRET_KEY Umgebungsvariable, um die erforderliche SECRET_KEY Einstellung festzulegen. Sie erstellen sie in diesem Schritt als App-Einstellung.
- Wählen Sie auf der Registerkarte "App-Einstellungen" die Option "Hinzufügen" aus.
- Legen Sie den Namen auf SECRET_KEY fest.
- Legen Sie Wert auf eine lange zufällige Zeichenfolge fest.
- Wählen Sie Übernehmen, anschließend erneut Übernehmen und dann Bestätigen aus.
Folgende Schritte sind zum Schützen Ihrer Verbindungsgeheimnisse erforderlich:
- Abrufen der Verbindungsgeheimnisse aus den Umgebungsvariablen der App Service-App
- Erstellen eines Schlüsseltresors
- Erstellen einer Key Vault-Verbindung mit der systemseitig zugewiesenen verwalteten Identität
- Aktualisieren der Dienstconnectors zum Speichern der Geheimnisse in Key Vault
Hinweis
Im Idealfall sollte die App-Einstellung SECRET_KEY
auch als Key Vault-Verweis konfiguriert werden. Dieser Prozess umfasst mehrere Schritte. Weitere Informationen finden Sie unter Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
4. Bereitstellen von Beispielcode
In diesem Schritt konfigurieren Sie die GitHub-Bereitstellung mithilfe von GitHub Actions. Es ist nur eine der vielen Möglichkeiten, um App Service bereitzustellen, aber auch eine hervorragende Möglichkeit, eine kontinuierliche Integration in Ihren Bereitstellungsprozess zu haben. Standardmäßig startet jede git push
in Ihrem GitHub-Repository die Build- und Bereitstellungsaktion.
Schritt 1: Wählen Sie im linken Menü Bereitstellung>Bereitstellungscenter aus.
Schritt 2: Auf der Seite "Bereitstellungscenter":
- Wählen Sie in "Quelle" GitHub aus. Standardmäßig ist GitHub-Aktionen als Buildanbieter ausgewählt.
- Melden Sie sich bei Ihrem GitHub-Konto an und folgen Sie der Aufforderung, Azure zu autorisieren.
- Wählen Sie in "Organisation" Ihr Konto aus.
- Wählen Sie im Repository"msdocs-django-postgresql-sample-app" aus.
- Wählen Sie unter Branch den Eintrag starter-no-infra aus. Dies ist der gleiche Branch, in dem Sie mit Ihrer Beispiel-App gearbeitet haben, ohne Azure-bezogene Dateien oder Konfigurationen.
- Wählen Sie für den Authentifizierungstyp die vom Benutzer zugewiesene Identität aus.
- Wählen Sie im oberen Menü " Speichern" aus.
App Service committet eine Workflowdatei in das ausgewählte GitHub-Repository im
.github/workflows
-Verzeichnis. Standardmäßig erstellt das Bereitstellungscenter eine vom Benutzer zugewiesene Identität für den Workflow zur Authentifizierung mithilfe von Microsoft Entra (OIDC-Authentifizierung). Alternative Authentifizierungsoptionen finden Sie unter Deploy to App Service using GitHub Actions.
Schritt 3: Im GitHub-Codespace Ihrer Beispiel-Fork führen Sie git pull origin starter-no-infra
aus.
Dadurch wird die neu committete Workflowdatei in Ihren Codespace übertragen.
Schritt 4 (Option 1: mit GitHub Copilot):
- Starten Sie eine neue Chatsitzung, indem Sie zunächst die Chatansicht und dann + auswählen.
- Frage: "@workspace Wie stellt die App eine Verbindung mit der Datenbank und Redis her?" Copilot gibt Ihnen möglicherweise einige Erläuterungen darüber, wie die Einstellungen in azureproject/development.py und azureproject/production.py konfiguriert sind.
- Fragen Sie " @workspace Im Produktionsmodus wird meine App in einer App Service Web App ausgeführt, die Azure Service Connector verwendet, um eine Verbindung mit einem flexiblen PostgreSQL-Server mithilfe des Django-Clienttyps herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?" Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich wie in der Option 2: ohne die nachstehenden Schritte von GitHub Copilot und teilen Sie Ihnen sogar mit, die Änderung in der Datei "azureproject/production.py " vorzunehmen.
- Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag hinzu.
- Fragen Sie „*@workspace Meine App Service-App verwendet auch den Azure-Dienstconnector, um eine Verbindung mit Cache for Redis mithilfe des Clienttyps Django herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?*" Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich wie in der Option 2: ohne GitHub Copilot schritte unten und teilen Sie ihnen sogar mit, die Änderung in der Datei azureproject/production.py vorzunehmen.
- Fügen Sie den Codevorschlag ein. GitHub Copilot gibt Ihnen nicht jedes Mal die gleiche Antwort, und sie ist nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace tun?.
Schritt 4 (Option 2: ohne GitHub Copilot):
- Öffnen Sie azureproject/production.py im Explorer.
- Suchen Sie den auskommentierten Code (Zeilen 29–48), und heben Sie die Auskommentierung auf.
Dadurch werden PostgreSQL- und Redis-Verbindungen mithilfe von
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
undAZURE_REDIS_CONNECTIONSTRING
erstellt.
Schritt 5:
- Wählen Sie die Quellcodeverwaltungserweiterung aus.
- Geben Sie im Textfeld eine Commitnachricht ein, z. B.
Configure Azure database and cache connections
. Oder wählen Sieaus, und lassen Sie GitHub Copilot eine Commit-Nachricht für Sie generieren.
- Wählen Sie Commit und bestätigen Sie dann mit Ja.
- Wählen Sie Änderungen synchronisieren 1 aus, und bestätigen Sie dann mit OK.
Schritt 6: Zurück auf der Seite "Deployment Center" im Azure-Portal:
- Wählen Sie die Registerkarte Protokolle und dann Aktualisieren aus, um die neue Bereitstellung anzuzeigen.
- Wählen Sie im Protokollelement für die Bereitstellungsausführung den Eintrag "Build/Deploy Logs " mit dem neuesten Zeitstempel aus.
Schritt 7: Sie werden zu Ihrem GitHub-Repository weitergeleitet und sehen, dass die GitHub-Aktion ausgeführt wird. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen. Warten Sie, bis die GitHub-Ausführung einen Erfolgsstatus anzeigt. Dies dauert ca. 5 Minuten.
Treten Probleme auf? Überprüfen Sie das Handbuch zur Problembehandlung.
5. Generieren des Datenbankschemas
Mit der Vom virtuellen Netzwerk geschützten PostgreSQL-Datenbank befindet sich die einfachste Möglichkeit zum Ausführen von Django-Datenbankmigrationen in einer SSH-Sitzung mit dem Linux-Container in App Service.
Schritt 1: Zurück auf der Seite "App Service" im linken Menü
- Wählen Sie "Entwicklungstools>SSH" aus.
- Wählen Sie Start.
Schritt 2: Führen Sie in der SSH-Sitzung aus python manage.py migrate
. Wenn dies erfolgreich ist, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit.
Tipp
In der SSH-Sitzung können nur Änderungen an Dateien in /home
über den Neustart der App hinaus bestehen bleiben. Änderungen außerhalb von /home
bleiben nicht erhalten. Die SSH-Sitzung ist nützlich für die Ausführung allgemeiner python manage.py
-Befehle, z. B. für die Benutzererstellung mit python manage.py createsuperuser
. Weitere Informationen finden Sie in der Dokumentation für django django-admin und manage.py. Verwenden Sie das Superuser-Konto, um auf den /admin
-Teil der Website zuzugreifen.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
6. Navigieren zur App
Schritt 1: Auf der Seite "App Service":
- Wählen Sie im linken Menü die Option "Übersicht" aus.
- Wählen Sie die URL Ihrer App aus.
Schritt 2: Fügen Sie der Liste einige Restaurants hinzu. Glückwunsch! Sie führen eine Web-App in Azure App Service aus, mit sicherer Konnektivität zu Azure Database for PostgreSQL.
7. Streamen von Diagnoseprotokollen
Azure App Service erfasst alle Konsolenprotokolle, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Die Beispiel-App enthält print()
-Anweisungen, um diese Funktion wie nachfolgend gezeigt zu veranschaulichen:
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)
Schritt 1: Auf der Seite "App Service":
- Wählen Sie im linken Menü Überwachung>App-Dienst-Protokolle aus.
- Wählen Sie unter Anwendungsprotokollierungdie Option "Dateisystem" aus.
- Wählen Sie im oberen Menü " Speichern" aus.
Schritt 2: Wählen Sie im linken Menü " Protokolldatenstrom" aus. Sie sehen die Protokolle für Ihre App, einschließlich Plattformprotokolle und Protokolle innerhalb des Containers.
Erfahren Sie mehr über die Protokollierung in Python-Apps in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.
8. Bereinigen von Ressourcen
Wenn Sie fertig sind, können Sie alle Ressourcen aus Ihrem Azure-Abonnement löschen, indem Sie die Ressourcengruppe löschen.
Schritt 1: In der Suchleiste oben im Azure-Portal:
- Geben Sie den Ressourcengruppennamen ein.
- Wählen Sie die Ressourcengruppe aus.
Schritt 2: Wählen Sie auf der Seite "Ressourcengruppe" die Option " Ressourcengruppe löschen" aus.
Schritt 3:
- Geben Sie den Namen der Ressourcengruppe ein, um Ihre Löschung zu bestätigen.
- Wählen Sie "Löschen" aus.
2. Erstellen von Azure-Ressourcen und Bereitstellen einer Beispiel-App
In diesem Schritt erstellen Sie die Azure-Ressourcen und stellen eine Beispiel-App für App Service für Linux bereit. Mit den in diesem Tutorial ausgeführten Schritten werden einige standardmäßig sicherer Ressourcen erstellt, zu denen App Service, Azure Database for PostgreSQL und Azure Cache for Redis gehören.
Der Entwicklercontainer verfügt bereits über die Azure Developer CLI (AZD).
Führen Sie im Repositorystamm
azd init
aus.azd init --template python-app-service-postgresql-infra
Wenn Sie dazu aufgefordert werden, geben Sie die folgenden Antworten:
Frage Antwort Das aktuelle Verzeichnis ist nicht leer. Möchten Sie ein Projekt hier in <Ihr Verzeichnis> initialisieren? Y Was möchten Sie mit diesen Dateien tun? Meine vorhandenen Dateien unverändert lassen Geben Sie einen neuen Umgebungsnamen ein. Geben Sie einen eindeutigen Namen ein. Die AZD-Vorlage verwendet diesen Namen als Teil des DNS-Namens Ihrer Web-App in Azure ( <app-name>-<hash>.azurewebsites.net
). Alphanumerische Zeichen und Bindestriche sind zulässig.Melden Sie sich mithilfe des Befehls
azd auth login
bei Azure an, und folgen Sie der Eingabeaufforderung:azd auth login
Erstellen Sie die erforderlichen Azure-Ressourcen mit dem Befehl
azd provision
. Folgen Sie der Eingabeaufforderung, um das gewünschte Abonnement und den gewünschten Standort für die Azure-Ressourcen auszuwählen.azd provision
Die Ausführung des Befehls
azd provision
ist etwa 15 Minuten.(Der Großteil der Zeit fällt für den Redis-Cache an.) Später ändern Sie Ihren Code so, dass er mit App Service funktioniert, und wenden die Änderungen mitazd deploy
an. Während der Ausführung stellt der Befehl Nachrichten zum Bestimmungs- und Bereitstellungsprozess bereit, einschließlich eines Links zur Bereitstellung in Azure.Diese AZD-Vorlage enthält Dateien (azure.yaml und das Infrastrukturverzeichnis ), die eine sichere standardmäßige Architektur mit den folgenden Azure-Ressourcen generieren:
- Ressourcengruppe: Der Container für alle erstellten Ressourcen.
- App Service-Plan: Definiert die Computeressourcen für App Service. Es wird ein Linux-Plan auf der Stufe "Einfach " erstellt.
- App Service: Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
- Virtuelles Netzwerk: In die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
- Private Endpunkte: Greifen Sie auf Endpunkte für den Schlüsseltresor und den Redis-Cache im virtuellen Netzwerk zu.
- Netzwerkschnittstellen: Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
- Azure Database for PostgreSQL flexible Server: Zugriff nur über das virtuelle Netzwerk. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
- Private DNS-Zone: Aktiviert die DNS-Auflösung des PostgreSQL-Servers im virtuellen Netzwerk.
- Log Analytics-Arbeitsbereich: Dient als Zielcontainer für Ihre App, um die Protokolle zu versenden, wo Sie auch die Protokolle abfragen können.
- Azure Cache für Redis: Zugriff nur von hinter seinem privaten Endpunkt.
- Schlüsseltresor: Nur von hinter seinem privaten Endpunkt aus zugänglich. Wird verwendet, um Geheimnisse für die App Service-App zu verwalten.
Wenn der Befehl die Ressourcenerstellung abgeschlossen und den Anwendungscode zum ersten Mal bereitgestellt hat, funktioniert die bereitgestellte Beispiel-App noch nicht, da Sie kleine Änderungen vornehmen müssen, um eine Verbindung mit der Datenbank in Azure herzustellen.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
3. Verwenden der Datenbank-Verbindungszeichenfolge
Die AZD-Vorlage, die Sie verwenden, generierte Konnektivitätsvariablen für Sie bereits als App-Einstellungen und gibt sie für Ihre Bequemlichkeit an das Terminal aus. App-Einstellungen sind eine Möglichkeit, um Verbindungsgeheimnisse aus Ihrem Coderepository herauszuhalten.
Suchen Sie in der AZD-Ausgabe die Einstellungen
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
undAZURE_REDIS_CONNECTIONSTRING
. Um Geheimnisse zu schützen, werden nur die Einstellungsnamen angezeigt. Sie sehen in der AZD-Ausgabe wie folgt aus: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
Der Einfachheit halber enthält die AZD-Vorlage den direkten Link zur Seite „App-Einstellungen“ der App. Suchen Sie den Link, und öffnen Sie ihn auf einer neuen Browserregisterkarte.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
4. Ändern des Beispielcodes und erneutes Bereitstellen
Starten Sie im GitHub-Codespace eine neue Chatsitzung, indem Sie die Chatansicht und dann die Option "Chat" auswählen +.
Fragen Sie " @workspace Wie stellt die App eine Verbindung mit der Datenbank her?" Copilot gibt Ihnen möglicherweise einige Erläuterungen darüber, wie die Verbindungseinstellungen in azureproject/development.py und azureproject/production.py konfiguriert sind.
Fragen Sie " @workspace Im Produktionsmodus wird meine App in einer App Service Web App ausgeführt, die Azure Service Connector verwendet, um eine Verbindung mit einem flexiblen PostgreSQL-Server mithilfe des Django-Clienttyps herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?" Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich wie in der Option 2: ohne die nachstehenden Schritte von GitHub Copilot und teilen Sie Ihnen sogar mit, die Änderung in der Datei "azureproject/production.py " vorzunehmen.
Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag hinzu.
GitHub Copilot gibt Ihnen nicht jedes Mal die gleiche Antwort, und sie ist nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace tun?.
Führen Sie im Terminal
azd deploy
aus.azd deploy
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
5. Generieren des Datenbankschemas
Bei einer durch ein virtuelles Netzwerk geschützten PostgreSQL-Datenbank können Sie Django-Datenbankmigrationsvorgänge am einfachsten in einer SSH-Sitzung mit dem Linux-Container in App Service ausführen.
Suchen Sie in der AZD-Ausgabe die URL für die SSH-Sitzung, und navigieren Sie im Browser dorthin. Die Ausgabe sieht wie folgt aus:
Open SSH session to App Service container at: <URL>
Führen Sie in der SSH-Sitzung
python manage.py migrate
aus. Wenn dies erfolgreich ist, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit.Hinweis
Nur Änderungen an Dateien in
/home
können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von/home
bleiben nicht erhalten.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
6. Navigieren zur App
Suchen Sie in der AZD-Ausgabe die URL für Ihre App, und navigieren Sie im Browser dorthin. Die URL sieht in der AZD-Ausgabe wie folgt aus:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Fügen Sie ein paar Restaurants zu der Liste hinzu.
Glückwunsch! Sie führen eine Web-App in Azure App Service aus, mit sicherer Konnektivität zu Azure Database for PostgreSQL.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
7. Streamen von Diagnoseprotokollen
Azure App Service kann Konsolenprotokolle erfassen, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Aus Gründen der Einfachheit ermöglicht die AZD-Vorlage bereits die Protokollierung im lokalen Dateisystem und übermittelt die Protokolle an einen Log Analytics-Arbeitsbereich.
Die Beispielanwendung enthält print()
-Anweisungen, um diese Funktion wie im folgenden Codeschnipsel gezeigt zu veranschaulichen.
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)
Suchen Sie in der AZD-Ausgabe den Link zum Streamen von App Service-Protokollen, und navigieren Sie im Browser dorthin.
Stream App Service logs at: <URL>
Erfahren Sie mehr über die Protokollierung in Python-Apps in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
8. Bereinigen von Ressourcen
Führen Sie azd down
aus, und folgen Sie den Eingabeaufforderungen, um alle Azure-Ressourcen in der aktuellen Bereitstellungsumgebung zu löschen.
azd down
Problembehandlung
Im Folgenden sind Probleme, die beim Ausführen dieses Tutorials auftreten können, und die Schritte zu ihrer Behebung aufgeführt.
Ich kann keine Verbindung mit der SSH-Sitzung herstellen
Können Sie keine Verbindung mit der SSH-Sitzung herstellen, konnte die App selbst nicht gestartet werden. Details finden Sie in den Diagnoseprotokollen . Wenn beispielsweise ein Fehler wie KeyError: 'AZURE_POSTGRESQL_HOST'
angezeigt wird, kann dies bedeuten, dass die Umgebungsvariable fehlt (möglicherweise haben Sie die App-Einstellung entfernt).
Ich erhalten einen Fehler beim Ausführen von Datenbankmigrationen
Wenn Fehler im Zusammenhang mit dem Herstellen einer Verbindung mit der Datenbank auftreten, überprüfen Sie, ob die App-Einstellungen (AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
und AZURE_POSTGRESQL_NAME
) geändert oder gelöscht wurden. Ohne diese Verbindungszeichenfolge kann der Migrationsbefehl (migrate) nicht mit der Datenbank kommunizieren.
Häufig gestellte Fragen
- Wie viel kostet diese Einrichtung?
- Wie kann ich eine Verbindung mit dem PostgreSQL-Server herstellen, der mit anderen Tools hinter dem virtuellen Netzwerk gesichert ist?
- Wie funktioniert die lokale App-Entwicklung mit GitHub-Aktionen?
- Wie ist das Django-Beispiel für die Ausführung auf Azure App Service konfiguriert?
- Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
- Wie debuge ich Fehler während der GitHub Actions-Bereitstellung?
- Ich habe keine Berechtigungen zum Erstellen einer vom Benutzer zugewiesenen Identität
- Was kann ich mit GitHub Copilot in meinem Codespace tun?
- Wie viel kostet diese Einrichtung?
- Wie kann ich eine Verbindung mit dem PostgreSQL-Server herstellen, der mit anderen Tools hinter dem virtuellen Netzwerk gesichert ist?
- Wie funktioniert die lokale App-Entwicklung mit GitHub-Aktionen?
- Wie ist das Django-Beispiel für die Ausführung auf Azure App Service konfiguriert?
- Wie debuge ich Fehler während der GitHub Actions-Bereitstellung?
- Ich habe keine Berechtigungen zum Erstellen einer vom Benutzer zugewiesenen Identität
- Was kann ich mit GitHub Copilot in meinem Codespace tun?
Wie viel kostet diese Einrichtung?
Die Preise für die erstellte Ressourcen sind wie folgt:
- Der App Service-Plan wird auf der Ebene "Einfach " erstellt und kann nach oben oder unten skaliert werden. Siehe App Service-Preise.
- Der flexible PostgreSQL-Server wird in der niedrigsten burstfähigen Dienstebene (Standard_B1ms) mit der Mindestspeichergröße erstellt, die hoch- und herunterskaliert werden kann. Siehe Azure Database for PostgreSQL pricing.
- Das virtuelle Netzwerk hat keine Gebühr, es sei denn, Sie konfigurieren zusätzliche Funktionen, z. B. Peering. Siehe Azure Virtual Network-Preise.
- Die private DNS-Zone verursacht eine kleine Gebühr. Siehe Azure DNS-Preise.
Wie stelle ich mit anderen Tools eine Verbindung mit dem PostgreSQL-Server her, der hinter dem virtuellen Netzwerk geschützt ist?
- Für den einfachen Zugriff aus einem Befehlszeilentool können Sie
psql
in der SSH-Sitzung der App ausführen. - Um eine Verbindung mit einem Desktoptool herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Beispielsweise könnte es sich um eine Azure-VM sein, die mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, der über eine Standort-zu-Standort-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verfügt.
- Sie können Azure Cloud Shell auch in das virtuelle Netzwerk integrieren.
Wie funktioniert die lokale App-Entwicklung mit GitHub Actions?
Nehmen Sie die automatisch generierte Workflowdatei von App Service als Beispiel; jede git push
startet eine neue Build- und Bereitstellungsausführung. Aus einem lokalen Klon des GitHub-Repositorys können Sie die gewünschten Updates vornehmen und zu GitHub pushen. Zum Beispiel:
git add .
git commit -m "<some-message>"
git push origin main
Wie ist das Django-Beispiel für die Ausführung in Azure App Service konfiguriert?
Die Django-Beispielanwendung konfiguriert Einstellungen in der Datei "azureproject/production.py ", damit sie in Azure App Service ausgeführt werden kann. Diese Änderungen sind gängig bei der Bereitstellung von Django in der Produktion und nicht spezifisch für App Service.
Django überprüft den HTTP_HOST-Header in eingehenden Anforderungen. Der Beispielcode verwendet die
WEBSITE_HOSTNAME
Umgebungsvariable in App Service , um den Domänennamen der App zu Djangos ALLOWED_HOSTS Einstellung hinzuzufügen.# 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 []
Django unterstützt die Bereitstellung statischer Dateien in der Produktion nicht. Für dieses Lernprogramm verwenden Sie WhiteNoise , um die Bereitstellung der Dateien zu ermöglichen. Das WhiteNoise-Paket wurde bereits mit „requirements.txt“ installiert, und seine Middleware wird der Liste hinzugefügt.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Anschließend werden die statischen Dateieinstellungen entsprechend der Django-Dokumentation konfiguriert.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Weitere Informationen finden Sie unter "Produktionseinstellungen für Django-Apps".
Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
In den oben genannten Schritten im Portal können Sie SECRET_KEY
in einen Key Vault-Verweis ändern, indem Sie die folgenden Azure CLI-Befehle in der Cloud Shell ausführen.
# 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)"
Sie können dies auch im Portal ausführen. Weitere Informationen finden Sie unter:
Gewusst wie: Debuggen von Fehlern während der GitHub Actions-Bereitstellung
Wenn ein Schritt in der automatisch generierten GitHub-Workflowdatei fehlschlägt, versuchen Sie, den fehlerhaften Befehl zu ändern, um eine ausführlichere Ausgabe zu generieren. So erhalten Sie beispielsweise eine ausführlichere Ausgabe der python
-Befehle, wenn Sie die -d
-Option hinzufügen. Committen und pushen Sie Ihre Änderungen, um eine weitere Bereitstellung in App Service auszulösen.
Ich habe keine Berechtigungen zum Erstellen einer benutzerseitig zugewiesenen Identität.
Siehe Einrichten der Bereitstellung von GitHub Actions aus dem Deployment Center.
Was kann ich mit GitHub Copilot in meinem Codespace machen?
Möglicherweise haben Sie bemerkt, dass die GitHub Copilot-Chatansicht bereits verfügbar war, als Sie den Codespace erstellt haben. Für Ihre Bequemlichkeit fügen wir die GitHub Copilot-Chaterweiterung in die Containerdefinition ein (siehe .devcontainer/devcontainer.json). Sie benötigen jedoch ein GitHub Copilot-Konto (30 Tage kostenlose Testversion verfügbar).
Einige Tipps für die Unterhaltung mit GitHub Copilot:
- In einer einzelnen Chatsitzung bauen die Fragen und Antworten aufeinander auf, und Sie können Ihre Fragen anpassen, um die Antworten zu optimieren.
- Standardmäßig hat GitHub Copilot keinen Zugriff auf Dateien in Ihrem Repository. Um Fragen zu einer Datei zu stellen, öffnen Sie die Datei zuerst im Editor.
- Damit GitHub Copilot beim Vorbereiten der Antworten Zugriff auf alle Dateien im Repository hat, beginnen Sie Ihre Frage mit
@workspace
. Weitere Informationen finden Sie unter Use the @workspace agent. - Innerhalb der Chatsitzung kann GitHub Copilot Änderungen vorschlagen und (mit
@workspace
) auch angeben, wo die Änderungen vorgenommen werden sollen. Copilot darf jedoch die Änderungen nicht für Sie vornehmen. Sie müssen entscheiden, ob Sie die vorgeschlagenen Änderungen hinzufügen und testen.
Nächste Schritte
Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre App mit einer benutzerdefinierten Domäne und einem Zertifikat schützen.
Erfahren Sie, wie eine Python-App von App Service ausgeführt wird: