Skip to main content

Instalación Backend

Chronus Backend es una plataforma dockerizada, por consiguiente puede ser ejecutado en cualquier entorno con Docker.

Instalación con Docker

La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.

Compose es una herramienta para definir y ejecutar aplicaciones Docker de contenedores múltiples. Con Compose, utiliza un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración.

Compose funciona en todos los entornos: producción, staging, desarrollo y testing.

Requerimientos

  • Pyenv.
  • Docker version >= 20.10.11 ó mayor (se puede chequear corriendo el comando docker -v).
  • Compose version >= 2.2.2 ó mayor (se puede chequear corriendo el comando docker-compose -v).

Clonación de Repositorio

El repositorio se encuentra ubicado en Github, se necesitan las credenciales de Darient para poder acceder. Se puede hacer a través de este link.

Estructuración del Proyecto

Dentro del repositorio se podrá encontrar el proyecto con la siguiente estructuración (solo resaltando las carpetas y archivos importantes):

chronus-back
├── .github
├── app
| ├── models
| ├── ...
| ├── tasks.py
| ├── utils.py
| ├── views_basecamp.py
| └── views.py
├── compose
├── envs
├── migrations
├── static
├── templates
├── .env.example
├── .gitignore
├── .python-version
├── amazon_ses_smtp.py
├── app.json
├── config.py
├── create_app.py
├── ...
├── docker-compose.yml
├── main.py
├── make_celery.py
├── Procfile
├── README.md
├── requirements.txt
├── runtime.txt
└── test.py
  • /.github/ - El proyecto cuenta con el workflow de deploy de Github Actions, el cual está configurado para ejecutarse mediante un push en algunas de estas ramas: develop, staging o main.

  • /app/ - En esta carpeta están todos los módulos funcionales del proyecto.

    • /app/models/ - Aquí se encuentran todos los modelos que se utilizan en la aplicación.

    • /app/tasks.py - En este archivo se encuentran todos las tareas que se ejecutan con Celery.

    • /app/utils.py - En este archivo se configuran utilidades que se comparten entre varias funcionalidades. Primordialmente se configuró un método para Celery.

    • /app/views_basecamp.py - En este archivo se disponen todos los servicios correspondientes a Basecamp.

    • /app/views.py - En este archivo se disponen todos los servicios correspondientes a la plataforma.

  • /compose/ - Este directorio contiene la configuración del Dockerfile según el entorno. Este Dockerfile es necesario para ejecutar con Docker Compose, el beat y worker para Celery.

  • /envs/ - Este directorio contiene la información de las variables de entorno que se utilizan para cargar en el entorno local.

  • /migrations/ - Este directorio contiene las migraciones que se han realizado en BD.

  • /static/ - En este directorio se guardan los estáticos de la aplicación.

  • /templates/ - En este directorio se los templates de la aplicación. Principalmente los templates que se han implementado son plantillas para correos.

  • /.env.example - En este archivo se encuentra un ejemplo de las variables de entorno que deben estar definidas en ambiente local.

  • /.gitignore - Archivo que le especifíca a Github que archivos y directorios ignorar.

  • /.python-version - Archivo que le especifica a pyenv con qué versión de python se debe trabajar.

  • /amazon_ses_smtp.py - Archivo que configura uno de los envíos de correo que se realizan dentro de la plataforma.

  • /app.json - Archivo que configura el modo en que se despliega y se sirven las aplicaciones con Dokku.

  • /config.py - En este archivo se encuentra la configuración del proyecto en Flask, en donde se encuentran las configuraciones de cada uno de los ambientes (develop, staging y production).

  • /create_app.py - En dicho archivo se implementó el método para inicializar la aplicación de Flask.

  • /docker-compose.yml - Archivo de Docker Compose en el cuál se configura como se levantarán los servicios locales (base de datos, worker y beat de Celery).

  • /main.py - Archivo principal que utiliza Flask para correr la aplicación, en el también se encuentran algunos servicios.

  • /make_celery.py - Archivo que se utiliza para ejecutar el worker y beat en Docker.

  • /Procfile - Archivo de instrucción de ejecución solo utilizado por Dokku, donde se especifican como se levantara el proyecto como también se levantarán los servicios de despliegue.

  • /requirements.txt - Archivo que al ejecutarse instala automáticamente las dependencias del proyecto.

  • runtime.txt - Archivo que contiene la versión de Python en la que se ejecutará el proyecto en Dokku.

Instalar la versión de Python correspondiente

pyenv es una herramienta que permite gestionar múltiples versiones de Python en un sistema. Con pyenv, puedes instalar, desinstalar y cambiar fácilmente entre diferentes versiones de Python en tu máquina.

Puedes ejecutar comandos pyenv en el directorio base del proyecto, y pyenv usará automáticamente la versión especificada en el archivo .python-version.

El siguiente comando instalará la versión que requiere el proyecto.

pyenv install

Una vez instalada, para establecer la versión como la versión de Python para el directorio actual, se debe ejecutar el siguiente comando:

pyenv local

Activar entorno virtual

Para mantener un entorno limpio y no llenar nuestra máquina con dependencias que probablemente solo se usen para este proyecto, es necesario crear un entorno virtual utilizando la versión de python instalada en el paso anterior (asegurarse de la versión corriendo el comando python --version). Para crearlo, se debe utilizar el siguiente comando:

python -m venv .venv

Luego, activar el entorno virtual con el comando:

source .venv/bin/activate

Exportar las variables al entorno.

source envs/.develop

Build

Para construir y levantar el proyecto hay que buildear el contenedor inicialmente. Se realiza con este comando:

Cuidado

El proyecto se tiene que buildear cada vez que se instala una nueva dependencia, es decir, se agrega una nueva librería a los requirements.

docker-compose up -d --build

El flag -d se utiliza para que el proceso se ejecute en background y no ocupe la terminal.

PD: El proyecto se tiene que buildear cada vez que se instala una nueva dependencia, es decir, se agrega una nueva librería a los requirements.

Una vez levantados los contenedores (revisar con el comando docker ps), se procede a instalar las migraciones.

Cuidado

Antes se deben haber configurado las variables de entorno (.env).

Levantamiento del Proyecto

Para levantar el proyecto se hace uso de estos comandos:

  • Levantar los servicios:
docker-compose up -d
  • Correr migraciones:
flask db upgrade
  • Levantar el proyecto:
flask run

Automáticamente debería poder acceder desde localhost:5000 en caso de ser el entorno local.