Cómo instalar Flask con Nginx y Gunicorn en Ubuntu 22.04
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 cuyo núcleo es fácil de extender y 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 el 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 post, te mostraremos cómo instalar y configurar el Framework Web Python Flask con Gunicorn y Nginx en el sistema Ubuntu 22.04. Este tutorial también cubre cómo configurar Python Flask con Gunicorn y Supervisord.
Requisitos previos
Para esta guía, necesitarás los siguientes requisitos previos:
- Un sistema Ubuntu 22.04 – Puedes utilizar Ubuntu 22.04 Desktop o Server.
- Un usuario root – o un usuario no root.
Configurar un nuevo usuario
En el primer paso, configurarás un nuevo usuario para el entorno de desarrollo del framework web Python Flask. Puedes saltarte este paso si ya tienes un usuario no root con privilegios root/sudo. Este usuario se utilizará para ejecutar la aplicación Python Flask.
En este ejemplo, crearás un nuevo usuario con el nombre«james«. Ejecuta el siguiente comando para crear un nuevo usuario «james» y establece la contraseña para el usuario «james». Asegúrate de utilizar una contraseña segura.
sudo useradd -m -s /bin/bash james sudo passwd james
A continuación, añade el usuario «james» al grupo«sudo» utilizando el siguiente comando. Esto permitirá al nuevo usuario«james» ejecutar el comando«sudo su» y obtener los privilegios de administrador root, necesarios para instalar paquetes y establecer configuraciones del sistema.
sudo usermod -aG sudo james
Por último, comprueba y verifica el nuevo usuario iniciando sesión como el usuario «james» y ejecutando el comando «sudo su» para obtener los privilegios de root. Introduce la contraseña del usuario «james» y obtendrás el shell de root. El shell actual cambiará de«james@hostname» a«root@hostname«.
su - james sudo su
Ahora pulsa «Ctrl+d» o escribe«exit» para volver al usuario no root «james».
Instalar dependencias de paquetes
Ahora vas a instalar algunas dependencias de paquetes para la instalación de Python Flask, esto incluye«python3-pip» y«python3-venv«. Al final, también instalarás el servidor web Nginx y el supervisor.
Antes de empezar a instalar los paquetes, ejecuta el siguiente comando apt para actualizar y refrescar tu repositorio de paquetes.
sudo apt update
Ahora instala python3-pip y python3-venv utilizando el siguiente comando. El python3-pip se utilizará como gestor de paquetes para los paquetes de Python, y el python3-venv se utilizará para crear un entorno virtual para el desarrollo de la aplicación Flask.
sudo apt install python3-pip python3-venv
Introduce Y para confirmar la instalación y pulsa ENTER para continuar. Comenzará la instalación.
Una vez finalizada la instalación, ejecuta el siguiente comando para configurar el Python por defecto en tu sistema Ubuntu.
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
Ahora verifica la versión de Python y Pip, y comprueba también el módulo venv de Python ejecutando los siguientes comandos. En el siguiente ejemplo, instalarás el framework web Python Flask con Python 3.10.
python --version pip --version python -m venv -h
A continuación, ejecuta el siguiente comando apt para instalar el servidor web Nginx y el paquete supervisor. El servidor web Nginx se utilizará como servidor web por defecto para el framework web Python Flask, y el supervisor se utilizará para controlar la aplicación Flask, como iniciar y detener el proceso Flask.
sudo apt install nginx supervisor
Introduce Y para confirmar la instalación y pulsa ENTER para continuar. Espera a que se complete la instalación del paquete.
Configurar el Entorno de Desarrollo
En esta sección, crearás un nuevo entorno virtual Python que se utilizará como entorno de desarrollo del framework web Python Flask.
Ejecuta el siguiente comando para crear un nuevo directorio de proyecto «/var/www/myapp». Este directorio se utilizará como directorio principal del proyecto para tu aplicación FLask.
sudo mkdir -p /var/www/myapp
Cambia la propiedad del nuevo directorio al usuario«james» y cambia el permiso a«755» utilizando el siguiente comando.
sudo chown -R james:james /var/www/myapp sudo chmod 755 /var/www/myapp
Desplázate al directorio del proyecto «/var/www/myapp» y crea un nuevo entorno virtual Python con el nombre «myenv » utilizando el siguiente comando.
cd /var/www/myapp python -m venv myenv
Por último, activa el entorno virtual » myenv » utilizando el siguiente comando. Una vez activado, tu intérprete de comandos será como «(myenv) james@hostname».
source myenv/bin/activate
Instalar Python Flask en el entorno virtual
Tras configurar el entorno virtual, puedes ejecutar el siguiente comando pip para instalar Python Flask y Gunicorn en tu entorno virtual. Todos estos paquetes se instalarán desde el repositorio PyPi Python.
pip install flask gunicorn
Ahora comenzará la instalación.
Crear el primer proyecto de App con Flask
Ya tienes instalado el framework web Python Flask. Ahora crearás la primera aplicación utilizando Flask.
Antes de crear el proyecto Flask, asegúrate de que estás en el directorio principal del proyecto«/var/www/myapp» y de que el entorno virtual«myenv» está activado.
Crea un nuevo archivo«myapp.py» utilizando el editor nano.
nano myapp.py
Ahora añade el siguiente script Python al archivo.
# myapp.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(debug=True)
Guarda y cierra el archivo cuando hayas terminado.
A continuación, crea un nuevo directorio«templates» y crea un nuevo archivo«index.html» dentro del directorio«template«.
mkdir -p templates/ nano templates/index.html
Añádele el siguiente script HTML.
<html> <body> <h1><center>Hello World!</center></h1> </body> </html>
Guárdalo y ciérralo cuando hayas terminado.
Por último, ejecuta el script«myapp.py» para ejecutar tu primera aplicación Flask.
python myapp.py
Verás que tu proyecto Flask se ejecuta en el localhost por defecto con el puerto 5000.
Abre el nuevo intérprete de comandos terminal de tu máquina Ubuntu y ejecuta el siguiente comando curl.
curl http://127.0.0.1:5000/
Ahora puedes ver la salida de la página index.html en la siguiente captura de pantalla.
Para finalizar el proceso de la aplicación Flask, puedes pulsar el botón «Ctrl+c».
Configurar Gunicorn
Gunicorn o «Unicornio Verde» es una interfaz de puerta de enlace del servidor web Python para el servidor HTTP. Te permite ejecutar una aplicación Python como un proceso HTTP o utilizando el archivo sock. Ahora vas a añadir el Gunicorn a tu proyecto Flask.
Dentro del directorio del proyecto Flask, crea un nuevo archivo«wsgi.py» utilizando el editor nano.
nano wsgi.py
Añádele el siguiente script.
# import myapp Flask application from myapp import app if __name__ == "__main__": app.run(debug=True)
Guarda y cierra el archivo cuando hayas terminado.
A continuación, ejecuta el siguiente comando para iniciar y ejecutar tu proyecto Flask utilizando Gunicorn. En este ejemplo, tu proyecto Flask se ejecutará en la dirección IP pública con el puerto 8000.
gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app
Abre tu navegador web e introduce la dirección IP de tu sistema Ubuntu con el puerto 8000 (es decir, http://192.168.5.28:8000/). Y deberías ver la página índice de tu proyecto Flask.
Ahora pulsa «Ctrl+c» para terminar el proceso de Guncorn.
Ejecutar la aplicación Flask con Gunicorn y Supervisor
Ahora ya has configurado el Gunicorn para el proyecto FLask. Y es hora de configurar el Supervisor para el framework web Flask.
El supervisor es un gestor de procesos que te permite controlar los procesos en un solo lugar. Así, en lugar de ejecutar la aplicación Flask como un servicio del sistema, utilizarás el Supervisor.
Crea un nuevo archivo de configuración«/etc/supervisor/conf.d/myapp.conf» utilizando el editor nano.
sudo nano /etc/supervisor/conf.d/myapp.conf
Añade la siguiente configuración al archivo. Y asegúrate de cambiar la ruta de detalles de la configuración y el usuario.
Usando esta configuración, estarás ejecutando tu proyecto Flask con Gunicorn, y en lugar de usar la dirección IP para tu aplicación, estarás ejecutando el proyecto Flask como un archivo sock.
[program:myapp] command=/bin/bash -c 'source /var/www/myapp/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myapp/ipc.sock wsgi:app' directory=/var/www/myapp user=james group=www-data autostart=true autorestart=true stdout_logfile=/var/www/myapp/myapp.log stderr_logfile=/var/www/myapp/error.log
Guarda y cierra el archivo cuando hayas terminado.
Ahora reinicia el servicio supervisor utilizando el siguiente comando para aplicar los nuevos cambios.
sudo systemctl restart supervisor
Por último, comprueba y verifica la lista de procesos bajo el Supervisor utilizando el siguiente comando. Deberías ver el proceso«myapp» en ejecución.
sudo supervisorctl status
Y si compruebas el servicio supervisor, verás que el servicio supervisor está activo y en ejecución.
sudo systemctl status supervisor
Configurar Nginx como proxy inverso para la aplicación Flask
Crea una nueva configuración de host virtual«/etc/nginx/sites-available/myapp.conf » utilizando el editor nano.
sudo nano /etc/nginx/sites-available/myapp.conf
Añade la siguiente configuración al archivo. En este ejemplo, el proyecto Flask se ejecutará bajo el dominio local«www.myapp.local». Además, puedes ver que la opción«proxy_pass» apunta al archivo UNIX sock que se ejecuta bajo Gunicorn y Supervisor.
server { listen 80; server_name www.myapp.local; location / { include proxy_params; proxy_pass http://unix:/var/www/myapp/ipc.sock; } }
Guarda y cierra el archivo cuando hayas terminado.
A continuación, ejecuta el siguiente comando para activar la configuración del bloque del servidor «myapp.conf», y luego verifica la configuración de Nginx. Si no obtienes ningún error, verás el mensaje de salida como«Sintaxis OK – prueba realizada con éxito».
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/ sudo nginx -t
Después, puedes reiniciar el servicio Nginx utilizando el siguiente comando para aplicar los nuevos cambios a la configuración de Nginx.
sudo systemctl restart 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.myapp.local» como se indica a continuación.
192.168.5.28 www.myapp.local
Guarda y cierra el archivo.
Ahora abre tu navegador web e introduce el nombre de dominio del proyecto Flask (es decir, http://www.myapp.local) en la barra de direcciones. Y deberías obtener la página índice de tu proyecto Python Flask.
Conclusión
¡Enhorabuena! Has instalado con éxito el framework web Python Flask con Gunicorn y Nginx en la máquina Ubuntu 22.04. 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 Supervisor para el proyecto Flask.