Solución:
Descripción general de alto nivel
HTTP -> IIS -> ISAPI -> FastCGI -> WSGI (aplicación de matraz)
Pasos de configuración
Paso 1: Instale los binarios requeridos
- Instalar Python (2.7 o 3.x – Usé 3.3)
- Instalar pip-Win (usé la versión 1.6)
- Instalar pywin32 (usé la versión 218)
- Instale la extensión IIS FastCGI con fcgisetup 1.5
Paso 2: instalar paquetes binarios opcionales
lo instalé pyodbc
utilizando el instalador .exe de este sitio. La instalación desde la fuente (por ejemplo, pip, para la instalación en un entorno virtual) requiere un compilador C / C ++.
Paso 3: obtenga una copia de wfastcgi.py
Elija una versión que funcione para usted, preferiblemente una que sea compatible con Python 3.3 (yo usé la de David Ebbo). Es posible que desee la versión “oficial” de aquí.
Instala el wfastcgi.py
guión en C:Inetpubwwwroot
y asegúrese de que la cuenta que servirá a su aplicación (“Servicio de red” por defecto) tenga acceso de lectura.
Paso 4: instalar virtualenv
En los paquetes del sitio del sistema
C:Python33Scriptspip.exe install virtualenv
(si está utilizando Python 3.3 e instaló todo en la ubicación predeterminada)
Paso 5: Instale su aplicación de matraz
-
Puede instalar la aplicación prácticamente en cualquier lugar del sistema. Es posible que desee instalarlo en
C:Inetpub
. Para este tutorial, llamaremos a la carpeta raíz de la instalación de su aplicación.%APPROOT%
. (No ponga comillas en la variable de entorno). -
Asegúrese de que la cuenta que servirá a su aplicación (“Servicio de red” de forma predeterminada) tenga acceso de lectura a todos los archivos de secuencia de comandos. Este comando:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
le dará a su directorio de aplicaciones los siguientes permisos:
- BUILTIN Administrators: control total de esta carpeta, subcarpetas y archivos
- PROPIETARIO DEL CREADOR: Control total solo para subcarpetas y archivos
- NT AUTHORITY NETWORK SERVICE: Leer permisos para esta carpeta, subcarpetas y archivos
- NT AUTHORITY SYSTEM: control total de esta carpeta, subcarpetas y archivos
-
Agregue cualquier configuración local necesaria (mi aplicación usa un archivo local.cnf que es ignorado por el sistema de control de versiones), por ejemplo, las URL de la base de datos.
-
Asegúrese de que su aplicación contenga un
Web.config
presentar en%APPROOT%
– consulte la sección siguiente para obtener información sobre el formato de archivo.
Paso 6: cree un virtualenv para su aplicación
C:Python33Scriptsvirtualenv.exe --system-site-packages "%APPROOT%env"
(Elija un nombre que no sea env
si su aplicación ya usa ese directorio).
Paso 7: instale los paquetes requeridos por su aplicación en virtualenv
cd "%APPROOT%"
envScriptsactivate
pip install -r Packages
(Mi proyecto mantiene las especificaciones de requisitos en un archivo llamado Packages
.)
Paso 8: cree un sitio web o un directorio virtual para su aplicación
Usar inetmgr.msc
(Comienzo -> Correr…, luego ingrese inetmgr
en el cuadro de edición y presione INGRESAR) almorzar Administrador de servicios de información de Internet (IIS). Asegúrese de establecer la ruta local para el nodo (sitio web o directorio virtual) que crea en la carpeta raíz de su aplicación Flask. wfastcgi.py
usa la ruta local para identificar la aplicación Flask para manejar las solicitudes.
Dar ambos Leer y Script (Ejecutar secuencias de comandos) permisos para el nodo.
Paso 9: configurar fcgiext.ini
Este archivo se encuentra en el mismo directorio que el fcgiext.dll
instalado en el Paso 1 (por defecto, %SYSTEMROOT%system32inetsrv
).
Para configurar este archivo, necesita varios parámetros:
- {Identificación del sitio}: el ID numérico del sitio que puede encontrar en el panel de detalles (a la derecha) de Administrador de servicios de información de Internet (IIS) cuando se selecciona “Sitios web” del árbol en el lado izquierdo de la ventana.
-
{Nombre de la aplicación}: el nombre de la sección dentro
fcgiext.ini
que proporciona los parámetros para el controlador FastCGI (ISAPI). Usted elige este valor: seleccione algo que represente su aplicación. - {ruta a la aplicación}: para un directorio virtual, la ruta URL dentro del sitio web al directorio virtual que se manejará.
- {aprobar}: la ruta al directorio raíz de su aplicación.
Utilice esos parámetros para:
-
Asigne las solicitudes FastCGI a una sección de manejo:
- Para un sitio web completo, agregue
*:{site id}={application name}
al[Types]
sección. - Para un directorio virtual, agregue
*:/lm/w3svc/{site id}/root/{path to app}={application name}
al[Types]
sección.
- Para un sitio web completo, agregue
-
Agregue una sección de manejo (
[{application name}]
) con parámetros para esta aplicación (referencia completa):ExePath={approot}envpython.exe
-
Arguments=C:Inetpubwwwrootwfastcgi.py
(o donde sea que elwfastcgi.py
la secuencia de comandos del adaptador está instalada) -
EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc.
(consulte la referencia completa para conocer las reglas de cotización). Este es un buen lugar para configurar su variable de entorno WSGI_LOG; asegúrese de que la cuenta que atiende el sitio (“Servicio de red” de forma predeterminada) tenga permisos de escritura para el archivo y (si el archivo no existe) permiso para agregar un archivo a el directorio contenedor.
Paso 10: Configurar el manejo de FastCGI para las URL de destino
Utilizando Administrador de servicios de información de Internet (IIS), seleccione “Propiedades …” en el menú contextual (clic derecho) del nodo (Sitio web o Directorio virtual) que será atendido por su aplicación Flask y:
-
En la pestaña “Directorio de inicio” (Sitio web) o en la pestaña “Directorio virtual” (Directorio virtual), haga clic en el botón “Configuración …”.
-
En la sección “Mapas de aplicaciones comodín”, use el botón “Insertar …” para agregar un mapa comodín:
- El ejecutable es la extensión DLL FastCGI instalada en el Paso 1. Su ubicación predeterminada es
%SYSTEMROOT%system32inetsrvfcgiext.dll
. - Asegúrese de que “Verificar que el archivo exista” esté desenfrenado. Las aplicaciones de matraces hacen su propio enrutamiento que no necesariamente tiene nada que ver con los archivos en el disco.
- El ejecutable es la extensión DLL FastCGI instalada en el Paso 1. Su ubicación predeterminada es
Web.config
Este archivo es (en esta configuración) leído por wfastcgi.py
, no por IIS.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<applicationSettings>
<add key=“PYTHONPATH” value=“”/>
<add key=“WSGI_HANDLER” value=“module.application”/>
</applicationSettings>
</configuration>
-
<add>
los elementos agregan variables de entorno (os.environ
en Python). -
WSGI_HANDLER
debe ser especificado – dicewfastcgi.py
cómo ubicar el objeto de aplicación WSGI. Si el valor termina en “()”,wfastcgi.py
llamará al objeto nombrado, esperando que devuelva un objeto de aplicación WSGI. -
PYTHONPATH
se maneja especialmente –wfastcgi.py
realiza expansión de variables (de entorno) (utilizando el estándar de Windows%VAR%
notación) sobre el valor dePYTHONPATH
, luego divide el resultado en punto y coma y agrega las entradas asys.path
antes de invocar la aplicación WSGI. Porquewfastcgi.py
cambia el directorio actual a la ruta especificada como la ruta local del sitio web o directorio virtual antes de importar el módulo que contiene el objeto de la aplicación WSGI, incluyendo una cadena vacía en PYTHONPATH hará que la búsqueda incluya el directorio de la aplicación Flask como punto de partida . También puede configurar PYTHONPATH enfcgiext.ini
(en cuyo caso se incluye ensys.path
por el intérprete y luego otra vez porwfastcgi.py
). -
WSGI_RESTART_FILE_REGEX
proporciona una expresión regular de Python que se utiliza para filtrar las notificaciones de cambio de archivo para las rutas que deberían activar los reinicios del proceso del controlador FastCGI. Configúrelo para que se active cuando cambien los archivos de origen o los archivos de configuración. yo suelo(?i).*.(py|cnf|config)$
. -
WSGI_LOG
puede establecerse aquí, pero creo que es mejor establecerlo enfcgiext.ini
.
Para IIS 7
Algunas cosas con FastCGI cambiaron drásticamente con IIS 7. A partir de esta versión, FastCGI tiene soporte directamente a través de IIS y no está configurado a través de una extensión (es decir, el paso 1.4 no es necesario y fcgiext.ini
no controla el comportamiento de FastCGI para IIS 7+ y no es necesario crearlo / editarlo). En su lugar, asegúrese de que CGI está habilitado bajo Servicios de Información de Internet en Panel de control> Programas y características> Activar o desactivar las características de Windows.
Web.config
IIS 7 es la primera versión de IIS que lee los ajustes de configuración relacionados con FastCGI desde el Web.config
expediente. Tu Web.config
El archivo deberá contener, dentro del <configuration>
elemento, un <system.webServer>
elemento que contiene un <handlers>
elemento que contiene un <add>
elemento con los atributos:
- sendero:
*
- verbo:
*
- módulos:
FastCgiModule
- tipo de recurso:
Unspecified
- requireAccess:
Script
- scriptProcessor: el complicado
los scriptProcessor
Atributo
Este atributo del <add>
El elemento debe contener la ruta completa al intérprete de Python. .exe
archivo que desea utilizar (el que está en el Scripts
subcarpeta de su Python virtualenv) seguido de una |
y luego el camino completo al wfastcgi.py
archivo que está utilizando. Como estas rutas dependen de la configuración de la máquina en la que se ejecuta su aplicación, es posible que desee establecer este atributo como parte de su proceso de implementación.
Configuración de todo el servidor IIS
- En
inetmgr
, haga clic en el nodo del servidor en el árbol y luego elija Configuración de FastCGI desde el panel central. Aparecerá una lista de pares de ejecutables / argumentos. - Agregue una entrada para las rutas completas a su
python.exe
y elwfastcgi.py
Tu estas usando. Ambos deben darse de la misma forma en que aparecen en el<handlers>/<add>
elemento en tuWeb.config
. - Asegúrese de configurar el
PYTHONPATH
variable de entorno en la nueva entrada de la aplicación FastCGI para incluir la raíz del código base de su aplicación. El consejo sobre agregar un vacíoPYTHONPATH
entrada en el<applicationSettings>
de tuWeb.config
puede que no se aplique a esta versión de IIS.
Consulte la página de Django sobre el tema. Me ayudó a configurar un proyecto de Django en funcionamiento, pero no debería ser tan diferente para una aplicación Flask.
http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer