Saltar al contenido

¿Cómo implemento una aplicación Flask en IIS?

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

  1. Instalar Python (2.7 o 3.x – Usé 3.3)
  2. Instalar pip-Win (usé la versión 1.6)
  3. Instalar pywin32 (usé la versión 218)
  4. 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.
  • 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 el wfastcgi.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.

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 – dice wfastcgi.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 de PYTHONPATH, luego divide el resultado en punto y coma y agrega las entradas a sys.path antes de invocar la aplicación WSGI. Porque wfastcgi.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 en fcgiext.ini (en cuyo caso se incluye en sys.path por el intérprete y luego otra vez por wfastcgi.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 en fcgiext.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 el wfastcgi.py Tu estas usando. Ambos deben darse de la misma forma en que aparecen en el <handlers>/<add> elemento en tu Web.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ío PYTHONPATH entrada en el <applicationSettings> de tu Web.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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *