Cómo usar Circus y Nginx en una app flask con Ubuntu

Autor: | Última modificación: 3 de mayo de 2023 | Tiempo de Lectura: 4 minutos
Temas en este post: , , ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En el desarrollo de las aplicaciones web con flask, se necesitan muchas herramientas para su lanzamiento. Estas pueden pertenecer a la web, como la consola de Amazon Web Service (AWS), o ser remotas, como un IDE, Circus y Nginx. Así, en este post, te contaremos acerca de cómo usar Circus y Nginx en una app flask con Ubuntu.

El uso de Circus y Nginx en una app flask con Ubuntu es necesario después de tener preparada nuestra aplicación configurada con AWS y para asegurarnos de que si hay un error o un fallo de programación, pueda solucionarlo otra herramienta automáticamente y no con la necesidad de revisar el código por parte de programador. Por tanto, es primordial que encontremos Circus y Nginx en una app flask con Ubuntu.

Circus en una app flask con Ubuntu

Circus es un monitor de proceso que permite que la aplicación del lenguaje de programación Python se inicie al lanzarse la instancia y, por otra parte, se relance de manera automática si se llega a caer.

En términos del lanzamiento para web app flask con Ubuntu, debes utilizar conjuntamente con Circus a Systemd, el cual es un gestor de lanzamiento del sistema operativo Linux. Este se utiliza para que se lance Circus y, a su vez, se haga el lanzamiento de la instancia.

Ahora, para utilizar Circus, debes estar en el usuario Ubuntu en el programa, por lo tanto, deberás salir del usuario kakebo con los siguientes comandos: deactivate y, después, logout.

Una vez estés en el usuario principal de Ubuntu, podrás crear el servicio Circus con Systemd. En este momento, Circus ya debe estar instalado como dependencia de tu aplicación.

Puedes verlo de forma más detallada en nuestra guía rápida para instalar una app flask con Ubuntu.

Crear el servicio con el fichero

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Para crear el servicio debes seguir estas instrucciónes. En el primer paso tienes que crear un fichero de configuración en un directorio específico.

#instrucción para crear fichero de configuración

sudo nano /etc / systemd / system / circus.service

Cuando el programa lo abre, estará vacío. Sin embargo, aquí te ofrecemos una plantilla con la que rellenar el fichero para el funcionamiento del servicio de Circus:

#plantilla de contenido para el fichero

[Unit]
Description = circus daemon
After = syslog.target network.target nss-lookup.target
[Service]

#según la guía, el usuario es kakebo y la dirección kakebo_app
WorkingDirectory=/home// <usuario – app> / <dir_app>
ExecReload=sudo -H -u <usuario – app>
/home//venv/bin/circusctl reload
ExecStart = sudo -H -u <usuario – app>
/home//venv/bin/circusd
/home//conf/circus.ini
Restart = always
RestartSec = 5
[Install]
WantedBy = multi-user.target

Fichero de configuración

Después de guardar este fichero y lanzar el servicio, debes crear el fichero de configuración de gunicorn. El proceso es similar al que se hace con en el fichero anterior:
#configurar con gunicorn

sudo -u -i <usuario – app> -i
mkdir conf
cd conf

#creación del fichero
nano circus.ini

Una vez creado el fichero, debes agregar el contenido para que Circus haga el proceso del que está encargado. A continuación, te presentamos una plantilla de este contenido. Esta debe adaptarse según los nombres del usuario y la dirección de la aplicación.
#watcher será el nombre del proceso que se hace con Circus

[watcher: <dir_app>]
working_dir = /home/ <usuario – app> / <dir_app>
cmd = gunicorn
args = -w 1 -t 180 –pythonpath=. -b 0.0.0.0:8000 run:app
uid = <usuario – app>
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream

#consola de la aplicación
stdout_stream.filename = /home/<usuario – app>/logs/gunicorn.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream

#errores de la aplicación
stderr_stream.filename = /home/<usuario – app>/logs/gunicorn.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4
copy_env = true
virtualenv = /home/<usuario – app>/venv
virtualenv_py_ver = 3.8
[env: <dir_app>]

Una vez configurado según nuestra aplicación, debemos guardar el fichero.

Lanzamiento servicio de Circus

Para el lanzamiento del servicio de Circus, debes seguir estas instrucciones:
#para recarga el gestor de servicios
sudo systemctl daemon-reload
#lanza el nuevo servicio Circus
sudo systemctl start circus
#preparar para iniciar servicio cuando se lance la instancia
sudo systemctl enable circus

Una vez lanzado el servicio, debemos conectar este servidor interno con el servidor Nginix, que está a nivel exterior.

Nginx en una app flask con Ubuntu

Como es necesario usar Circus y Nginx en una app flask con Ubuntu, debemos hablar del segundo. Nginix es un servidor con un paquete y un fichero determinado de configuración. Tiene un directorio con todos los sitios web que se encuentran en la máquina o instancia.

Para crear este fichero de configuración, deberás ingresar la siguiente instrucción:

#fichero de configuración

sudo nano /etc/nginx/sites-available/<usuario – app>
Al igual que con Circus, debe tener un contenido como el de esta plantilla:

server {
listen 80;

#la ip la encuentras en AWS, como DNS pública, después agregas la IP elástica que también está ahí intermediada por un espacio en blanco
server_name <ip>.amazonaws.com<ip> ;
access_log /home/<usuario – app>/logs/nginx-access.log;
error_log /home/<usuario – app>/logs/nginx-error.log;
root /home/ <usuario – app> / <dir_app> /;
client_max_body_size 10M;
location /static { alias /home/ <usuario – app>/<dir_app>/kakebo/static; }
location / { include proxy_params; proxy_pass http://0.0.0.0:8000;
}
Para que la aplicación funcione debemos activar el sites enabled o sitios activos. En este proceso debes integrar el sym-link o acceso directo, de la siguiente forma:
sudo ln -s /etc/nginx/sites-available/<usuario – app>/etc/nginx/sites-enabled/app.

Si necesitas testar o cambiar la configuración, debes utilizar este comando: sudo nginx -t.

Si hay algún error, debes corregirlo y, después, ya podrás relanzar con esta instrucción: sudo service nginx restart.

Ahora puedes estar seguro que has aprendido cómo usar Circus y Nginx en una app flask con Ubuntu.

¿Qué sigue después de esto?

Por medio de nuestra guía rápida para instalar una web app flask en Ubuntu y otros posts, como este post sobre cómo usar Circus y Nginx en una app flask con Ubuntu, ya estás listo para lanzar tu aplicación web.

Ahora, si quieres saber otros detalles acerca de este proceso o conceptos clave para el desarrollo de aplicaciones web o de escritorio, te recomendamos echarle un vistazo al contenido del Bootcamp Aprende a Programar desde Cero que ofrece KeepCoding. Este bootcamp te permitirá mejorar tu perfil profesional al enseñarte a programar desde cero.

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python, Java y Spring Boot en solo 6 meses.