GeneralLinuxProgramaciónServidoresTecnologíaWeb

Como funciona el modulo «mod_wsgi-express» en debian?

El módulo mod_wsgi es un servidor WSGI integrado con el servidor Apache httpd. Permite que aplicaciones web escritas en Python se ejecuten directamente en el servidor web Apache, en lugar de utilizar un servidor de aplicaciones independiente como Gunicorn o uWSGI. Esto simplifica la configuración y administración del servidor y mejora el rendimiento.

Comencemos por hablar de Linux, específicamente la distribución Debian, y el servidor web Apache.

Distribución Debian:

Debian es una de las distribuciones más antiguas y populares del sistema operativo Linux. Fue creada en 1993 por Ian Murdock y se caracteriza por su estabilidad, seguridad y su enfoque en el software libre. La comunidad de Debian está comprometida con los principios del software libre y se rige por el Contrato Social de Debian, que establece los valores y las reglas de la distribución.

Características clave de Debian:

  1. Software Libre: Debian se adhiere estrictamente a la definición de software libre de la Free Software Foundation (FSF). Esto significa que solo incluye software que cumple con los criterios de libertad del usuario.
  2. Ciclo de lanzamiento estable: Debian tiene un ciclo de lanzamiento estable y conservador. Cada versión estable se somete a una rigurosa prueba antes de su lanzamiento y es conocida por ser muy confiable.
  3. Gestor de paquetes APT: Debian utiliza Advanced Package Tool (APT) como su gestor de paquetes. APT facilita la instalación, actualización y eliminación de software en el sistema.
  4. Diversas arquitecturas: Debian se desarrolla para múltiples arquitecturas, lo que le permite ejecutarse en una amplia variedad de sistemas, desde computadoras personales hasta servidores y dispositivos embebidos.
  5. Gran comunidad: Debian tiene una comunidad activa y comprometida que contribuye al desarrollo, mantenimiento y soporte de la distribución.

Más información y opciones de descarga puedes encontrar en este link.

Servidor web Apache:

Apache HTTP Server, comúnmente conocido como Apache, es el servidor web más utilizado en el mundo. Es un proyecto de código abierto desarrollado y mantenido por la Apache Software Foundation.

Características clave de Apache:

  1. Código abierto y gratuito: Apache es software de código abierto y se distribuye de forma gratuita. Esto ha contribuido en gran medida a su popularidad y amplia adopción.
  2. Multiplataforma: Apache se ejecuta en diversas plataformas, incluyendo Linux, Windows, macOS y más, lo que lo hace versátil y accesible en diferentes sistemas.
  3. Módulos y extensiones: Apache es altamente modular y admite una amplia variedad de módulos y extensiones que permiten agregar funcionalidades específicas al servidor web, como soporte para lenguajes de programación como PHP, Python, entre otros.
  4. Seguridad: Apache ha demostrado ser un servidor web seguro, siempre y cuando se configure y mantenga adecuadamente. La comunidad y los desarrolladores están comprometidos en mantenerlo actualizado y protegido contra vulnerabilidades conocidas.
  5. Rendimiento: Apache es conocido por su buen rendimiento y la capacidad de manejar una gran cantidad de solicitudes simultáneas. Sin embargo, como con cualquier servidor web, el rendimiento depende en gran medida de la configuración y el hardware subyacente.

Tanto Debian como Apache son piezas fundamentales en la infraestructura de muchos servidores en todo el mundo debido a su estabilidad, seguridad y flexibilidad. Juntos, pueden formar una combinación poderosa para alojar sitios web y aplicaciones en línea.

Más información y opciones de descarga puedes encontrar en este link.

Conociendo mod_wsgi

El paquete mod_wsgi implementa un módulo de Apache fácil de usar que puede alojar cualquier aplicación web de Python que admita la especificación WSGI de Python . El paquete se puede instalar de dos maneras diferentes según sus requisitos.

El primero es como un módulo de Apache tradicional instalado en una instalación de Apache existente. Siguiendo esta ruta, deberá configurar manualmente Apache para cargar mod_wsgi y pasar solicitudes web a su aplicación WSGI.

La segunda forma de instalar mod_wsgi es instalarlo desde PyPI usando el pipcomando Python. Esto compila e instala mod_wsgi en su instalación de Python o entorno virtual. El programa mod_wsgi-expressestará entonces disponible, permitiéndole ejecutar Apache con mod_wsgi desde la línea de comandos con una configuración generada automáticamente. Este enfoque no requiere que usted mismo realice ninguna configuración de Apache.

La documentación complñeta la puedes encontrar aquí.

Para instalar «mod_wsgi» en Debian, puedes utilizar el administrador de paquetes apt. Solo necesitas ejecutar el siguiente comando:

sudo apt update
sudo apt install libapache2-mod-wsgi

Una vez instalado, puedes habilitar el módulo con el siguiente comando:

sudo a2enmod wsgi

La mayoría, si no todos, los frameworks web de Python son compatibles con WSGI, incluidos Flask y Django ; pero para probar rápidamente si tiene la configuración de Apache correcta, escribiremos una aplicación WSGI muy básica.

A continuación, debe configurar Apache para gestionar las solicitudes mediante el módulo WSGI. Para ello, edite el archivo /etc/apache2/sites-enabled/000-default.conf. Este archivo le dice a Apache cómo responder a las solicitudes, dónde encontrar los archivos para un sitio en particular y mucho más. Puede leer todo lo que este archivo puede hacer en la documentación de Apache .

Por ahora, agregue la siguiente línea al final del bloque de etiquetas <VirtualHost *:80>, justo antes de la línea de cierre </VirtualHost>:

WSGIScriptAlias / /var/www/html/myapp.wsgi

Finalmente, reinicie Apache con el  comando:

sudo apache2ctl restart

Configurar el archivo .wsgi:

Crea un archivo .wsgi que contendrá la aplicación Python que deseas ejecutar en Apache. Puedes crear este archivo en cualquier ubicación de tu sistema. Por ejemplo, supongamos que tienes una aplicación llamada my_app.py. Crea el archivo my_app.wsgi con el siguiente contenido:

import sys
sys.path.insert(0, '/ruta/a/la/carpeta/de/tu/aplicacion')

from my_app import app as application

Asegúrate de reemplazar /ruta/a/la/carpeta/de/tu/aplicacion con la ruta real a la carpeta donde se encuentra tu aplicación.

Alternatiavamente, puedes crear tu propio código python para que se ejecute al cargar la aplicación, por ejemplo dar una salida directamente a pantalla de un texto, en este caso «Hello David».

Una vez hecho esto verificamos que lau aplicación WSGI está funcionando correctamente y que puedes ver el mensaje «Hello David!» en la pantalla. Eso significa que el módulo WSGI de Apache está manejando adecuadamente las solicitudes y ejecutando tu aplicación Python.

mod_wsgi-express

Como indicamos anteriormente la segunda forma de instalar mod_wsgi es instalarlo desde PyPI usando el comando pip de Python. Esto compila e instala mod_wsgi en su instalación de Python o entorno virtual. El programa mod_wsgi-express estará entonces disponible, permitiéndole ejecutar Apache con mod_wsgi desde la línea de comandos con una configuración generada automáticamente. 

A continuación, te explico cómo funciona el módulo «mod_wsgi-express» en Debian. Crea un entorno virtual (virtualenv), instala tu aplicación, por ejemplo Flask y luego instala mod_wsgi.:

cd hello-app
python -m venv .venv
source venv/bin/activate
pip install Flask
pip install mod_wsgi

Creación de la aplicación «Hello World»

Crea un archivo Python en el directorio principal de tu entorno virtual. Puedes llamarlo, por ejemplo, «hello.py». Abre el archivo con tu editor de código favorito y agrega el siguiente código:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

Guarda el archivo «hello.py» y vuelve a la terminal. Navega hasta el directorio donde se encuentra el archivo y ejecuta la aplicación con el siguiente comando:

python hello.py

Verás que el servidor Flask se iniciará y escuchará en el puerto 5000 de forma predeterminada. Si todo está configurado correctamente, deberías ver un mensaje que indica que el servidor está en funcionamiento.

Ejecutando mod_wsgi-express

El único argumento de mod_wsgi-express especifica un script que contiene tu aplicación Flask, que debe llamarse application. Puedes escribir un pequeño script para importar tu aplicación con este nombre.

from hello import app

application = app

Ahora ejecute el comando:

mod_wsgi-express start-server app.wsgi

Veras información detallada sobre la aplicación, por ejemplo que esta visible en la URL http://localhost:8000, así como las URLs de archvos de configuración y errores.

Finalmente como indicamos, la aplicación estará visible en la URL http://localhost:800.

En una siguiente entrega detallaremos como correr la aplicación de Python sobre Debian de forma persistente creando un servicio que se inicie automáticamente junto con el sistema operativo y el entorno virtual.

Deja una respuesta

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