WSGI en Apache

por Halí - última modificación: Feb 21, 19

Un día, desperté con la necesidad de hacer una API RESTful en Python, tenía que ser en un «servidor» Windows y me puse a investigar.

En esta publicación documentaré como utilizar el módulo WSGI, necesario para alojar una aplicación web escrita en Python.

Prerrequisitos

Instrucciones

Instalamos Python, Apache y Visual C++, una vez hecho esto, podemos comenzar con la instalación y configuración del módulo WSGI.

Para aislar el proyecto podemos utilizar los entornos virtuales de Python: python -m venv env donde env es el folder donde se guardarán los módulos de python y todo lo demás.

Activamos el entorno virtual env\Scripts\activate y una vez dentro vamos a instalar los módulos de python necesarios:

pip install flask mod_wsgi

Nota: Si estás usando el virtual environment que viene con Python 3, la instalación de mod_wsgi producirá un error, así que tendrás que copiar el directorio C:\Python37\libs al directorio env\Scripts.

Si todo ha salido bien, entonces podrás escribir mod_wsgi-express module-config y podrás ver dos líneas: Una para cargar el módulo en Apache (comienza con LoadModule wsgi_module, e incluye la ruta del módulo instalado) y otra que indica la ruta de PythonHome, ignoraremos esa por ahora.

Proseguimos a editar la configuración del servidor de Apache httpd.conf donde agregaremos la línea para cargar el módulo y las siguientes que sirven para la configuración del módulo WSGI:

WSGIScriptAlias [Punto de montaje] "c:/ruta/al/proyecto/archivo.wsgi"
WSGISPythonPath "c:/ruta/al/proyecto/env/lib/site-packages;c:/ruta/al/proyecto"


Ahora bien, si necesitas usar el encabezado Authorization en tu aplicación porque quizás utilices JWT authentication, entonces tienes que cambiar la opción de pasar la autorización a las aplicaciones WSGI, con una línea más:

WSGIPassAuthorization On


Antes de terminar, debemos copiar un archivo: activate_this.py a nuestro directorio env\bin, lo podemos conseguir aquí. Esto servirá para activar nuestro entorno virtual, ahora, agregamos lo siguiente a nuestro archivo WSGI.

import sys

activate_this = 'c:/ruta/al/proyecto/env/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

sys.path.insert(0, "c:/ruta/al/proyecto")

from [Nombre del archivo] import [Nombre de la app] as application


Quedó listo el entorno para una API RESTful, construiremos eso en la siguiente publicación.

Notas

* Necesitas instalar el Visual C++ con el que esté compilado el servidor de Apache que utilizarás. Si utilizas, por ejemplo, Apache Lounge httpd-2.4.38-win64-VC15.zip, necesitas el Visual C++ 15, que puedes encontrar en la página versiones anteriores, en el apartado Redistribuibles y herramientas de compilación con el nombre Microsoft Build Tools 2015 Update 3.