Laboratorio

Despliegue de una aplicación Django con Nginx y ASGI

¿Por qué usar Nginx?

Nginx es actualmente uno de los servidores web con más características. Es un servidor web de alto rendimiento con múltiples casos de uso. Para una aplicación escalable y con diferentes tipos de servicios, Nginx es una excelente opción.

¿Por qué usar ASGI y por qué con Uvicorn?

ASGI es la forma de ejecutar Python asíncrono en un servidor web. ASGI es compatible con HTTP y WebSockets, lo que permite que Django tenga funcionalidades en tiempo real. Para implementar ASGI en tu proyecto, debes usar una herramienta como Uvicorn.

Crear usuario que controlará los recursos de la aplicación

  1. Inicia sesión como usuario root en el servidor.
  2. Crea un usuario con su respectivo directorio personal usando el comando useradd djangouser -g www-data -s /bin/bash -m -d /home/djangouser
    • djangouser es el nombre del usuario que se creará.
    • www-data es el grupo al que pertenecerá el usuario.
    • /bin/bash es la shell que usará el usuario.
    • /home/djangouser es el directorio personal del usuario.
  3. Crea una contraseña para el usuario creado usando el comando passwd djangouser A continuación, el sistema te pedirá que ingreses la contraseña dos veces.

Instalar aplicación y configurar directorios

  1. Inicia sesión como el usuario djangouser en el servidor.
  2. Descarga el proyecto usando el comando git clone https://example.com/djangoapp.git
  3. Accede al directorio del proyecto usando el comando cd djangoapp
    • djangoapp es el nombre del directorio del proyecto que se crea al clonar el repositorio.
  4. Crea un entorno virtual dentro del directorio del proyecto usando el comando python3 -m venv venv
    • El último venv es el nombre del directorio que se creará para el entorno virtual.
  5. Actualiza el gestor de paquetes pip usando el comando venv/bin/pip3 install --upgrade pip
    • Nótese que a partir de este punto debes usar los binarios del entorno virtual y no los del sistema siempre que sea posible.
    • Es posible usar sólo el nombre del binario sin escribir la ruta relativa al "activar" el entorno virtual usando el comando source venv/bin/activate
  6. Instala las dependencias del proyecto usando el comando venv/bin/pip3 install -r requirements.txt
  7. Instala las dependencias de ejecución usando el comando venv/bin/pip3 install uvicorn[standard] gunicorn
    • uvicorn es un servidor web ASGI que será el intermediario entre Django y Nginx
    • gunicorn es un servidor web HTTP con workers optimizados que uvicorn puede importar.
  8. Crea un archivo de configuración para gunicorn usando el comando vim gunicorn.conf.py
    • El comando vim puede ser reemplazado por el editor de tu preferencia.
    El contenido del archivo debe ser el siguiente:

Probemos el proyecto hasta ahora

  1. Comprueba la configuración de gunicorn usando el comando venv/bin/python3 -m gunicorn -c gunicorn.conf.py --check-config djangoapp.asgi:application
    • Si la configuración es correcta, el comando no mostrará ningún mensaje.
  2. Verifica la configuración que está tomando el gunicorn con el comando venv/bin/python3 -m gunicorn -c gunicorn.conf.py --print-config djangoapp.asgi:application
  3. Inicia el proyecto usando el comando venv/bin/python3 -m gunicorn -c gunicorn.conf.py djangoapp.asgi:application
  4. Accede a la IP del servidor de pruebas provisto por el uvicorn usando un navegador web