Veröffentlichen von Python-Webanwendungen auf Azure App Service unter Linux

Visual Studio bietet Ihnen die Möglichkeit, Python-Web-Apps direkt in Azure App Service unter Linux zu veröffentlichen. Das Veröffentlichen auf Azure App Service unter Linux beinhaltet das Kopieren der notwendigen Dateien auf den Server und das Einrichten einer entsprechenden web.config-Datei, die den Webserver anweist, wie er Ihre App starten soll.

Hinweis

Linux ist die einzige Betriebssystemoption zum Ausführen von Python-Apps in App Service. Python unter Windows wird nicht mehr unterstützt, wie in App Service Linux Docs - Python Support beschrieben. Für Windows können Sie Ihr eigenes benutzerdefiniertes Windows-Container-Image erstellen und das Image in App Service ausführen. Weitere Informationen finden Sie unter Use a custom Docker image (Verwenden Sie ein benutzerdefiniertes Docker-Image).

Voraussetzungen

  • Visual Studio. Führen Sie zum Installieren des Produkts die Schritte unter Installieren von Visual Studio aus.

  • Ein Python-Webanwendungsprojekt, das auf dem Bottle-, Flask- oder Django-Framework basiert. Sie können ein Testprojekt erstellen, um den Veröffentlichungsprozess zu testen.

  • Um in Azure zu veröffentlichen, benötigen Sie einen Azure App Service für Ihr Azure-Abonnement.

    Wenn Sie noch kein Azure-Abonnement haben, beginnen Sie mit einem kostenlosen Azure-Konto. Erwägen Sie auch, sich für Visual Studio Dev Essentials anzumelden.

Visual Studio-Versionen

Es gibt Unterschiede bei der Veröffentlichung über Visual Studio 2017 und höher und Visual Studio 2015. Beide Ansätze werden in diesem Artikel beschrieben.

  • Visual Studio 2015 automatisiert einige der Installationsschritte, einschließlich der Erstellung der Datei web.config, aber diese Automatisierung schränkt die langfristige Flexibilität und Kontrolle ein.

  • Visual Studio 2017 und höher erfordert mehr manuelle Installationsschritte, bietet aber eine genauere Kontrolle über Ihre Python-Umgebung.

Weitere Informationen zu den Änderungen zwischen Visual Studio 2015 und Visual Studio 2017 und später finden Sie im Blogbeitrag Publish to Azure in Visual Studio 2017.

Erstellen eines Testprojekts

Wenn Sie kein bestehendes Projekt zum Veröffentlichen haben, können Sie ein Testprojekt erstellen, um den Prozess zu testen.

  1. Wählen Sie in Visual Studio File > New > Project aus dem Menü der Symbolleiste, um das Dialogfeld Create a new project zu öffnen.

  2. Geben Sie im Dialogfeld bottle in das Feld Search ein, wählen Sie die Vorlage Bottle Web Project aus, und wählen Sie dann Next.

    Die Vorlage „Bottle Web Project“ ist im Python-Entwicklungspaket enthalten. Weitere Informationen finden Sie unter Python Web Application Project Templates.

  3. Geben Sie einen Namen und einen Pfad für das Projekt ein und wählen Sie dann Erstellen.

  4. Folgen Sie den Aufforderungen zur Installation externer Pakete, wählen Sie In eine virtuelle Umgebung installieren, und wählen Sie Ihren bevorzugten Basisinterpreter für die virtuelle Umgebung.

    Die virtuelle Umgebung entspricht in der Regel der Version von Python, die auf App Service installiert ist.

Wenn Sie bereit sind, können Sie das Projekt lokal testen, indem Sie Debug > Start Debugging wählen oder die Tastenkombination F5 verwenden.

Erstellen Sie das Ziel Azure App Service

Die Veröffentlichung in Azure erfordert einen Azure App Service für ein Azure-Abonnement.

Erstellen Sie einen App-Dienst mit einer leeren Web-App wie folgt:

  1. Melden Sie sich beim Azure-Portal an.

  2. Rufen Sie die Seite App Services auf.

  3. Wählen Sie Create und wählen Sie Web App aus dem Dropdown-Menü. Die Seite Create Web App wird geöffnet.

  4. Konfigurieren Sie auf der Registerkarte Grundlegende Einstellungen die folgenden Einstellungen:

    Einstellung BESCHREIBUNG
    Ressourcengruppe Ignorieren Sie dieses Feld. Das System aktualisiert diesen Wert, nachdem Sie die Laufzeiteinstellung gewählt haben.
    Name Geben Sie einen Namen für die Web-App ein.
    Veröffentlichen Wählen Sie Code aus.
    Runtimestapel Wählen Sie die entsprechende Python-Laufzeitumgebung aus dem Dropdown-Menü. Nachdem Sie ein Element ausgewählt haben, aktualisiert das System das Feld Ressourcengruppe .
    Region Wählen Sie eine Azure-Region in Ihrer Nähe.
    Tarif Wählen Sie den Plan Free F1.

    Für die Beispiele in diesem Artikel können Sie die Einstellungen auf den anderen Registerkarten ignorieren.

  5. Klicken Sie auf Überprüfen + erstellen. Überprüfen Sie Ihre Auswahl, und wählen Sie dann Create.

  6. (Optional) Nachdem der App-Dienst fertig ist, können Sie zur Ressource gehen, Download publish profile wählen und die Datei lokal speichern.

Konfigurieren von Python auf Azure App Service

Nachdem Sie einen App-Service mit einer leeren Web-App in Ihrem Abonnement eingerichtet haben, installieren Sie die gewünschte Python-Version. Für die Veröffentlichung aus Visual Studio 2017 und höher geben Sie den genauen Pfad zum Python-Interpreter an, der mit der Site-Erweiterung installiert wurde. Weitere Informationen finden Sie unter Python-Interpreter installieren.

Falls gewünscht, können Sie auch das Paket bottle installieren. Dieses Paket wird jedoch in einem späteren Schritt in dieser Anleitung installiert.

Veröffentlichen in App Service: Visual Studio 2017 und höher

Wenn Sie eine App in Azure App Service über Visual Studio 2017 und höher veröffentlichen, werden nur die Dateien in Ihrem Projekt auf den Server kopiert. Sie müssen die erforderlichen Dateien erstellen, um die Serverumgebung zu konfigurieren.

  1. Klicken Sie in Visual Studio Solution Explorer mit der rechten Maustaste auf das Projekt und wählen Sie Hinzufügen > Neues Element. Wählen Sie im Dialogfeld die Vorlage Azure web.config (Fast CGI) aus, und wählen Sie hinzufügen. Mit diesem Schritt erstellen Sie eine web.config-Datei in Ihrem Projektstamm.

  2. Ändern Sie den PythonHandler-Eintrag in der web.config-Datei, damit der Pfad mit der Python-Installation auf dem Server übereinstimmt, wie in IIS-Konfigurationsreferenz (iis.net) beschrieben. Für Python 3.6.1 x64 sollte der Eintrag wie folgt aussehen:

    <system.webServer>
      <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
            scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
            resourceType="Unspecified" requireAccess="Script"/>
      </handlers>
    </system.webServer>
    
  3. Legen Sie den WSGI_HANDLER-Eintrag auf die web.config-Datei fest, die für das von Ihnen verwendete Framework angemessen ist:

    • Bottle: Fügen Sie nach dem Wert app.wsgi_app Klammern hinzu, wie in diesem Beispiel gezeigt. Die Klammern sind notwendig, weil es sich bei dem Objekt um eine Funktion und nicht um eine Variable handelt. Sie können die Syntax in der Datei app.py sehen.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Ändern Sie den Wert WSGI_HANDLER in <project_name>.app, wobei das <project_name>-Element dem Namen Ihres Projekts entspricht. Den genauen Bezeichner finden Sie in der Anweisung from <project_name> import app in der Datei runserver.py. Wenn das Projekt zum Beispiel „FlaskAzurePublishExample“ heißt, sieht der Eintrag wie folgt aus:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: Für Django-Projekte müssen Sie zwei Änderungen an der web.config-Datei für Django-Projekte vornehmen.

      • Ändern Sie den WSGI_HANDLER-Wert in django.core.wsgi.get_wsgi_application(). Das Objekt befindet sich in der Datei wsgi.py.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Fügen Sie den folgenden Eintrag unmittelbar nach dem Eintrag für den Schlüssel WSGI_HANDLER ein. Ersetzen Sie den Wert DjangoAzurePublishExample durch den Namen Ihres Projekts:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Nur Django-App: Fügen Sie in der Datei settings.py des Django-Projekts die URL-Domain oder IP-Adresse Ihrer Website in den Eintrag ALLOWED_HOSTS ein. Ersetzen Sie „vspython-test-02.azurewebsites.net“ durch Ihre URL:

    # Change the URL to your specific site
    ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
    

    Wenn Sie Ihre URL nicht zu den Array-Ergebnissen hinzufügen, wird die folgende Fehlermeldung angezeigt:

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

    Wenn das Array leer ist, erlaubt Django automatisch 'localhost' als Host. Wenn Sie Ihre Produktions-URL hinzufügen, wird 'localhost' nicht automatisch als Host zugelassen. Aus diesem Grund sollten Sie getrennte Entwicklungs- und Produktionskopien der Datei settings.py pflegen oder Umgebungsvariablen zur Steuerung der Laufzeitwerte verwenden.

  5. Die Vorlage auswählen.

    1. Erweitern Sie im Solution Explorer Ihren Projektordner.
    2. Klicken Sie mit der rechten Maustaste auf den Ordner static, und wählen Sie Add > New Item.
    3. Wählen Sie die Vorlage Azure Static files web.config, und wählen Sie Add.

    Diese Aktion erstellt eine weitere web.config-Datei im statischen Ordner, die die Python-Verarbeitung für diesen Ordner deaktiviert. Diese Konfiguration sendet Anforderungen für statische Dateien an den Standardwebserver und verwendet nicht die Python-Anwendung.

  6. Speichern Sie im Solution Explorer Ihr Projekt, klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Publish.

    Screenshot, der zeigt, wie Sie den Befehl Veröffentlichen für ein Projekt in Visual Studio aufrufen.

  7. Geben Sie im Fenster Publish das Veröffentlichungsziel an:

    1. Für das Ziel, wählen Sie Azure, und dann Next.

    2. Wählen Sie für das Spezifisches Ziel, wählen Sie Azure App Service (Windows), und wählen Sie Weiter.

      • Wenn das Dialogfeld anzeigt, dass weitere Erforderliche Komponenten erforderlich sind, um die Installation abzuschließen, wählen Sie Fertigstellen. Der Visual Studio-Installer wird geöffnet. Bestätigen Sie die Optionen, und wählen Sie Installieren.
    3. Für den App Service wählen Sie den entsprechenden App Service für Ihr Abonnement aus und wählen Sie Fertigstellen.

      Screenshot, der zeigt, wie Sie den Veröffentlichungsprozess in Azure in Visual Studio 2017 und höher vorbereiten, indem Sie ein bestehendes Abonnement verwenden.

      Wählen Sie nach Abschluss des Veröffentlichungsvorgangs Close.

  8. Visual Studio zeigt den Status in einem „Web Publish Activity“-Fenster und auch im Fenster Publish profile creation progress an. Wenn Sie die Meldung „Ready to publish“ für die Webanwendung sehen, wählen Sie Publish.

    Screenshot, der zeigt, wie Sie die Webanwendung in Visual Studio veröffentlichen.

  9. Wenn die Veröffentlichung erfolgreich war, wird der Standardbrowser mit der URL der Website geöffnet. Die URL der Website wird auch im Fenster Publish angezeigt.

    Screenshot, der zeigt, dass der Browser auf die URL der veröffentlichten Webanwendung geöffnet ist.

    Wenn die URL der Website nicht automatisch geöffnet wird, wählen Sie Website öffnen, um die Webanwendung im Browser anzuzeigen:

    Screenshot, der zeigt, wie Sie die Website-URL für die veröffentlichte Webanwendung im Browser öffnen.

  10. Beim Öffnen des Browsers sehen Sie möglicherweise die Meldung „The page cannot be displayed because an internal server error has occurred“ (Die Seite kann nicht angezeigt werden, da ein interner Serverfehler aufgetreten ist). Diese Meldung zeigt an, dass Ihre Python-Umgebung auf dem Server nicht vollständig konfiguriert ist. In diesem Fall führen Sie die folgenden Schritte aus:

    1. Stellen Sie sicher, dass Sie eine geeignete Python-Site-Erweiterung installiert haben. Weitere Informationen finden Sie unter Quickstart: Bereitstellen einer Python-Webanwendung (Django oder Flask) auf Azure App Service.

    2. Prüfen Sie den Pfad zum Python-Interpreter in Ihrer web.config-Datei erneut. Der Pfad muss genau mit dem Installationsspeicherort der ausgewählten Websiteerweiterung übereinstimmen.

    3. Verwenden Sie die Kudu-Konsole, um alle Pakete zu aktualisieren, die in der Datei requirements.txt Ihrer Anwendung aufgeführt sind. Navigieren Sie zu demselben Python-Ordner, der auch in der web.config-Datei verwendet wird, z. B. /home/python361x64. Führen Sie den folgenden Befehl aus, wie im Abschnitt Kudu-Konsole beschrieben:

      python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
      

      Wenn Sie beim Ausführen dieses Befehls Berechtigungsfehler sehen, vergewissern Sie sich, dass Sie den Befehl in Ihrem Website-Erweiterungsordner ausführen. Führen Sie den Befehl nicht in einem Ordner aus, der eine der Standard-Python-Installationen von App Service enthält. Da Sie diese Standardumgebungen nicht verändern können, tritt bei dem Versuch, Pakete zu installieren, in jedem Fall ein Fehler auf.

    4. Fügen Sie dem <system.webServer>-Knoten der web.config-Datei die folgende Zeile hinzu, um eine detailliertere Fehlerausgabe zu erhalten:

      <httpErrors errorMode="Detailed"></httpErrors>
      
    5. Versuchen Sie, App Service nach der Installation neuer Pakete neu zu starten. Ein Neustart ist nicht erforderlich, wenn die Datei web.configgeändert wird, da App Service einen automatischen Neustart durchführt, wenn die Datei web.config geändert wird.

      Tipp

      Wenn Sie Änderungen an der requirements.txt-Datei der App vornehmen, verwenden Sie die Kudu-Konsole erneut, um sämtliche Pakete zu installieren, die zu diesem Zeitpunkt in der Datei aufgeführt sind.

  11. Nachdem Sie die Serverumgebung vollständig konfiguriert haben, aktualisieren Sie die Seite im Browser, um die Webanwendung anzuzeigen:

    Screenshot, der die Ergebnisse der Veröffentlichung von Bottle-, Flask- und Django-Apps auf Azure App Service in Visual Studio zeigt.

Veröffentlichen in App Service: Visual Studio 2015

Folgen Sie diesen Schritten, um Ihre Python-Webanwendung in Visual Studio 2015 auf Azure App Service zu veröffentlichen.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Veröffentlichen aus.

  2. Wählen Sie im Dialogfeld VeröffentlichenMicrosoft Azure App Service:

    Screenshot, der zeigt, wie Sie in Visual Studio auf Azure veröffentlichen und einen Azure App Service auswählen.

  3. Wählen Sie Microsoft Azure App Service als Veröffentlichungsziel. Wählen Sie im nächsten Dialogfeld einen vorhandenen App-Dienst aus oder wählen Sie New, um einen neuen zu erstellen.

  4. Die Details des App-Dienstes werden auf der Registerkarte Verbindung des Dialogs Veröffentlichen angezeigt:

    Screenshot, der zeigt, wie Sie in Visual Studio auf Azure veröffentlichen und die App Service-Verbindung anzeigen.

  5. Wählen Sie bei Bedarf Weiter, um weitere Einstellungen zu überprüfen.

  6. Wählen Sie Veröffentlichen aus. Nachdem Ihre Anwendung in Azure bereitgestellt wurde, öffnet sich Ihr Standardbrowser auf der URL der Website.

Im Rahmen dieses Prozesses führt Visual Studio auch die folgenden Schritte aus:

  • Erstellt eine web.config-Datei auf dem Server, der angemessene Zeiger auf die wsgi_app-Funktionen der App und den Standardinterpreter von App Service für Python 3.4 enthält.
  • Deaktiviert die Verarbeitung von Dateien im statischen Ordner des Projekts . (Die Regeln für diese Aktion stehen in der Datei web.config)
  • Publiziert die virtuelle Umgebung auf dem Server.
  • Fügt eine web.debug.config-Datei und die Tools zum Debuggen hinzu, um das Remotedebuggen zu aktivieren. Für Visual Studio 2019 bis Version 16.4 bietet ptvsd die Tools zum Debuggen. Für Visual Studio 2019 ab Version 16.5 bietet debugpy die Tools zum Debuggen.

Wie bereits erwähnt, vereinfachen diese automatischen Schritte den Veröffentlichungsprozess, aber sie können die Kontrolle über die Python-Umgebung erschweren. Beispielsweise wird die web.config-Datei nur auf dem Server erstellt und nicht dem Projekt hinzugefügt. Der Veröffentlichungsprozess nimmt außerdem zusätzliche Zeit in Anspruch, da die gesamte virtuelle Umgebung von Ihrem Entwicklungscomputer kopiert wird und keine Abhängigkeit von der Serverkonfiguration entsteht.

Irgendwann möchten Sie möglicherweise Ihre eigene web.config-Datei verwalten und requirements.txt verwenden, um Pakete direkt auf dem Server zu verwalten. Wenn Sie die Datei requirements.txt verwenden, können Sie sicherstellen, dass Ihre Entwicklungs- und Serverumgebung immer übereinstimmen.