Configurer des applications web Python pour IIS
Lorsque vous utilisez Internet Information Services (IIS) comme serveur web sur un ordinateur Windows (y compris des machines virtuelles Windows sur Azure), vous devez configurer l’application web Python pour permettre à IIS de traiter correctement le code Python. La configuration est effectuée via les paramètres du fichier web.config
pour l’application web Python. Cet article décrit comment configurer les paramètres nécessaires.
Prérequis
Python sous Windows installé. Pour exécuter une application web, commencez par installer directement la version requise de Python sur l’ordinateur hôte Windows (voir Installer des interpréteurs Python).
- Identifiez l'emplacement de l’interpréteur
python.exe
. Dans un souci de commodité, vous pouvez ajouter cet emplacement à votre variable d’environnement PATH.
- Identifiez l'emplacement de l’interpréteur
Packages nécessaires installés. Pour un hôte dédié, vous pouvez utiliser l’environnement Python global pour exécuter votre application plutôt qu’un environnement virtuel. Il vous sera alors possible d’installer tous les éléments requis par votre application dans l’environnement global en exécutant la commande
pip install -r requirements.txt
.
Définir web.config pour le faire pointer vers l’interpréteur Python
Le fichier web.config
de votre application Python indique au serveur web IIS (version 7 ou ultérieure) qui s’exécute sur Windows comment il doit gérer les requêtes Python à travers HttpPlatformHandler (recommandé) ou FastCGI. Les versions 2015 et antérieures de Visual Studio font ces modifications automatiquement. Pour Visual Studio 2017 et ultérieur, vous devez modifier le fichier web.config
manuellement.
Si votre projet ne contient pas encore de fichier web.config
, vous pouvez en ajouter un en cliquant avec le bouton droit de la souris sur le répertoire du projet, en sélectionnant Ajouter > nouvel élément et en recherchant web.config
ou en créant un fichier XML web.config
vierge.
Option 1 : Configurer le HttpPlatformHandler
Le module HttpPlatform passe les connexions de socket directement à un processus Python autonome. Cette transmission vous permet d’exécuter n’importe quel serveur web de votre choix, mais nécessite un script de démarrage qui exécute un serveur web local. Cette approche est généralement effectuée à l’aide d’une infrastructure web Python, telle que Flask ou Django. Vous spécifiez le script dans l’élément <httpPlatform>
du fichier web.config
. L’attribut processPath
pointe vers l’interpréteur Python de l’extension de site. L’attribut arguments
pointe vers votre script de démarrage qui exécute un serveur web local, dans ce cas runserver.py
, et tous les arguments que vous souhaitez fournir :
<?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>
Dans cet exemple, la variable d’environnement HTTP_PLATFORM_PORT
contient le port sur lequel votre serveur local doit écouter les connexions à partir de localhost
. Cet exemple montre également comment créer une autre variable d’environnement, SERVER_PORT
. Vous pouvez créer et affecter des variables d’environnement en fonction de vos besoins.
Option 2 : Configurer le gestionnaire FastCGI
Alternativement, vous pouvez utiliser FastCGI pour configurer vos applications. FastCGI est une interface qui fonctionne au niveau de la demande. IIS reçoit les connexions entrantes et transmet chaque demande à une application WSGI exécutée dans un ou plusieurs processus Python persistants.
Remarque
Bien que vous puissiez configurer votre projet en utilisant FastCGI, nous vous recommandons d’utiliser HttpPlatformHandler pour configurer vos applications, car le projet WFastCGI n’est plus maintenu et peut entraîner des bogues.
Pour utiliser FastCGI, commencez par installer et configurer le package wfastcgi suivant les instructions figurant dans pypi.org/project/wfastcgi/.
Ensuite, modifiez le fichier web.config
de votre application en ajoutant les chemins d’accès complets à l'exécutable python.exe
et au fichier wfastcgi.py
dans la clé PythonHandler
. Les étapes suivantes supposent que Python est installé dans le dossier c:\python36-32 et que le code de l’application se trouve dans le dossier c:\home\site\wwwroot. Ajustez ces valeurs selon vos chemins d'accès en conséquence.
Modifiez l’entrée
PythonHandler
dans le fichierweb.config
afin que le chemin d'accès corresponde à l’emplacement d’installation de Python. Pour plus d’informations, consultez la Référence de configuration IIS (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>
Dans la section
<appSettings>
du fichierweb.config
, ajoutez les clésWSGI_HANDLER
,WSGI_LOG
(facultatif), etPYTHONPATH
:<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>
Ces valeurs
<appSettings>
sont accessibles à votre application comme variables d’environnement :- La valeur de la clé
PYTHONPATH
peut être librement étendue, mais elle doit inclure la racine de votre application. - La clé
WSGI_HANDLER
doit pointer vers une application WSGI importable à partir de votre application. - La clé
WSGI_LOG
est facultative, mais elle est recommandée pour le débogage de votre application.
- La valeur de la clé
Définissez l’entrée
WSGI_HANDLER
dans le fichierweb.config
de façon appropriée pour le framework que vous utilisez :Bottle : ajoutez des parenthèses après la valeur
app.wsgi_app
, comme indiqué dans cet exemple. Les parenthèses sont nécessaires, car l’objet est une fonction plutôt qu’une variable. Vous pouvez voir la syntaxe dans le fichierapp.py
.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask : changez la valeur de
WSGI_HANDLER
en<project_name>.app
, où<project_name>
correspond au nom de votre projet. Vous pouvez trouver l’identificateur exact en examinant l’instructionfrom <project_name> import app
dans le fichierrunserver.py
. Par exemple, si le projet est nomméFlaskAzurePublishExample
, l’entrée apparaît comme suit :<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django : deux modifications sont nécessaires dans le fichier
web.config
pour les projets Django.Remplacez la valeur
WSGI_HANDLER
pardjango.core.wsgi.get_wsgi_application()
. L’objet se trouve dans le fichierwsgi.py
.<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Ajoutez l’entrée suivante immédiatement après l’entrée de la clé
WSGI_HANDLER
. Remplacez la valeurDjangoAzurePublishExample
par le nom de votre projet :<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Applications Django uniquement : dans le fichier
settings.py
du projet Django, ajoutez votre domaine d’URL de site ou votre adresse IP à l’entréeALLOWED_HOSTS
. Remplacez « 1.2.3.4 » par votre URL ou adresse IP :# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
Si vous n’ajoutez pas votre URL aux résultats du tableau, l’erreur suivante s’affiche :
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Lorsque le tableau est vide, Django autorise automatiquement 'localhost'
et '127.0.0.1'
en tant qu’hôtes. Si vous ajoutez votre URL de production, ces sites hôtes ne sont pas automatiquement autorisés. Pour cette raison, vous pouvez conserver des copies de développement et de production distinctes du fichier settings.py
, ou utiliser des variables d’environnement pour contrôler les valeurs d’exécution.
Déployer sur IIS ou sur une machine virtuelle Windows
Lorsque vous disposez du bon fichier web.config
dans votre projet, vous pouvez publier sur l’ordinateur exécutant IIS à partir de l'Explorateur de solutions. Cliquez avec le bouton droit sur le projet, sélectionnez Publier, puis IIS, FTP, etc.. Dans ce cas, Visual Studio copie uniquement les fichiers projet sur le serveur. Vous êtes responsable de toutes les configurations côté serveur.