Konfigurieren von Python-Web-Apps für IIS
Wenn Sie die Internetinformationsdienste (IIS) als Webserver auf einem Windows-Computer verwenden (einschließlich virtuelle Windows-Maschinen auf Azure), müssen Sie die Python-Webanwendung konfigurieren, damit IIS den Python-Code ordnungsgemäß verarbeiten kann. Die Konfiguration erfolgt über Einstellungen in der Datei web.config
für die Python-Webanwendung. In diesem Artikel wird beschrieben, wie Sie die erforderlichen Einstellungen vornehmen.
Voraussetzungen
Python auf Windows installiert. Um eine Web-App auszuführen, installieren Sie zunächst Ihre gewünschte Version von Python direkt auf dem Windows-Hostcomputer, wie unter Installieren von Python-Interpretern beschrieben.
- Geben Sie den Standort des Dolmetschers
python.exe
an. Zur Vereinfachung können Sie diesen Speicherort Ihrer PATH-Umgebungsvariablen hinzufügen.
- Geben Sie den Standort des Dolmetschers
Erforderliche Pakete installiert. Bei einem dedizierten Host können Sie die globale Python-Umgebung verwenden, um Ihre Anwendung auszuführen, anstatt eine virtuelle Umgebung. Dementsprechend können Sie alle Anforderungen für Ihre Anwendung in die globale Umgebung installieren, indem Sie den Befehl
pip install -r requirements.txt
ausführen.
Festlegen, dass die „web.config“-Datei auf den Python-Interpreter verweist
Die web.config
-Datei für Ihre Python-Anwendung weist den IIS-Webserver (Version 7 oder höher) unter Windows an, wie er Python-Anfragen über HttpPlatformHandler (empfohlen) oder FastCGI behandeln soll. Visual Studio 2015 und frühere Versionen nehmen diese Anpassungen automatisch vor. Für Visual Studio 2017 und höher müssen Sie die Datei web.config
manuell ändern.
Wenn Ihr Projekt noch keine web.config
-Datei enthält, können Sie eine hinzufügen, indem Sie mit der rechten Maustaste auf das Projektverzeichnis klicken, Add > New Item wählen und nach web.config
suchen oder eine leere web.config
-XML-Datei erstellen.
Option 1: Konfigurieren des HttpPlatformHandler
Das HTTP-Plattformmodul übergibt die Socketverbindungen direkt an einen eigenständigen Python-Prozess. Mit diesem Pass-Through können Sie jeden beliebigen Webserver ausführen, aber es erfordert ein Startskript, das einen lokalen Webserver ausführt. Dieser Ansatz wird in der Regel mit einem Python-Web-Framework wie Flask oder Django umgesetzt. Sie geben das Skript im Element <httpPlatform>
in der Datei web.config
an. Das Attribut processPath
verweist auf den Python-Interpreter der Website-Erweiterung. Das Attribut arguments
verweist auf Ihr Startskript, das einen lokalen Webserver ausführt, in diesem Fall runserver.py
, und alle Argumente, die Sie angeben 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, an dem Ihr lokaler Server auf Verbindungen von localhost
. Dieses Beispiel zeigt auch, wie man eine weitere Umgebungsvariable erstellt, SERVER_PORT
. Sie können nach 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 der Anforderungsebene funktioniert. IIS empfängt eingehende Verbindungen und leitet jede Anforderung an eine WSGI-Anwendung an einen oder mehrere persistente Python-Prozesse weiter.
Hinweis
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 zunächst das wfastcgi-Paket wie in pypi.org/project/wfastcgi/ beschrieben.
Ändern Sie als nächstes die Datei web.config
Ihrer Anwendung, um die vollständigen Pfade zur ausführbaren Datei python.exe
und zur Datei wfastcgi.py
in den Schlüssel PythonHandler
aufzunehmen. Die folgenden Schritte gehen davon aus, dass Python im Ordner c:\python36-32 und der Anwendungscode im Ordner c:\home\site\wwwroot installiert ist. Passen Sie diese Werte für Ihre Pfade entsprechend an.
Ändern Sie den
PythonHandler
-Eintrag in derweb.config
-Datei, damit der Pfad mit dem Installationsort von Python übereinstimmt. Weitere Informationen finden Sie unter IIS-Konfigurationsreferenz (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>
Fügen Sie im Abschnitt
<appSettings>
der Dateiweb.config
Schlüssel fürWSGI_HANDLER
,WSGI_LOG
(optional) undPYTHONPATH
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 Schlüssel
PYTHONPATH
kann beliebig erweitert werden, muss aber das Stammverzeichnis Ihrer Anwendung enthalten. - Der Schlüssel
WSGI_HANDLER
muss auf eine WSGI-Anwendung verweisen, die von Ihrer Anwendung importiert werden kann. - Der Schlüssel
WSGI_LOG
ist optional, wird aber zum Debuggen Ihrer Anwendung empfohlen.
- Der Wert für den Schlüssel
Legen Sie den
WSGI_HANDLER
-Eintrag auf dieweb.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 Dateiapp.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 Anweisungfrom <project_name> import app
in der Dateirunserver.py
. Wenn das Projekt zum BeispielFlaskAzurePublishExample
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 indjango.core.wsgi.get_wsgi_application()
. Das Objekt befindet sich in der Dateiwsgi.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 WertDjangoAzurePublishExample
durch den Namen Ihres Projekts:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Nur Django-App: Fügen Sie in der Datei
settings.py
des Django-Projekts die URL-Domain oder IP-Adresse Ihrer Website in den EintragALLOWED_HOSTS
ein. 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 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'
und '127.0.0.1'
als Hosts. Wenn Sie Ihre Produktions-URL hinzufügen, werden diese Host-Sites nicht automatisch zugelassen. Aus diesem Grund sollten Sie getrennte Entwicklungs- und Produktionskopien der Datei settings.py
pflegen oder Umgebungsvariablen zur Steuerung der Laufzeitwerte verwenden.
Bereitstellung auf IIS oder einer virtuellen Windows-Maschine
Wenn Sie die korrekte web.config
-Datei in Ihrem Projekt haben, können Sie über Solution Explorer auf dem Computer veröffentlichen, auf dem IIS ausgeführt wird. Klicken Sie mit der rechten Maustaste auf das Projekt, wählen Sie Publish, und wählen Sie dann IIS, FTP usw.. In diesem Fall kopiert Visual Studio nur die Projektdateien auf den Server. Sie sind für die gesamte serverseitige Konfiguration verantwortlich.