Cómo instalar Flask con Nginx y Gunicorn en Rocky Linux

Flask es un microframework escrito en Python para desarrollar aplicaciones web modernas y API (Interfaz de Programación de Aplicaciones). Está basado en el conjunto de herramientas Werkzeug y la plantilla Jinja2. En lugar de utilizar una arquitectura compleja, Flask es un pequeño marco web que facilita la extensión del núcleo y es fácil de aprender porque Flask tiene menos código. Flask no incluye el ORM, pero sigue teniendo características interesantes como el enrutamiento de URL y un motor de plantillas.

Gunicorn o «Unicornio Verde» es un Servidor HTTP WSGI con modo pre-fork worker. Es una adaptación del proyecto Unicornio de Ruby. Gunicorn puede emparejarse con varios frameworks web, consume pocos recursos del servidor y es rápido. Gunicorn se interpone entre tu aplicación y el servidor web, por lo que puedes emparejar Gunicorn con un servidor web como Nginx y Apache2.

En este tutorial, mostraremos cómo instalar y configurar el Flask Python Web Framework con Gunicorn y Nginx en el servidor Linux Rocky. También aprenderás a configurar Supervisord como gestor de procesos para administrar la aplicación Python Flask.

Requisitos previos

Para completar este tutorial, necesitarás disponer de algunos de los siguientes requisitos:

  • Un servidor Rocky Linux – Puedes utilizar tanto Rocky Linux v8 como v9 – Escritorio o Servidor.
  • Un usuario no root con privilegios de administrador root sudo.
  • Un nombre de dominio ficticio para el desarrollo local.

Instalación de dependencias

En el primer paso, instalarás algunas dependencias de paquetes que se utilizarán para instalar y desplegar Flask Web Framework. Esto incluye, por ejemplo, Python Pip, Nginx y Supervisord.

Todas estas dependencias de paquetes están disponibles en el repositorio Rocky Linux, puedes instalarlas fácilmente mediante el comando DNF.

En primer lugar, asegúrate de que el repositorio EPEL está instalado en tu sistema. o puedes simplemente instalarlo y activarlo mediante el comando dnf que aparece a continuación.

sudo dnf install epel-release

Ahora, instala algunos paquetes python ‘python3-pip‘ y ‘python3-devel‘ y el compilador GCC mediante el comando dnf que aparece a continuación. Estos paquetes se utilizarán para instalar los paquetes de Python.

sudo dnf install python3-pip python3-devel gcc

Cuando se te pida que confirmes la instalación, introduce y y pulsa ENTER para continuar.

instalar pip y gcc

A continuación, ejecuta otro comando dnf para instalar el servidor web Nginx y los paquetes supervisord. El Nginx aquí se utilizará como proxy inverso para tu proyecto Flask, y el supervisord se utilizará para gestionar el proceso de tu aplicación Flask.

sudo dnf install nginx supervisor

Introduce y y pulsa ENTER para confirmar la instalación.

instalar nginx supervisord

Ahora, inicia y habilita el servicio Nginx mediante el siguiente comando systemctl. A continuación, verifica el servicio Nginx para asegurarte de que se está ejecutando.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Verás una salida como la siguiente – El servicio Nginx está habilitado y se ejecutará automáticamente al arrancar el sistema. Y el estado del servicio Nginx es en ejecución.

comprobar nginx

Y para el servicio supervisord, ejecuta el siguiente comando para iniciarlo y habilitarlo. A continuación, comprueba el estado del servicio supervisord para asegurarte de que se está ejecutando.

sudo systemctl start supervisord
sudo systemctl enable supervisord
sudo systemctl status supervisord

Verás que el servicio supervisord está habilitado y se ejecutará automáticamente al iniciarse. Y el estado del servicio supervisord es en ejecución.

comprobar supervisor

Configurar el usuario

Después de instalar las dependencias de los paquetes, ahora vas a configurar un nuevo usuario que se utilizará para ejecutar el proyecto Flask.

Ejecuta el siguiente comando para crear un nuevo usuario y configurar la contraseña. En este ejemplo, crearás el nuevo usuario alice.

Cuando se te pida que crees una nueva contraseña, introduce tu contraseña y repite.

sudo useradd -m -s /bin/bash alice
sudo passwd alice

Ahora, ejecuta el siguiente comando para añadir al usuario alice al grupo‘wheel‘ para que el usuario pueda ejecutar el comando sudo.

sudo usermod -aG wheel alice

Por último, inicia sesión con el nuevo usuario y ejecuta el comando ‘sudo’ para verificar los privilegios de root. Introduce tu contraseña cuando se te solicite.

su - alice
sudo su

Deberías ver el intérprete de comandos raíz de tu máquina Rocky Linux.

configurar usuario

Configurar el Entorno Virtual Python

En este paso, configurarás el entorno virtual de Python para el framework web Flask.

Inicia sesión como tu usuario utilizando el siguiente comando.

su - alice

Crea un nuevo directorio de instalación de Flask‘/var/www/myflask ‘ utilizando el siguiente comando mkdir.

sudo mkdir -p /var/www/myflask

Cambia la propiedad y el permiso del directorio de instalación de Flask utilizando el siguiente comando. La propiedad debe estar bajo el usuario alice con permiso 755.

sudo chown -R alice:alice /var/www/myflask
sudo chmod 755 /var/www/myflask

Ahora, mueve tu directorio de trabajo al directorio de instalación de Flask ‘/var/www/myflask‘ y crea un nuevo entorno virtual Python mediante el siguiente comando python.

cd /var/www/myflask
python3 -m venv myenv

Verás que se crea un nuevo directorio‘myenv‘.

A continuación, activa el entorno virtual Python mediante el siguiente comando. Si se activa, verás que el formato del prompt cambia a como ‘(mienv alice@nombrehost‘.

source myenv/bin/activate

configurar entorno virtual python

Para desactivar el entorno virtual, debes ejecutar el siguiente comando.

deactivate

Instalar Flask y Gunicorn

Antes de instalar Flask, asegúrate de que estás en el entorno virtual. o simplemente puedes ejecutar el siguiente comando para iniciar sesión.

su - alice
cd /var/www/myflask
source myenv/bin/activate

Ahora, instala Flask y Gunicorn mediante el siguiente comando pip. Esto instalará Flask y Gunicorn en el entorno virtual, no en todo el sistema.

pip3 install flask gunicorn

instalar matraz gunicorn

Una vez instalados Flask y Gunciron, estás listo para crear la primera aplicación utilizando Flask Web Framework.

Crear la primera aplicación Flask

Antes de empezar a crear una aplicación Flask, asegúrate de que estás en tu entorno virtual Python.

Crea un nuevo archivo Python‘myflask.py‘ utilizando tu editor preferido. En este ejemplo, utilizaremos el editor nano.

nano myflask.py

Ahora añade el siguiente script al archivo.

# myflask.py
from flask import Flask, render_template  # importing the render_template function
app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
return render_template('index.html')

if __name__ == "__main__":
app.run(host='0.0.0.0')

Guarda el archivo y sal del editor cuando hayas terminado.

crear aplicación flask

A continuación, crea un nuevo directorio‘templates‘ para tus archivos estáticos y crea un nuevo archivo index. html sobre él.

mkdir -p templates
nano templates/index.html

Añade el siguiente script HTML al archivo.

<html>
    <body>
        <h1><center>Hello Flask - Rocky Linux!</center></h1>
    </body>
</html>

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora ejecuta el script Python Flask ‘myflask.py’ utilizando el siguiente comando. Esto ejecutará tu aplicación Flask en modo desarrollo, ejecutando la dirección IP del servidor con el puerto por defecto 5000.

python3 myflask.py

A continuación se muestra una salida similar a la que obtendrás.

botella para correr

A continuación, abre otro terminal y ejecuta el siguiente comando curl para acceder a tu aplicación Flask. Verás el script del archivo ‘index.html’ que has creado.

curl localhost:5000

frasco de control

Ahora pulsa‘Ctrl+c’ para terminar tu aplicación Flask.

Configurar Gunicorn y Supervisord

En este paso, configurarás tu aplicación Flask con Gunicorn y Supervisord. Esto te permitirá ejecutar y gestionar tu aplicación Python de forma manejable y controlable a través del proceso Supervisord.

Crea un nuevo archivo Python‘uwsgi.py‘ dentro del mismo directorio de tu aplicación Flask. En este ejemplo, el directorio debe ser‘/var/www/myflask‘.

nano wsgi.py

Añade el siguiente script Python al archivo.

# import myflask Flask application
from myflask import app

if __name__ == «__main__»:
app.run(debug=True)

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora, ejecuta el siguiente comando gunicorn para iniciar la aplicación Flask y verificar las configuraciones de Gunicorn. La aplicación debería ejecutarse ahora bajo el Gunicron con el puerto 8000.

gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app

A continuación se muestra la salida del comando gunicorn.

petaca y gubicornio

A continuación, abre tu navegador web y visita la dirección IP del servidor seguida del puerto 8000 (es decir: http://192.168.5.100:8000/). Deberías ver la página index.html de tu aplicación Flask.

verificar frasco

En este punto, tu aplicación Flask se está ejecutando con Gunicorn sin ningún error. Ahora puedes volver a tu terminal y pulsar‘Ctrl+c‘ para terminar el proceso gunicorn y empezar a configurar el gestor de procesos Supervisord.

Crea un nuevo archivo de configuración INI de Supervisord para la aplicación Flask ‘/etc/supervisord.d/flaskapp.ini ‘ mediante el siguiente comando nano. La configuración debe almacenarse en el directorio‘/etc/supervisord.d‘.

sudo nano /etc/supervisord.d/flaskapp.ini

Añade la siguiente configuración al archivo. Y asegúrate de cambiar la ruta de los detalles de tus aplicaciones, el usuario y el grupo, y la ruta del registro.

Con esta configuración, tu aplicación Flask se ejecutará bajo el socket UNIX que creará Gunicorn. Este socket unix también se utilizará para interactuar con el proxy inverso Nginx.

[program:myflask] 
command=/bin/bash -c 'source /var/www/myflask/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myflask/ipc.sock wsgi:app'
directory=/var/www/myflask
user=alice
group=www-data
autostart=true 
autorestart=true 
stdout_logfile=/var/www/myflask/myflask.log 
stderr_logfile=/var/www/myflask/error.log

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora, ejecuta el siguiente comando systemctl para reiniciar el servicio Supervisord y aplicar los nuevos cambios. A continuación, comprueba el estado de Supervisord y asegúrate de que el servicio se está ejecutando.

sudo systemctl restart supervisord
sudo systemctl status supervisord

En la siguiente captura de pantalla, puedes ver que Supervisord se está ejecutando con una nueva configuración adicional para la aplicación Flask.

matraz y supervisord

Por último, ahora puedes verificar el proceso de tu aplicación Flask mediante el siguiente comando supervisorctl. Deberías ver que hay un proceso llamado myflask con el estado OK.

sudo supervisorctl status

Configurar el Proxy Inverso Nginx

En este paso, aprenderás a configurar Nginx como proxy inverso para la aplicación Flask que se ejecuta bajo el gestor de procesos Supervisord. Crearás un nuevo bloque de servidor Nginx para el proxy inverso y utilizarás el nombre de dominio local para la aplicación Flask.

Crea una nueva configuración de bloque de servidor Nginx ‘/etc/nginx/conf.d/flaskapp.conf‘ utilizando el siguiente editor nano.

sudo nano /etc/nginx/conf.d/flaskapp.conf

Añade la siguiente configuración al archivo. Y asegúrate de cambiar el nombre de dominio www.myflask.local por tu dominio de desarrollo local.

server {
    listen 80;
    server_name www.myflask.local;
location / {
include uwsgi_params;
proxy_pass http://unix:/var/www/myflask/ipc.sock;
}
}

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, verifica la configuración de Nginx para asegurarte de que tienes la configuración correcta. A continuación, reinicia el servicio Nginx para aplicar los nuevos cambios.

sudo nginx -t
sudo systemctl restart nginx

En este punto, tu aplicación Flask es ahora accesible a través del proxy inverso Nginx que se ejecuta en el puerto HTTP por defecto.

configurar proxy inverso nginx

Ahora, en tu máquina local, edita el archivo /etc/hosts utilizando el editor nano.

sudo nano /etc/hosts

Define la dirección IP de la máquina Ubuntu con el nombre de dominio «www.myflask.local» como se indica a continuación.

192.168.5.28 www.myflask.local

Guarda y cierra el archivo.

Ahora abre tu navegador web e introduce el nombre de dominio del proyecto Flask (es decir, http://www.myflask.local) en la barra de direcciones. Y deberías obtener la página índice de tu proyecto Python Flask.

aplicación flask con proxy inverso nginx

Conclusión

¡Enhorabuena! Has instalado con éxito el framework web Python Flask con Gunicorn y Nginx en el servidor Linux Rocky. También has aprendido a crear el primer proyecto Python Flask, a configurar un entorno virtual Python y a configurar la gestión de procesos Supervisord para el proyecto Flask.

Scroll al inicio