Freigeben über


Konfigurieren von Python-Web-Apps für IIS

Wenn Sie Internetinformationsdienste (INTERNET Information Services, IIS) als Webserver auf einem Windows-Computer (einschließlich virtuellen Windows-Computern auf Azure) verwenden, müssen Sie die Python-Webanwendung konfigurieren, damit IIS Python-Code ordnungsgemäß verarbeiten kann. Die Konfiguration erfolgt über Einstellungen in der web.config Datei für die Python-Web-App. In diesem Artikel wird beschrieben, wie Sie die erforderlichen Einstellungen konfigurieren.

Voraussetzungen

  • Python unter Windows installiert. Um eine Web-App auszuführen, installieren Sie zuerst Ihre erforderliche Version von Python direkt auf dem Windows-Hostcomputer, wie in Install Python Interpreters beschrieben.

    • Identifizieren Sie den Standort des python.exe-Dolmetschers . Aus Gründen der Einfachheit können Sie diesen Speicherort ihrer PATH-Umgebungsvariable hinzufügen.
  • Erforderliche Pakete installiert. Für einen dedizierten Host können Sie die globale Python-Umgebung verwenden, um Ihre App anstelle einer virtuellen Umgebung auszuführen. Dementsprechend können Sie alle Anforderungen Ihrer App in der globalen Umgebung installieren, indem Sie den Befehl pip install -r requirements.txt ausführen.

Legen Sie web.config so fest, dass sie auf den Python-Dolmetscher zeigt.

Die web.config Datei für Ihre Python-Anwendung weist den IIS-Webserver (Version 7 oder höher) unter Windows an, wie es Python-Anforderungen über HttpPlatformHandler (empfohlen) oder FastCGI behandeln soll. Visual Studio-Versionen 2015 und frühere Versionen nehmen diese Änderungen automatisch vor. Für Visual Studio 2017 und höher müssen Sie die web.config Datei manuell ändern.

Wenn Ihr Projekt noch keine web.config Datei enthält, können Sie eine datei hinzufügen, indem Sie mit der rechten Maustaste auf das Projektverzeichnis klicken, "Neues Element hinzufügen" > auswählen und nach web.config suchen oder eine leere web.config XML-Datei erstellen.

Option 1: Konfigurieren des HttpPlatformHandlers

Das HttpPlatform-Modul übergibt Socketverbindungen direkt an einen eigenständigen Python-Prozess. Mit dieser Pass-Through können Sie jeden beliebigen Webserver ausführen, erfordert jedoch ein Startskript, das einen lokalen Webserver ausführt. Dieser Ansatz wird häufig mithilfe eines Python-Webframeworks wie Flask oder Django durchgeführt. Sie geben das Skript im <httpPlatform> Element der web.config Datei an. Das attribut processPath verweist auf den Python-Interpreter der Websiteerweiterung. Das arguments Attribut verweist auf Ihr Startskript, das einen lokalen Webserver ausführt, in diesem Fall runserver.py und alle Argumente, die Sie bereitstellen möchten:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="c:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

In diesem Beispiel enthält die umgebungsvariable HTTP_PLATFORM_PORT den Port, auf den ihr lokaler Server auf Verbindungen von localhostlauschen soll. In diesem Beispiel wird auch gezeigt, wie Sie eine andere Umgebungsvariable SERVER_PORTerstellen. Sie können bei Bedarf Umgebungsvariablen erstellen und zuweisen.

Option 2: Konfigurieren des FastCGI-Handlers

Alternativ können Sie FastCGI verwenden, um Ihre Apps zu konfigurieren. FastCGI ist eine Schnittstelle, die auf Anforderungsebene funktioniert. IIS empfängt eingehende Verbindungen und leitet jede Anforderung an eine WSGI-App (Web Server Gateway Interface) weiter, die in einem oder mehreren persistenten Python-Prozessen ausgeführt wird.

Anmerkung

Obwohl Sie Ihr Projekt mit FastCGI einrichten können, empfehlen wir die Verwendung von HttpPlatformHandler zum Konfigurieren Ihrer Apps, da das WFastCGI-Projekt nicht mehr verwaltet wird und zu Fehlern führen kann.

Um FastCGI zu verwenden, installieren und konfigurieren Sie zuerst das Wfastcgi-Paket, wie in pypi.org/project/wfastcgi/beschrieben.

Ändern Sie als Nächstes die web.config-Datei Ihrer Anwendung so, dass sie die vollständigen Pfade zu den ausführbaren Dateien python.exe und der Datei wfastcgi.py im PythonHandler-Schlüssel enthalten muss. Bei den folgenden Schritten wird davon ausgegangen, dass Python im ordner c:\python36-32 installiert ist und sich der App-Code im ordner "c:\home\site\wwwroot" befindet. Passen Sie diese Werte entsprechend für Ihre Pfade an.

  1. Ändern Sie den PythonHandler Eintrag in der web.config Datei so, dass der Pfad mit dem Python-Installationsspeicherort übereinstimmt. Weitere Informationen finden Sie in der IIS-Konfigurationsreferenz zu iis.net.

    <system.webServer>
       <handlers>
         <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
             scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
             resourceType="Unspecified" requireAccess="Script"/>
       </handlers>
    </system.webServer>
    
  2. Fügen Sie im <appSettings>-Abschnitt der Datei web.config Schlüssel für WSGI_HANDLER, WSGI_LOG (optional) und PYTHONPATH hinzu.

    <appSettings>
       <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
       <!-- The handler here is specific to Bottle; see the next section. -->
       <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
       <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
    </appSettings>
    

    Diese <appSettings> Werte stehen Ihrer App als Umgebungsvariablen zur Verfügung:

    • Der Wert für den PYTHONPATH-Schlüssel kann frei erweitert werden, muss jedoch die Basis Ihrer App enthalten.
    • Der schlüssel WSGI_HANDLER muss auf eine WSGI-App verweisen, die aus Ihrer App importiert werden kann.
    • Der WSGI_LOG-Schlüssel ist optional, der Schlüssel wird jedoch für das Debuggen Ihrer App empfohlen.
  3. Legen Sie den WSGI_HANDLER Eintrag in der web.config-Datei entsprechend dem von Ihnen verwendeten Framework fest:

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

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Ändern Sie den Wert von WSGI_HANDLER in <project_name>.app, wobei <project_name> dem Namen Ihres Projekts entspricht. Sie finden den genauen Bezeichner, indem Sie sich die Anweisung in der from <project_name> import appdatei runserver.py ansehen. Wenn das Projekt beispielsweise den Namen FlaskAzurePublishExample hat, wird der Eintrag wie folgt angezeigt:

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

      • Ändern Sie den wert WSGI_HANDLER 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 die WSGI_HANDLER-Taste hinzu. Ersetzen Sie den Wert DjangoAzurePublishExample durch den Namen Ihres Projekts:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Nur Django-Apps: Fügen Sie in der settings.py-Datei des Django-Projekts Ihre Website-URL-Domäne oder IP-Adresse zum ALLOWED_HOSTS Eintrag hinzu. Ersetzen Sie "1.2.3.4" durch Ihre URL oder IP-Adresse:

    # Change the URL or IP address to your specific site
    ALLOWED_HOSTS = ['1.2.3.4']
    

    Wenn Sie Die URL nicht zu den Arrayergebnissen hinzufügen, wird der folgende Fehler angezeigt:

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

Wenn das Array leer ist, lässt Django automatisch 'localhost' und '127.0.0.1' als Hosts zu. Wenn Sie Ihre Produktions-URL hinzufügen, werden diese Host-Seiten nicht automatisch zugelassen. Aus diesem Grund möchten Sie möglicherweise separate Entwicklungs- und Produktionskopien der settings.py-Datei verwalten oder Umgebungsvariablen verwenden, um die Laufzeitwerte zu steuern.

Bereitstellen auf IIS oder einem virtuellen Windows-Computer

Wenn Sie die richtige web.config Datei in Ihrem Projekt haben, können Sie auf dem Computer, auf dem IIS ausgeführt wird, über den Projektmappen-Explorer veröffentlichen. Klicken Sie mit der rechten Maustaste auf das Projekt, wählen Sie Veröffentlichenaus, und wählen Sie dann IIS, FTP usw.aus. In diesem Fall kopiert Visual Studio nur die Projektdateien auf den Server. Sie sind für alle serverseitigen Konfigurationen verantwortlich.