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: File
→ New
→ Project
. En la ventana de diálogo, en
el panel de la izquierda, selecciona Installed
→ Templates
→ Python
→ Web
y
finalmente Flask Web Project
en el panel central. Click Ok
para crear 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.
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
.
Luego hay que hacer click con el botón derecho del mouse en FlaskWebProject1
→ Python 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
.
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
.
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.
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.
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
.
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
.
El segundo paso es la instalación.
Hay que esperar a que descarge Python y otras cosas.
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
.
¿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:
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!
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:
- http://flask.pocoo.org/docs/0.10/deploying/fastcgi/
- http://stackoverflow.com/questions/5072166/how-do-i-deploy-a-flask-application-in-iis
- http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-python-django-web-app-windows-server/
- http://pytools.codeplex.com/wikipage?title=wfastcgi