Installer Django sur IIS : un didacticiel pas à pas

Publié: 2022-03-11

Bien que de nombreux développeurs Django puissent considérer cela comme blasphématoire, il est parfois nécessaire de déployer des applications Django sur Windows/IIS, en particulier lorsque vous travaillez avec un client qui a basé son infrastructure sur l'écosystème Windows. La partie "blasphème" vient du fait que Django a vraiment été ciblé sur l'environnement Unix, s'appuyant fortement sur des fonctionnalités telles que WSGI, FastCGI et les outils de ligne de commande, qui sont tous étrangers à Windows. Heureusement, la compatibilité Django/IIS s'améliore, grâce à l'ajout de fonctionnalités (qui seraient autrement un gâchis) à la fois du côté Windows et du côté Python+Django de l'équation, aidant ainsi à résoudre les problèmes de compatibilité entre ces deux mondes techniques disparates.

Ce court tutoriel ciblé vous guide à travers la configuration de base d'un projet Django sous Windows. Il couvre l'installation de Python, Django et des outils associés, y compris l'exécution du projet Django à la fois de manière autonome et en tant que serveur FastCGI. Ce dernier est d'ailleurs de plus en plus important, puisque IIS prend désormais officiellement en charge FastCGI (sur IIS 7+, il suffit d'installer la fonctionnalité CGI).

Remarque : Ce didacticiel est destiné aux personnes ayant une compréhension pratique de Windows et qui sont familiarisées avec la console de gestion IIS. La version d'IIS utilisée dans ce didacticiel est la 8.5, mais les descriptions et les techniques sont similaires sur les versions antérieures. Le tutoriel est basé sur Python 2.7 et Django 1.7, car ce sont les versions que j'utilise pour mes projets. Vous pouvez trouver un autre tutoriel Django ici.

Conseil de pro : si vous envisagez de déployer plusieurs projets Django (ou même de simples projets Python), ou si vous êtes un développeur, vous devriez consulter virtualenv, un outil permettant de créer des environnements Python isolés.

Installer Python sur Windows

Tout d'abord, téléchargez Python. Des programmes d'installation MSI 32 bits et 64 bits sont fournis, et vous devez choisir celui qui convient à la machine sur laquelle vous effectuez l'installation.

Les bases du PIP

PIP est l'outil qui installe et maintient les bibliothèques Python (dont Django n'est qu'un exemple). Il est appelé en exécutant la commande pip à l'invite de commande. Il implémente plusieurs sous-commandes, et deux des plus utiles sont install et freeze . PIP installera également les dépendances du projet (bibliothèques supplémentaires) si le projet en a.

L'exécution de pip install <package_name> téléchargera et installera le package et toutes ses dépendances (qui peuvent être imbriquées et assez complexes). L'exécution de pip install --upgrade <package_name> mettra également à niveau un package existant vers sa version la plus récente. PIP prend en charge une syntaxe spéciale pour installer des versions précises d'un package au lieu de simplement "le plus récent". Cela se fait en ajoutant un opérateur et un numéro de version au nom du package ; par exemple "Jinja2==2.7.3" (pour installer une version précise) ou "six>=1.8" (pour installer toute version égale ou supérieure au numéro de version spécifié).

L'exécution de pip freeze affiche simplement la liste des packages actuellement installés dans un format directement utilisable par pip install .

Notez que certains packages Python / PIP sont livrés avec des bibliothèques écrites en C, qui doivent être compilées pour que le package fonctionne. À moins que vous ne configuriez votre système pour avoir un compilateur C fonctionnel qui est également compatible avec les exécutables Python, vous ne pourrez pas installer de tels packages. Django est une bibliothèque Python pure, elle ne nécessite donc pas l'installation d'un compilateur C.

Il est important que vous installiez Python 2.7.9 ou une version ultérieure, car les versions de Python commençant par 2.7.9 incluent PIP, le gestionnaire de bibliothèque/paquet/logiciel Python qui est utilisé pour installer tout le reste dans ce didacticiel.

Le processus d'installation est très simple et direct. Il vous proposera d'installer Python dans le répertoire C:\Python27 , ce que vous devrez accepter car cela vous facilitera la vie par la suite. Essayez de ne pas céder à l'habitude de Windows d'installer des éléments dans des répertoires avec des espaces dans leurs noms.

Le répertoire de base après l'installation contiendra environ 8 sous-répertoires, quelques fichiers divers et deux exécutables nommés Python.exe et PythonW.exe . Le premier est l'interpréteur de ligne de commande par défaut et le shell Python, tandis que le second n'est que l'interpréteur, qui n'utilisera pas (ou n'engendrera pas) une fenêtre de console si elle est invoquée, et de ce fait convient à l'exécution d'applications GUI Python.

Ensuite, Python doit être ajouté à la variable d'environnement PATH du système. Cela se fait dans Paramètres système avancés (ou Propriétés système ), dans l'onglet Avancé , en cliquant sur le bouton Variables d'environnement . Il y a deux répertoires à ajouter : C:\Python27 et C:\Python27\Scripts . Ceux-ci doivent être ajoutés à la liste PATH, séparés par des points-virgules ( ; ). La fin de votre variable PATH devrait ressembler à ;C:\Python27;C:\Python27\Scripts .

Conseil de pro : vous pouvez également installer GOW, une collection légère d'utilitaires de ligne de commande Unix similaires à Cygwin. Il vous fournira des outils comme ls , mais aussi des outils plus intéressants comme make , wget , curl , ssh , scp , gzip et tar .

Installer Django sous Windows

Django peut être installé à l'aide de PIP avec une commande telle que pip install django . Le processus peut générer des dépendances supplémentaires si elles ne sont pas déjà présentes sur votre système. Sinon, il installera simplement Django uniquement, avec une sortie similaire à la suivante :

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

Vous pouvez vérifier si Python et Django pour Windows fonctionnent en démarrant une nouvelle invite de commandes Windows, en exécutant la commande python et en saisissant la commande import django à l'invite Python. Si cela fonctionne correctement, il ne devrait y avoir aucune sortie ou message après la commande import django ; c'est à dire:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

Installer un projet Django sous Windows

Un « projet » Django consiste en une ou plusieurs « applications ». Le répertoire de niveau supérieur d'un projet contient généralement un sous-répertoire de projet spécial qui contient des paramètres et des informations générales au niveau du projet, un sous-répertoire par application et un script de ligne de commande appelé manage.py . Par exemple:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Les projets Django peuvent être simplement distribués en archivant l'intégralité du répertoire du projet et en le décompressant sur une autre machine. Dans l'exemple ci-dessus, le projet contient le sous-répertoire du project , le répertoire de l'application nommé djangoapp et un sous-répertoire des templates auxiliaires.

Le script manage.py est le « couteau suisse » des applications Django. Il fait tout, de la création de nouvelles applications aux migrations de bases de données, en passant par l'exécution d'un serveur HTTP de test (intégré) ou même d'un serveur FastCGI.

Exécution d'un serveur HTTP de test

Si le projet et ses applications sont fonctionnels, vous devriez pouvoir démarrer le serveur HTTP Django uniquement pour le développement par défaut en exécutant la commande manage.py runserver , ce qui devrait donner une sortie similaire à la suivante :

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

Comme vous pouvez le voir dans les messages, cela démarre un serveur sur localhost, port 8000. Vous pouvez y accéder immédiatement avec votre navigateur Web.

Configuration et exécution d'un serveur FastCGI

Une option plus intéressante consiste à activer un serveur FastCGI. Avec FastCGI, vous pouvez utiliser IIS, Apache ou tout autre serveur Web pour servir l'application dans un environnement de production. Pour que cela fonctionne, vous devez télécharger le fichier fcgi.py (la commande de gestion Django pour exécuter Django sous Windows avec IIS via FastCGI) et le placer dans le sous-répertoire management/commands du sous-répertoire de l'application Django (pas du projet !). Les sous-répertoires de management et de commands doivent avoir un fichier vide nommé __init__.py (qui transforme ces répertoires en modules Python).

fcgi.py est un adaptateur WSGI vers FastCGI très simple et minimaliste qui ne prend pas en charge l'écoute sur un socket TCP ou un canal, et effectue tout son traitement en utilisant stdin et stdout`. En tant que tel, il n'est pas utilisable avec les serveurs Web modernes tels que nginx , mais fonctionnera avec IIS.

Configuration d'IIS pour exécuter une application FastCGI

Si le module FastCGI est chargé dans IIS (ou simplement le module CGI dans IIS 7+), la console de gestion IIS aura l'icône "FastCGI Settings" disponible. Django est un framework qui a son propre routage d'URL, donc les applications Django doivent être installées en tant que "gestionnaire" dans IIS pour des chemins spécifiques. Pour installer une application Django sur le site Web par défaut d'IIS, sélectionnez-la dans la console de gestion et ouvrez la fonctionnalité de configuration des mappages de gestionnaire . Dans celui-ci, cliquez sur l'action Add Module Mapping… , et entrez les informations suivantes :

  • Chemin de la requête : définissez-le sur \* pour gérer toutes les requêtes avec un routage Django interne
  • Module : réglez-le sur FastCgiModule pour utiliser le module FastCGI d'IIS
  • Exécutable : ici, le chemin python.exe et ses arguments de ligne de commande doivent être définis, en utilisant le caractère pipe ( | ) comme séparateur. Un exemple de valeur pour ce paramètre est : C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings . Notez que vous devez spécifier la commande fcgi pour le script manage.py et définir manuellement le chemin de recherche de l'interpréteur Python pour le projet, ainsi que le nom du module Python pour le module de configuration du projet.
  • Nom : Vous pouvez définir ce que vous voulez.

Votre boîte de dialogue de configuration devrait ressembler à ceci :

boîte de dialogue de configuration iis

Ensuite, cliquez sur le bouton Demander des restrictions et modifiez l'onglet Mappage . Décochez la case « Invoke handler only if the request is mapped to… » (sinon, IIS aura des problèmes pour mapper ce qu'il pense être des sous-répertoires dans la demande d'URL) :

restrictions de demande

Cliquez sur OK dans la boîte de dialogue d'informations sur le gestionnaire. IIS vous demandera alors de confirmer la création d'une entrée d'application FastCGI correspondante que vous devrez confirmer. Cette entrée sera visible dans la fonction Paramètres FastCGI , accessible à l'écran racine de la console de gestion IIS. L'entrée par défaut créée par IIS lui-même est adéquate, mais il existe certains paramètres facultatifs disponibles dont vous voudrez peut-être tirer parti :

  • Instances maximales : l'approche que nous utilisons pour exécuter les applications FastCGI est un processus unique, un seul thread, ce qui signifie qu'un processus d'interpréteur Python distinct sera lancé pour chaque requête simultanée . Ce paramètre limite le nombre d'instances simultanées de l'application Django.
  • Surveiller les modifications apportées au fichier : par défaut, une fois démarrés, les processus d'application seront actifs jusqu'à ce qu'ils soient arrêtés manuellement ou jusqu'à ce qu'ils traitent les requêtes Instance MaxRequest . En utilisant ce paramètre, IIS surveillera un horodatage d'un fichier arbitraire, et s'il change, il s'arrêtera et rechargera les instances d'application. Ceci est pratique à la fois pour les développeurs et pour les environnements de production, car cela permet de recharger les applications lorsqu'elles sont modifiées. Le "surveiller l'horodatage d'un fichier pour un indicateur de rechargement" est un concept assez étrange sous Windows, mais c'est normal dans les environnements de type Unix, et il a donc été repris ici avec FastCGI.

ajouter l'application FastCGI

Configuration des répertoires de ressources statiques et de médias

Les applications Web modernes utilisent plusieurs fichiers de ressources, tels que CSS, JavaScript et autres, et les applications Django ne font pas exception. Django fournit une fonctionnalité très pratique qui permet aux développeurs d'intégrer les ressources nécessaires dans l'arborescence du répertoire de l'application, mais qui peut être extraite et copiée par Django dans un répertoire statique approprié. Il s'agit essentiellement d'une fonctionnalité contrôlée par le développeur, et les emplacements où Django stockera les fichiers statiques sont contrôlés dans le fichier settings.py du projet. Les projets bien conduits utiliseront un chemin raisonnablement sain pour cela, mais il n'est pas standardisé.

Les applications qui gèrent les fichiers téléchargés les stockent dans un répertoire géré de manière similaire qui, dans Django, est traditionnellement nommé media . Les répertoires static et media doivent être ajoutés à la configuration IIS en tant que répertoires virtuels :

Configuration des répertoires de ressources statiques et de médias

L'étape importante ici consiste à reconfigurer la fonctionnalité Handler Mappings pour chacun des répertoires et à supprimer le gestionnaire Django App, en laissant le gestionnaire StaticFile comme le plus important.

Notez que le répertoire static doit être lisible par IIS (ainsi que tous les autres fichiers et répertoires du projet Django), mais le répertoire media doit également être accessible en écriture par IIS. La configuration finale du site devrait ressembler à ce qui suit :

exemple de configuration de site iis

Remarque sur les bases de données

SQLite fonctionne par défaut sur Windows, comme sur les systèmes de type Unix. La plupart des autres bases de données open source fonctionnent désormais sous Windows, même PostgreSQL, que je recommande. Sur les installations Windows existantes, cependant, il peut être nécessaire de déployer Django avec MS SQL Server. Cela est possible soit en utilisant un pilote de pont ODBC, soit en utilisant un pilote MS SQL natif. En théorie, les deux fonctionnent, mais je ne les ai pas testés. Au moins les paramètres de connexion à la base de données (dans le fichier settings.py du projet) doivent être modifiés pour passer à une nouvelle base de données. La migration des données doit être effectuée manuellement.

Notez que si vous utilisez la base de données SQLite, le fichier de base de données et le répertoire dans lequel il se trouve doivent être accessibles en écriture par IIS.

Dépannage

La configuration décrite a été testée et éprouvée, mais si quelque chose ne va pas, voici quelques étapes de base pour dépanner votre installation de Django pour Windows :

  1. Essayez de démarrer vous-même la ligne de commande FastCGI. Il s'agit de la commande configurée dans les paramètres FastCGI et qui doit correspondre à celle configurée dans les mappages de gestionnaires pour le site.
  2. Installez la fonctionnalité de traçage pour IIS, puis configurez-la pour le site Django dans les règles de traçage des demandes ayant échoué pour tracer tout le contenu ( ), le code d'état « 500 » et la gravité de l'événement « Erreur ». Les traces seront disponibles sous forme de fichiers XML (avec XSLT attaché) dans le répertoire C:\inetpub\logs\FailedReqLogFiles d'IIS (ou un répertoire similaire, selon votre configuration). Vous devez ensuite activer le traçage pour le site Web particulier (ou un répertoire virtuel) dans l'action *Configure->Failed request tracing… .

Conclusion

Pour être sûr, Django est conçu pour un environnement de type Unix, et la manière la plus répandue et la plus prise en charge d'exécuter Django est sur un système Linux (par exemple, avec uwsgi et nginx).

Pourtant, il ne faut pas beaucoup de travail pour faire fonctionner Django sous Windows, comme le montre ce tutoriel. Certaines des étapes décrites peuvent sembler contre-intuitives du point de vue de Windows pur, mais elles sont nécessaires et, heureusement, l'effort consacré à la configuration n'est qu'une seule fois. Une fois configurée, l'application Django devrait alors se comporter de la même manière qu'elle le ferait sur une plate-forme Linux.