Imagen destacada

Gunicorn, Django, Systemd y, por si fuera poco, nginx

Ésta va a ser rápida. Es solo un recordatorio personal de cómo configurar varias instancias de gunicorn en una máquina con systemd. De modo que si no sabes qué es unicorn o systemd es muy posible que no te vaya interesar nada de lo que vaya a contar.

Si aun sigues ahí a pesar de tu desconocimiento, te diré que systemd es un sistema de gestión de servicios y procesos para Linux, lo que significa que se encarga de iniciar, supervisar y detener servicios (programas que se ejecutan en segundo plano) durante el arranque y el funcionamiento de tu computadora. Piensa en systemd como el director de una orquesta que, al inicio de un concierto (cuando enciendes tu computadora), indica a cada músico (servicio) cuándo y cómo debe empezar a tocar su parte. Además, durante el concierto, se asegura de que todos sigan tocando correctamente y, si algún músico tiene problemas, puede ayudar a solucionarlo o decidir reemplazarlo. De esta manera, systemd ayuda a que tu sistema operativo Linux funcione de manera organizada y eficiente desde el momento en que lo enciendes hasta que lo apagas.

Por otro lado, gunicorn es como un amable portero que abre la puerta de un club exclusivo (tu aplicación web) para permitir que los visitantes (usuarios en internet) entren y disfruten. Se asegura de que todo el mundo pase de manera ordenada y eficiente, gestionando el flujo de visitantes hacia dentro y fuera de la aplicación. O sea un servidor HTTP.

Desde hace no mucho me ha dado por desarrollar aplicaciones con la plataforma Django, a la que aconsejan servir con gunicorn. Y desconocía si un solo servicio de gunicorn soportaba varias aplicaciones, o si cada una debía contar con el suyo propio.

Resulta que, como sospechaba, se recomienda que solo corra un servicio de gunicorn en una máquina. ¿Y entonces, cómo sirvo las diferentes aplicaciones a través de nginx? Para quién no sepa qué es nginx, es como un eficiente repartidor de correo que se encarga de dirigir el tráfico de internet hacia los sitios web correctos, asegurándose de que cada solicitud de usuario llegue al destino adecuado. Además, actúa como un guardia de seguridad, protegiendo a los sitios web de visitas no deseadas o perjudiciales.

No entro en el proceso de instalación de gunicorn y nginx, este no es el objetivo del artículo. Si no recuerdo mal usé apt para instalar ambas aplicaciones en mi Kubuntu.

La solución pasa por la creación de un «target» u objetivo, que se utilizará para tratar ambas instancias de las aplicaciones como un único servicio.

Pongamos que tus aplicaciones se encuentran en /home/marisol/app/. Y cuentas con una llamada foo y otra bar. Por tanto una está en /home/marisol/app/foo y la otra en /home/marisol/app/bar

Lo primero que tenemos que hacer es crear una fichero, gunicorn.target en /etc/systemd/system/gunicorn.target:

Ya está, ya has creado un «objetivo» que, cuando esté «habilitado» ( sudo systemctl enable gunicorn.target), se iniciará en el arranque. Ahora vamos con los /etc/systemd/system/[email protected], el archivo de plantilla:

%i es el código del elemento de entrada (placeholder en inglés), que captará el texto a continuación de la arroba en el nombre del servicio. Por tanto estos serían los comandos para habilitar los servicios de las aplicaciones foo y bar.

Para iniciar o detener todas las instancias de gunicorn a la vez, simplemente ejecutaremos:

También podemos detener e iniciar un servicio específico por sí solo:

Por último éste es un ejemplo de configuración de nginx usando uno de esos servicios con Django en el backend y react en el front:

Fácil, ¿no?

Publicaciones Similares

  • Directorio con permisos de escritura para los miembros de un mismo grupo

    Escenario Estoy desplegando una aplicación web en un directorio en el que pretendo puedan escribir todos los usuarios perteneciente a un grupo dado. Problema No basta con crear un grupo, añadir los usuarios al tal grupo y adjudicar el directorio al grupo en cuestión. Solución Empecemos desde el principio. Los usuarios Antonio y Carla han…

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Actualización de MySQL: de la versión 5.7 a 8.0

    Atención no probar esta solución en sistemas en producción. Es solo una demostración de prueba. Escenario Por la razón que fuera queremos actualizar la versión de MySQL de 5.7 a 8.0 en ubuntu 16.04. En mi caso quería probar si con la actualización mejoraba cierto problemillas que estaba teniendo con la codificación de caracteres. Problema…

Deja una respuesta

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