Hola mundo de Flask en IIS 8.5 (Windows 10)

Published: Jan 19, 2015 by Noe Nieto

Intro

Tuve el chance de probar Flask y echarlo a funcionar en IIS 8.5.

Instalar Visual Studio (VS) y Python Tools for Visual Studio

Cuando escribi este artículo, la última version disponible era Visual Studio 2013 (VS) edición community. Lo descargué de http://www.visualstudio.com/

Despues de instalar VS se instala el add-on Python Tools for Visual Studio (PTVS).

PTVS trae algunas plantillas de proyectos bastante utiles. Una de ellas es la plantilla para un sitio bassado en Flask.

Abre VS y selecciona: FileNewProject. En la ventana de diálogo, en el panel de la izquierda, selecciona InstalledTemplatesPythonWeb y finalmente Flask Web Project en el panel central. Click Ok para crear el proyecto.

Nuevo proyecto Flask - Click en OK para guardar el proyecto

Instalar Python

Para poder probar el sitio Flask es necesario un interprete de Python. Obviamente Windows no trae uno y hay que instalarlo desde la web de Python www.python.org.

Instalador de PythonNext, Next, Next ... zzz

Instalar Python en windows es bastante sencillo. Hay que bajar el instalador, abrirlo y pulsar el boton Next del asistente hasta que tengamos la confirmación de que la instalación ha concluido. La version instalada es Python 3.4.2 de 32 bits

Configurar el entorno virtual

La mejor manera de configurar el entorno virtual es mediante Solution Explorer.

Nuevo entorno virtual. Seleccionar Add Virtual Environment

Luego hay que hacer click con el botón derecho del mouse en FlaskWebProject1Python Environments y seleccionar la opción Add Virtual Environment. En la ventana de diálogo rellena los campos con los siguientes valores:

  • Location of the virtual environment: Flask
  • Select an interpreter: Python 3.4
  • Download and install packages: Activado

Luego solo falta picar en el botón Create.

Solo falta picar en el botón Create

Tras bambalinas VS (bueno, en realidad es PTVS) creará el entorno virtual y lo activará (lo que equivale al mkvirtualenv en Linux/Unix/Mac) y después instalará todas las dependencias listadas en requirements.txt, lo cual equivale al comando pip install -r requirements.txt. Al terminar este proceso verás que el entorno virtual llamado Flask ya se encuentra listado en Solution Explorer.

Virtualenv Activado

Probando Flask en modo depuración

En VS solo será necesario hacer click en el botón de debug para arrancar el pequeño servidor integrado de Flask.

Botón para arrancar Flask en modo debug

VS lanzará un intérprete de python (para ser exactos: el Python.exe del entorno virtual Flask), correrá runserver.py y cuando termine de arrancar abrirá una ventana de Firefox (en mi caso) para que cargue el sitio.

Y aquí esta la prueba: Flask corriendo en windoge

Ahora que corra en IIS

En un articulo anterior describí cómo instalar IIS 8.5 en Windoze 10. Ahora voy a describir cómo instalar la aplicación de Flask en IIS. Primero hay que instalar el Web platform installer. Este se descarga desde http://www.microsoft.com/web/downloads/platform.aspx. El proceso de instalación es bastante similar a cualquier otro software.

Ya instalado el Web Platform Installer hay que abrirlo e Instalar WFastCGI Gateway for IIS and Python.

Buscar `Python` en el Web Platform Installed

Seleccioné WFastCGI 2.1 Gateway for IIS and Python 3.4 y le piqué al botón Add. Con eso se habilitó el botón Install (en la esquina inferior derecha). Al picarle al botón se abrió una ventana modal con pasos. En el primer paso se informa de los prerequisitos. Yo le piqué en I Accept.

I accept

El segundo paso es la instalación.

Proceso

Hay que esperar a que descarge Python y otras cosas.

Asi termina

Nota: Parece que el Web Installer detectó que existía una instalación de Python 3, pero no estoy seguro. Pero de lo que si estoy seguro es de que instaló un script (wfastcgi.py) en C:\Python34\Scripts. wfastcgi.py.

El script de WFastCGI

¿Y qué es FastCGI? Es CGI pero con algunas extensiones. El script wfastcgi.py es una pasarela entre FastCGI de IIS y el protocolo WSGI en las aplicaciones python.

Instalar fastcgi en IIS

En lugar de copiar y pegar los comandos con Package Manager intentare inovar un poquito y use DSIM en su lugar, ya que parece que es la mas nueva tecnología para agregar características a un Windows.

Por ejemplo, p[ara ver el status del modulo IIS-CGI:

Dism /online /Get-FeatureInfo /FeatureName:IIS-CGI

Y sale esto:

Usando dism para saber el estatus de una caracteristica de windoge

El comando para instalar el CGI de IIS es:

Dism /online /Enable-Feature /FeatureName:IIS-CGI

Ahora comienzo a pensar que me pude ahorrar tantos screenshots del proceso de instalación y hacerlo desde la línea de comandos. pff!

Instalacion de Caracteristica IIS-CGI

Ahemmm… De regreso a lo que estaba haciendo …

Ahora es momento de usar appcmd para configurar todo el pipeline de FastCGI mediante python en IIS. Por comodidad primero cambiamos el directorio para no tener que excribir toda la ruta a appcmd.exe.

cd c:\Windows\System32\inetsrv\

Registrar el manejador de FastCGI a nivel servidor.

appcmd set config /section:system.webServer/fastCGI "/+[fullPath='C:\Python34\python.exe', arguments='C:\Python34\Scripts\wfastcgi.py']"

Nota: Si te sale un error muy feo como el de abajo significa que ya estaba configurado.

ERROR ( message:New application object missing required attributes. Cannot add duplicate collection entry of type 'application' with combined key attributes 'fullPath, arguments' respectively set to 'C:\Python34\python.exe, C:\Python34\Scripts\wfastcgi.py' )

Ahora es momento de registrar/activar el modulo FastCGI

appcmd set config /section:system.webServer/handlers "/+[name='Python_via_FastCGI',path='*',verb='*',modules='FastCgiModule',scriptProcessor='c:\Python34\python.exe|C:\Python34\Scripts\wfastcgi.py',resourceType='Unspecified']"

Configua el Python path para que use Flask

appcmd set config -section:system.webServer/fastCgi /+"[fullPath='C:\Python34\python.exe', arguments='C:\Python34\Scripts\wfastcgi.py'].environmentVariables.[name='PYTHONPATH',value='C:\inetpub\apps\Flask']" /commit:apphost

Ahora hay que decirle al modulo de fastCGI el handler de WSGI


Referencias:

Share