Comment déployer une application flasque dans IIS?

est-ce que quelqu'un peut m'aider à obtenir une application de flasque fonctionnant sur IIS 6? J'ai essayé d'utiliser isapi-wsgi, mais lorsque je visite le Répertoire Virtuel adresse j'obtiens une page qui dit "Le module spécifié est introuvable."Existe-il d'autres options?

ci-dessous est le script Python que j'ai écrit pour isapi-wsgi. Le répertoire virtuel a été fait et tout semblait bien dans IIS Manager, mais le site n'a pas fonctionné.

from wof import app
import os

app.secret_key=os.urandom(24)

import isapi_wsgi
def __ExtensionFactory__():
    return isapi_wsgi.ISAPISimpleHandler(app)

if __name__ == '__main__':
    from isapi.install import *
    params = ISAPIParameters()
    sm = [ScriptMapParams(Extension="*", Flags=0)]
    vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
    params.VirtualDirs = [vd]
    HandleCommandLine(params)
25
demandé sur James 2011-02-22 01:46:28

3 réponses

Vue D'Ensemble De Haut Niveau

HTTP - > IIS -> ISAPI - > FastCGI -> WSGI (Flask application)


Étapes De Configuration

Etape 1: Install Required Binaires

  1. Installer Python (2.7 ou 3.x -- j'ai utilisé 3.3)
  2. Installer pip-Win (j'ai utilisé la version 1.6)
  3. Installer pywin32 (j'ai utilisé la version 218)
  4. installez L'extension IIS FastCGI avec fcgisetup 1,5

Etape 2: Installer Les Paquets Binaires Optionnels

j'ai installé pyodbc utiliser l'installateur .exe à partir d' ce site. L'installation à partir de la source (par exemple pip, pour l'installation dans un environnement virtuel) nécessite un compilateur C/C++.

Étape 3: Obtenez une copie de wfastcgi.py

Choisissez une version qui fonctionnera pour vous, de préférence une qui supporte Python 3.3 (j'ai utilisé David Ebon). Vous pouvez vouloir le la "version officielle"de là.

installez le wfastcgi.py script dans C:\Inetpub\wwwroot et assurez-vous que le compte qui servira votre application ("Network Service" par défaut) y a accès en lecture.

Etape 4: Install virtualenv dans le système site-packages

C:\Python33\Scripts\pip.exe install virtualenv

(si vous utilisez Python 3.3 et tout installé dans l'emplacement par défaut)

Étape 5: Installez Votre Flacon Application

  • vous pouvez installer l'application n'importe où sur le système. Vous pouvez l'installer sous C:\Inetpub. Pour ce tutoriel, nous appellerons le dossier racine de votre application install %APPROOT%. (Ne mettez pas de guillemets dans la variable d'environnement.)

  • assurez-vous que le compte qui servira votre application ("Network Service" par défaut) a accès en lecture à tous les fichiers de script. Ce commande:

    cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
    

    donnera à votre répertoire d'application des autorisations suivantes:

    • BUILTIN\Administrateurs: contrôle total de ce dossier, des sous-dossiers et des fichiers
    • PROPRIÉTAIRE CRÉATEUR: total de contrôle pour les sous-dossiers et fichiers uniquement
    • NT AUTHORITY\NETWORK SERVICE: permissions de lecture pour ce dossier, les sous-dossiers, et les fichiers
    • NT AUTHORITY\SYSTEM: contrôle total de ce dossier, des sous-dossiers, et les fichiers
  • ajouter toute configuration locale nécessaire (mon application utilise une locale.fichier cnf qui est ignoré par le système de contrôle de version) -- par exemple URLs de base de données.

  • assurez-vous que votre demande contient un Web.config fichier %APPROOT% -- voir la section ci-dessous pour obtenir des renseignements sur le format du fichier.

Etape 6: Créer un virtualenv pour votre Application

C:\Python33\Scripts\virtualenv.exe --system-site-packages "%APPROOT%\env"

(choisir un nom autre que env si votre application utilise déjà ce répertoire.)

Etape 7: Installez les paquets requis par votre Application sur le virtualenv

cd "%APPROOT%"
env\Scripts\activate
pip install -r Packages

(Mon projet maintient les exigences de spec dans un fichier nommé Packages.)

Étape 8: Créer un site Web ou un répertoire virtuel pour votre Application

Utiliser inetmgr.msc (Démarrer -> Exécuter..., puis entrez inetmgr dans la boîte d'édition et appuyez ENTER) le lancement de l' Internet Information Services (IIS) Manager. Assurez-vous de définir le chemin local pour le noeud (site Web ou Répertoire virtuel) que vous créez vers le dossier racine de votre application Flask. wfastcgi.py utilise le chemin local pour identifier l'application flasque pour traiter les requêtes.

donnez les deux Lire et Script (Exécuter Des Scripts) permissions pour le noeud.

Étape 9: Configurer fcgiext.ini

Ce fichier est situé dans le même répertoire que le fcgiext.dll installé à l'Étape 1 (par défaut, %SYSTEMROOT%\system32\inetsrv).

pour configurer ce fichier, vous avez besoin de plusieurs paramètres:

  • {ID du site}: L'ID numérique du Site que vous pouvez trouver dans le volet détail (à droite) de Internet Information Services (IIS) Manager quand" Sites Web " est sélectionné à partir de l'arbre sur le côté gauche de la fenêtre.
  • {nom de la demande}: le nom de la section dans fcgiext.ini qui fournit les paramètres du gestionnaire FastCGI (ISAPI). Vous choisissez cette valeur -- sélectionnez quelque chose qui représente votre application.
  • {path app}: pour un répertoire virtuel, le chemin D'URL dans le Site web vers le répertoire virtuel à traiter.
  • {approot}: le chemin vers le répertoire racine de votre application.

utilisez ces paramètres pour:

  • Carte le FastCGI demandes à une manipulation de la section:

    • pour tout un Site Web, ajouter *:{site id}={application name}[Types] section.
    • Pour un Répertoire Virtuel, ajouter *:/lm/w3svc/{site id}/root/{path to app}={application name}[Types] section.
  • ajouter une section de manipulation ([{application name}]) avec des paramètres pour cette application (complet référence):

    • ExePath={approot}\env\python.exe
    • Arguments=C:\Inetpub\wwwroot\wfastcgi.py(ou partout où wfastcgi.py le script d'adaptation est installé)
    • EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc. (voir la référence complète pour citer des règles). C'est un bon endroit pour mettre votre wsgi_log environment variable -- assurez-vous que le compte desservant le site ("Service réseau" par défaut) a les permissions d'écriture pour le fichier et (si le fichier n'existe pas) la permission d'ajouter un fichier au contenant répertoire.

Etape 10: Configurer la gestion de FastCGI pour les URLs cibles

en utilisant Internet Information Services (IIS) Manager, sélectionnez "Propriétés"..."à partir du menu contextuel (clic droit) du noeud (site Web ou Répertoire virtuel) à être desservi par votre application Flask et:

  • dans l'onglet "Home Directory" (Site Web) ou dans l'onglet "Virtual Directory" (répertoire virtuel), cliquez "Configuration..." bouton.

  • dans la section" Wildcard application maps", utilisez " Insert..."bouton pour ajouter un mappage de caractères génériques:

    • l'exécutable est L'extension FastCGI DLL installée à L'Étape 1. Son emplacement par défaut est %SYSTEMROOT%\system32\inetsrv\fcgiext.dll.
    • assurez-vous que "Vérifier l'existence du fichier"décoché. Les applications flasque font leur propre routage qui n'a pas nécessairement quelque chose à voir avec les fichiers sur le disque.

Web.config

Ce fichier est (dans cette configuration) lu par wfastcgi.py, by IIS.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <applicationSettings>
        <add key=“PYTHONPATH” value=“”/>
        <add key=“WSGI_HANDLER” value=“module.application”/>
    </applicationSettings>
</configuration>
  • <add> ajouter des variables d'environnement (os.environ en Python).

  • WSGI_HANDLER doit être spécifié -- il dit wfastcgi.py comment localiser L'objet d'application WSGI. Si la valeur se termine par" ()",wfastcgi.py appellera l'objet nommé, s'attendre à ce qu'il renvoie un objet d'application WSGI.

  • PYTHONPATH est traitée spécialement -- wfastcgi.py effectue (environnement) de la variable d'extension (en utilisant le standard de Windows %VAR% notation) sur la valeur de PYTHONPATH, puis divise le résultat par un point-virgule et ajoute les entrées à sys.path avant d'invoquer L'application WSGI. Parce que wfastcgi.py modifie le répertoire courant vers le chemin spécifié comme étant le chemin local du Site web ou du répertoire virtuel avant l'importation du module contenant l'objet application WSGI, y compris une chaîne vide dans le chemin Python, fera en sorte que la recherche inclue votre répertoire D'application Flask comme point de départ. Vous pouvez aussi définir PYTHONPATH dans fcgiext.ini (auquel cas il est inclus dans sys.path par l'interprète, puis de nouveau par wfastcgi.py).

  • WSGI_RESTART_FILE_REGEX donne une expression régulière Python utilisée pour filtrer les notifications de changement de fichier pour les chemins qui devraient déclencher le gestionnaire FastCGI redémarrage du processus. Définissez ceci pour déclencher lorsque les fichiers source ou les fichiers de configuration changent. J'utilise (?i).*\.(py|cnf|config)$.

  • WSGI_LOG peut être définie ici, mais je pense que c'est mieux définie dans fcgiext.ini.


pour IIS 7

certaines choses avec FastCGI ont changé radicalement avec IIS 7. À partir de cette version, FastCGI dispose d'un support directement via IIS et n'est pas configuré via une extension (C'est-à-dire que L'étape 1.4 n'est pas nécessaire et fcgiext.ini ne contrôle pas le comportement FastCGI pour IIS 7+ et il n'est pas nécessaire de le créer/éditer). Au lieu de cela, assurez-vous que CGI activer Internet Information Services Panneau de configuration > Programmes et fonctions > activez ou désactivez les fonctions Windows.

Web.config

IIS 7 est la première version de IIS à lire les paramètres de configuration liés à FastCGI depuis le Web.config fichier. Votre Web.config fichier doit contenir, dans le <configuration> élément <system.webServer> élément contenant un <handlers> élément contenant un <add> élément avec les attributs:

  • chemin: *
  • verbe: *
  • modules:FastCgiModule
  • resourceType: Unspecified
  • requireAccess:Script
  • scriptProcessor: la question délicate

scriptProcessor L'attribut

cet attribut du <add> l'élément doit contenir le chemin complet de L'interpréteur Python .exe le fichier que vous souhaitez utiliser (l'un dans l' Scripts sous-dossier de votre Python virtualenv) suivi d'un | et puis le chemin d'accès complet à l' wfastcgi.py le fichier que vous utilisez. Comme ces chemins dépendent de la configuration de la machine sur laquelle votre application tourne, vous voudrez peut-être que cet attribut soit défini dans le cadre de votre processus de déploiement.

IIS À l'échelle du serveur configurer

  • inetmgr, cliquez sur le nœud du serveur dans l'arborescence, puis sélectionnez FastCGI Settings à partir du volet central. Une liste de paires exécutable/argument apparaîtra.
  • ajouter une entrée pour les chemins complets à votre python.exe et wfastcgi.py vous êtes en utilisant. Les deux devraient être traités de la même manière qu'ils apparaissent dans le <handlers>/<add> dans votre Web.config.
  • assurez-vous de configurer le PYTHONPATH variable d'environnement dans le nouvelle entrée D'application FastCGI pour inclure la racine de votre codebase d'application. L'avis sur l'ajout d'un vide PYTHONPATH, dans le <applicationSettings> de votre Web.config peut ne pas s'appliquer à cette version de IIS.
49
répondu ReWrite 2015-11-10 23:57:12

consultez la page de Django sur le sujet. Ça m'a aidé à mettre en place un projet Django, mais ça ne devrait pas être si différent pour une application flasque.

http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer

3
répondu Joe 2011-03-11 14:24:20

Je n'utilise jamais IIS, mais IIS prend en charge CGI gateway, vous devriez donc pouvoir adapter CGI avec WSGI.

IIS <--> CGI <--> WSGI

pour exécuter un WSGI en tant que script CGI, Vous pouvez utiliser le CGIHandler dans la bibliothèque standard de Python.

0
répondu Fang-Pen Lin 2011-02-27 04:32:33