Despliegue de aplicaciones Flask con Gunicorn y Supervisor en Linux

Para iniciar, necesitamos una aplicación básica. En lugar de utilizar un proyecto complejo, crearemos un archivo de prueba llamado main.py para validar la configuración del entorno.

El código siguiente define una instacnia de Flask y una ruta simple que devuelve un mensaje de estado:

from flask import Flask, jsonify

# Instancia de la aplicación
web_app = Flask(__name__)

@web_app.route('/status')
def status_check():
    return jsonify({'status': 'active', 'message': 'System operational'})

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

Primero, asegúrate de tener Flask instalado en el servidor mediante pip install flask. Puedes verificar que el código funciona ejecutando python main.py y accediendo a la URL indicada, pero recuerda que este servidor de desarrollo no es adecuado para entornos de producción.

Implementación de Gunicorn como servidor WSGI

El servidor nativo de Flask es monohilo y no está optimizado para manejar múltiples solicitudes concurrentes, lo que puede causar cuellos de botella o fallos bajo carga alta. Para solucionar esto, utilizamos Gunicorn (Green Unicorn), un servidor HTTP WSGI para Python.

Instala Gunicorn con el gestor de paquetes:

pip install gunicorn

Una vez instalado, inicia la aplicación definiendo el número de trabajadores (workers) y la dirección de enlace. Detén el proceso anterior (Ctrl+C) y ejecuta:

gunicorn -w 4 -b 0.0.0.0:8000 main:web_app

Aquí, -w 4 asigna cuatro procesos trabajadores y main:web_app indica a Gunicorn que busque la instancia web_app dentro del archivo main.py.

Gestión de procesos con Supervisor

Para garantizar que el servicio se inicie automáticamente al arrnacar el sistema y se reinicie si falla, configuraremos Supervisor.

Actualiza los repositorios e instala la herramienta:

sudo apt update
sudo apt-get install supervisor

Configuración del servicio

El archivo principal de configuración se encuentra en /etc/supervisor/supervisord.conf. Asegúrate de que la sección [include] esté descomentada y apunte al directorio de configuraciones adicionales:

[include]
files = /etc/supervisor/conf.d/*.conf

A continuación, crea un archivo de configuración específico para tu aplicación Flask dentro de /etc/supervisor/conf.d/. Llamaremos a este archivo flask_service.conf:

[program:flask_app]
command=/usr/local/bin/gunicorn -w 3 -b 127.0.0.1:8000 main:web_app
directory=/opt/mi_proyecto_flask
autostart=true
autorestart=true
stderr_logfile=/var/log/flask_app_err.log
stdout_logfile=/var/log/flask_app_std.log
user=www-data

Es importante especificar la ruta completa al ejecutable de Gunicorn (command) y el directorio de trabajo correcto (directory) para evitar problemas de rutas relativas.

Inicio y verificación del demonio

Aplica la configuración iniciando el demonio de Supervisor:

sudo supervisord -c /etc/supervisor/supervisord.conf

Si encuentras un error relacionado con un archivo socket existente (supervisor.sock), elimínalo manualmente:

sudo unlink /var/run/supervisor.sock

Luego, reintenta el comando de inicio. Con esto, tu aplicación Flask estará ejecutándose en segundo plano, gestionada por Supervisor y servida eficientemente por Gunicorn.

Etiquetas: Flask Gunicorn Supervisor WSGI linux

Publicado el 9-13 02:04