Despliegue de Django

Pybox te permite desplegar tus aplicaciones Django de forma sencilla y rápida. A continuación, te mostramos cómo hacerlo.


Creación y Configuración de la Aplicación Django en Pybox

Antes de crear una aplicación Django, es fundamental contar con un proyecto y entorno previamente creados. Además, una parte esencial de cualquier aplicación Django es la base de datos. Comencemos con eso🔥

Configuración de la Base de Datos

Pybox genera un host por defecto al implementar la infraestructura. Puedes encontrarlo en la sección Host de BD bajo el alias Default.

Asegúrate de que este host tenga acceso a tu proyecto.

Para verificarlo: Ingresa a tu proyecto en Pybox. Busca la sección Acceso a host de base de datos. Si ya creaste el acceso al host, genial. Si no, haz clic en +Acceso a host de BD, asigna un límite de bases de datos y usuarios que podrán ser creados. Imagen de muestra

Ahora que tienes acceso al host, sigue estos pasos:

Crea un usuario de base de datos:

Ve a la sección Usuarios de base de datosy haz clic en +Usuario de BD.

Asigna un nombre y contraseña. Selecciona el host de base de datos al que le diste acceso.

Imagen de muestra

Crea la base de datos:

Ve a la sección Base de datos y haz clic en +Base de datos.

Asigna un nombre, selecciona el host de base de datos y configura el cotejamiento según tus necesidades.

Imagen de muestra

Asigna acceso a los usuarios:

Una vez creada la base de datos, en la misma sección haz clic en +Usuario, selecciona el usuario al que quieras dar acceso y guardalo.

Imagen de muestra

Pybox otorga privilegios por defecto a los usuarios con acceso para que puedan realizar operaciones como aplicar migraciones.

Si necesitas modificar los permisos, puedes hacerlo desde el icono de engranaje junto al usuario.

Imagen de muestra

Con esto, la base de datos ya está lista para que tu aplicación Django la utilice. Pasemos al siguiente paso.

Creación de la Aplicación Django

Dentro de tu entorno en Pybox:

Selecciona +Nueva aplicación. Asigna un nombre. En tipo de aplicación, selecciona Django. Asigna un dominio.

Imagen de muestra

💡 Recomendación: Antes de crear la aplicación en Pybox, asegúrate de que el dominio ya esté definido. Si lo cambias más adelante, tendrás que actualizarlo manualmente en todos los lugares donde Pybox lo utilice, como el VHost.

Además, dependiendo de tu caso, puedes elegir si el dominio debe apuntar a la IP del balanceador de cargas de aplicaciones desde el inicio o si prefieres configurarlo después de ejecutar la Deploy Task.

Una vez creada, la aplicación aparecerá con estado inactivo, pero ya tendrá una ruta generada.

Configuración de la Aplicación

Ingresa a la aplicación que creaste. Estarás en la pestaña Configuración, donde puedes definir ajustes básicos, avanzados y el entorno virtual de Python.

Edita la configuración básica:

  • En Nombre del proyecto Django, ingresa el nombre con el que lo creaste en tu código.

  • En Ruta de medios, coloca la ruta relativa de la carpeta donde se guardarán los archivos multimedia (ejemplo: files).

  • En Ruta estática, define la ruta relativa de la carpeta donde están los archivos estáticos (ejemplo: assets).

  • Ajusta los valores de solicitudes máximas, procesos, hilos, intervalo de reinicio y tiempo de gracia si es necesario, o deja los valores recomendados por Pybox.

  • (Opcional) Build VHost: Si habilitas esta opción, se generará automáticamente el archivo de configuración del servidor VHost en los nodos.

    Esta configuración depende de tu criterio y de cómo necesites desplegar tu aplicación.

    Si la habilitas la aplicación se activara.

    Si no la habilitas, el VHost no se creará y la aplicación permanecerá inactiva. Podrás realizar todas las operaciones dentro de tu aplicación y ejecutar el pipeline en una Deploy Task, pero no tendrás acceso a la aplicación hasta que habilites Build VHost, se cree el VHost y la aplicación se active.

  • Activa Crear archivos de configuración por defecto para que Pybox genere los archivos iniciales necesarios para tu aplicación.

Imagen de muestra

Una vez que guardes los cambios en la configuración básica, tu aplicación pasará a un estado activo, siempre que se haya creado el VHost.

Configuración avanzada

Si activaste la opción Habilitar Build VHost y guardaste los cambios en la configuración básica, podras acceder a la configuración avanzada y visualizar o editar el VHost generado.

Imagen de muestra

💡Considera lo siguiente❗❗❗:

Si desactivas una aplicación, todas las líneas correspondientes a su vhost serán comentadas.

Si desactivas un entorno, se comentarán los vhosts de todas las aplicaciones asociadas a ese entorno.

Entorno virtual de Python

Para que tu aplicación Django funcione correctamente, necesita un entorno virtual donde se instalarán los paquetes necesarios. En la sección Entorno virtual de Python, haz clic en +Agregar y asigna un nombre al entorno virtual.

Imagen de muestra

CI/CD

Dentro de la misma aplicación, puedes cambiar a la pestaña CI/CD, donde configurarás los flujos de entrega continua.

Configuración del repositorio remoto

Para habilitar despliegues automáticos, haz clic en +Agregar y proporciona la siguiente información:

  • La URL de tu repositorio,
  • La rama con la que trabajará tu aplicación
  • El nombre del repositorio

Imagen de muestra

Gestión de archivos

Si en la configuración básica habilitaste la opción Crear archivos de configuración por defecto, se generará automáticamente un archivo llamado ENV_VARS_FILE, donde podrás definir todas las variables de entorno de tu aplicación.

De lo contrario, si no activaste esta opción, deberás crear los archivos manualmente.

Puedes crear los archivos necesarios para tu aplicación. como por ejemplo un archivo de variables de entorno. → .env

  • Asigna un nombre al archivo, que luego utilizarás en el pipeline.
  • En el editor integrado de Pybox, agrega todas las variables de entorno con sus respectivos valores.

Imagen de muestra

Pybox también proporciona, en la misma sección, las rutas clave de tu aplicación que puedes utilizar para asignar valores a tus variables si las necesitas.

Plantilla pipeline

En esta sección puedes crear y editar la plantilla inicial para tu aplicación. La plantilla es un script en Bash que automatiza el despliegue de tu aplicación Django.

Imagen de muestra

Te mostramos en detalle la plantilla del Pipeline que se genera para tu aplicación Django

# ! /usr/bin/bash

Esta línea indica que el script se ejecuta con Bash.

# Initialize project os user
source /pybox_nfs/shared_production/projects/pyboxdocs/.bashrc

Cargará la configuración del entorno para el usuario del sistema.

# Move to CI/CD folder of the application
cd $PYBOX_APP_CICD_FOLDER_PATH

Se mueve a la carpeta donde se encuentran los archivos de la aplicación.

# Initialize ssh-agent
eval $(ssh-agent -s)

Inicia el agente SSH para gestionar las claves privadas necesarias para conectarse al repositorio.

# Add the ssh public key of the project to the agent
ssh-add /pybox_nfs/shared_production/projects/pyboxdocs/.ssh/pybox_git_rsa

Añade la clave SSH del proyecto al agente SSH, permitiendo autenticarse con el servidor Git.

# Clone and copy the repository of the application
if [ "$PYBOX_EXEC_MODE" = "COMPLETE" ]; then

Verifica si el pipeline se ejecuta en modo completo, para realizar todos los pasos siguientes, de lo contrario simplemente se hara un touch al wsgi.py de tu aplicación.

# Scan git host
ssh-keyscan -t rsa ssh.dev.azure.com  /pybox_nfs/shared_production/projects/pyboxdocs/.ssh/known_hosts

Escanea el host del servidor Git y agrega su clave pública a la lista de hosts conocidos.

# Remove the previous cloned repository of the application
rm -rf astro_minorista_backend

Elimina cualquier versión anterior del repositorio local para asegurar una copia limpia.

⚠️ Toma en cuenta que se utiliza el nombre del repositorio que configuraste anteriormente

# Clone the repository of the application
git clone [email protected]:v3/90hrswk2/Astro/astro_minorista_backend -b develop --single-branch astro_minorista_backend

Clona el repositorio en la rama develop como una única rama, reduciendo el tamaño de la descarga.

⚠️ Toma en cuenta que en esta linea se utiliza la url del repo y la rama que configuraste en pasos anteriores.

# Copy and replace all the files to the PYBOX_APP_MAIN_FOLDER_PATH folder
cp -rf astro_minorista_backend/{*,.*} $PYBOX_APP_MAIN_FOLDER_PATH

Copia todos los archivos del repositorio al directorio principal de la aplicación.

rm -rf $PYBOX_APP_MAIN_FOLDER_PATH/.git

Elimina la carpeta .git para que no interfieran en el entorno de producción.

rm $PYBOX_APP_MAIN_FOLDER_PATH/.gitignore

Elimina el archivo .gitignore para que no interfieran en el entorno de producción.

# Copy the evironment vars files to some destination
echo "Copying ENV_VARS_FILE to the destination"

Imprime un mensaje indicando que se copiarán las variables de entorno.

# uncomment the next line to customize the destination of the env file
# cp $ENV_VARS_FILE $PYBOX_APP_MAIN_FOLDER_PATH/destiny_filename

Esta línea te permite definir una ruta personalizada donde se copiará o reemplazará el archivo.

⚠️⚠️🚨 Estas líneas varían según los archivos que hayas creado previamente. En la plantilla, las instrucciones de copia o reemplazo están comentadas por defecto. Para un correcto funcionamiento, debes descomentar las líneas correspondientes a los archivos que deseas copiar o reemplazar. 🚨⚠️⚠️

# Activate the virtual environment
workon pyboxappdocdjango

Activa el entorno virtual de Python para instalar las dependencias en un entorno aislado.

⚠️ Toma en cuenta que se utiliza el nombre del entorno virtual que creaste para tu aplicación.

# Install dependencies
pip install -r $PYBOX_APP_MAIN_FOLDER_PATH/requirements.txt

Instala las dependencias de la aplicación según el archivo requirements.txt.

# Migrate the database
python $PYBOX_APP_MAIN_FOLDER_PATH/manage.py migrate

Ejecuta las migraciones de la base de datos, aplicando cualquier cambio en los modelos.

# Collect the static files
python $PYBOX_APP_MAIN_FOLDER_PATH/manage.py collectstatic --noinput

Recoge todos los archivos estáticos de la aplicación y los coloca en la carpeta de producción.

else
echo "The pipeline is running in the update mode. Skip the clone, copy of the repository and the env files and the installation of the dependencies"

Si el pipeline no está en modo completo, se muestra un mensaje indicando que se omiten los pasos de clonación e instalación.

fi

Cierra el bloque if.

# Restart the wsgi application on both complete and update mode
touch $PYBOX_APP_MAIN_FOLDER_PATH/astro_minorista/wsgi.py

Reinicia la aplicación Django con un touch al archivo WSGI para que los cambios surtan efecto.

echo "The pipeline has finished the execution"

Imprime un mensaje indicando que el pipeline ha finalizado.

🚨Revisa la plantilla del pipeline y, si es necesario, ajusta o agrega las líneas que consideres, ya que esta plantilla es solo un punto de partida y puede necesitar personalización.🚨

Deploy tokens

Una vez que tengas tu pipeline listo, podrás generar un deploy token y obtener un comando cURL que podrás ejecutar desde Azure Pipelines, GitLab CI/CD, GitHub Actions, o cualquier plataforma similar. Este comando cURL creará automáticamente una deploy task con uno de los siguientes tipos:

  • Run Complete Only One → Ejecuta el pipeline en un solo nodo.
  • Run Complete One and Update Others → Ejecuta el pipeline en un nodo y luego actualiza los demás.
  • Only Update All → Aplica una actualización en todos los nodos.
  • Run Complete All → Ejecuta el pipeline completo en todos los nodos.

Además de estos tipos, podrás agregar comandos post-deploy, argumentos de script y la opción de reiniciar Apache si es necesario. Todas estas configuraciones se reflejarán en el comando cURL.

Imagen de muestra

Deploy task

Si prefieres crear la deploy task de manera manual en lugar de utilizar un comando cURL, puedes hacerlo desde esta sección. Al crear la task manualmente, igualmente podrás elegir el tipo de ejecución que más se ajuste a tus necesidades:

  • Run Complete Only One → Ejecuta el pipeline en un solo nodo.
  • Run Complete One and Update Others → Ejecuta el pipeline en un nodo y luego actualiza los demás.
  • Only Update All → Aplica una actualización en todos los nodos.
  • Run Complete All → Ejecuta el pipeline completo en todos los nodos.

Y también, podrás agregar comandos post-deploy, argumentos de script y configurar el reinicio de Apache si lo necesitas. Con las configuraciones seleccionadas, se creará la tarea que se ejecutará según el tipo elegido en los nodos de tu infraestructura.

Imagen de muestra

Cuando se cree la tarea, podrás realizar un seguimiento completo de la ejecución según el tipo o modo que hayas seleccionado. Dispondrás de una sección desplegable llamada Runs Deploy, donde podrás monitorear el progreso de la ejecución en los diferentes nodos.

Imagen de muestra

Log de Errores

En esta sección podrás visualizar los errores de tu aplicación sin necesidad de conectarte a los nodos vía SSH.

⚠️ Toma en cuenta que el archivo de logs se genera automáticamente cuando se crea el VHost.

Imagen de muestra

Gestor de Archivos

El gestor de archivos te servira para cargar y administrar los archivos que necesites en el Private Storage, un directorio diseñado para almacenar archivos privados. Estos archivos pueden ser accedidos desde tu aplicación o durante la ejecución del pipeline utilizando su ruta absoluta.

En la plantilla del pipeline, puedes hacer referencia a estos archivos con la variable:

$PYBOX_APP_PRIVATE_STORAGE_PATH/nombre_del_archivo

De esta manera, podrás utilizarlos de forma segura dentro de tus procesos de despliegue y ejecución.

Imagen de muestra

En esta guía, te mostramos todas las opciones disponibles en Pybox para ayudarte a realizar el despliegue de tu aplicación Django. Sin embargo, no todas las opciones son necesarias para cada proyecto; su uso dependerá de las particularidades de tu aplicación. La decisión de cuáles implementar queda en tus manos, asegurando que el proceso de despliegue se adapte a tus necesidades específicas.

Recuerda que Pybox está diseñado para facilitar y simplificar el despliegue de tu aplicación Django de la manera más sencilla e intuitiva posible. ☁️🚀