Skip to main content

Instalación Backend

Molpack 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):

molpack_web_app
├── .well-known
├── .github
├── compose
├── config
| ├── settings
| | ├── base.py
| | ├── local.py
| | ├── production.py
| └── urls.py
├── envs
├── molpack_api
├── molpack_web_app
| ├── apps
| ├── media
| ├── static
| ├── templates
| └── utils
├── fixture
├── requeriments
| ├── base.txt
| ├── local.txt
| ├── production.txt
├── .gitignore
├── .development.env
├── docker-compose.yml
├── runtime.txt
├── requirements.txt
├── Procfile
├── app.json
└── manage.py
  • /.well-known/ - Directorio que contiene un archivo específico para las configuraciones particulares en el ambiente de Apple.

  • /.github/ - El proyecto cuenta con el workflow CI de Github Actions, el cual está configurado para ejecutarse mediante un push en algunas de estas ramas: staging o main.

  • /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.

  • /config/ - La configuración del proyecto en Django se estructura según el entorno en que se esté trabajando. En el subdirectorio settings se encuentra el archivo base.py, siendo la base de todos los entornos posibles. En base.py se encuentran todas las configuraciones que se tendrán en común en todos los ambientes, donde se pueden encontrar la configuraciones de las librerías y apps a usar en el proyecto, los middlewares, etc. En local.py se definen algunas configuraciones diferentes a otros entornos para el desarrollo de forma local. Respectivamente lo mismo aplica para el caso de production.py, aquí se definen configuraciones más importantes ya que es la que se ejecturá en el servidor de producción. En producción estan las especificaciones necesarias para usar el storage y servidor de correo de AWS, así como las configuraciones de recolección de estáticos y de Sentry.

    • /config/urls.py - En este archivo están definidas todas las rutas generales del proyecto.
  • /molpack_api/ - Esta es la aplicación correspondiente al modulo del API, aquí se encuentra todo lo correspondiente a la misma.

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

    • /molpack_web_app/apps/ - Aquí se encuentran todos los módulos funcionales, donde se incluyen usuarios, posiciones, entidades, flujos de viewflow, etc.

    • /molpack_web_app/media/ - Esta carpeta es autogenerada por Django. Se generará cada vez que se guarde un archivo localmente y en ella podrás encontrar dicho archivo en la ruta específicada (en este caso la configuración es application/{id}/{file} ).

    • /molpack_web_app/static/ - En esta carpeta se guardan todos los estáticos del proyecto, desde los templates usados externamente (en este caso se usa Remark y dichos archivos se encuentran en la carpeta /molpack_web_app/static/main/), como también archivos CSS, JS e imágenes.

    • /molpack_web_app/templates/ - Mediante este directorio se pueden encontrar todos los archivos HTML que definen las interfaces del proyecto. Algunos de los componentes importantes son:

      • /molpack_web_app/templates/account/ - Se establecen las interfaces de correos, login y el flujo de cambiar contraseña (casi todas las que empiezan por password).

      • /molpack_web_app/templates/hr/ - En esta carpeta específica se encuentran los componentes de interfaces para las selecciones de listas.

      • /molpack_web_app/templates/base.html - En este archivo se encuentra el template base que se usa en la mayoría de los componentes de interfaces del cuerpo del proyecto.

      Los demás directorios contienen los archivos de interfaces correspondientes al nombre de la misma.

    • /molpack_web_app/utils/ - Aquí se encuentran algunas utilidades del proyecto, como es el caso de los storages de AWS.

  • /fixtures/ - En este directorio se encuentran todos los JSON con las intancias de base de datos necesarias para la inicialización del proyecto.

  • /requirements/ - En este directorio están todos los archivos de dependencias del proyecto separadas por ambiente: base.txt tiene todas las librerías que se usan en común en todos los entornos, local.txt tiene solo las librerías necesarias para el entorno de desarrollo y production.txt respectivamente las de producción.

  • .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.

  • /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).

  • requirements.txt - Archivo que al ejecutarse instala automáticamente las dependencias de producción. Este archivo es necesario para Dokku.

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

  • 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 workers.

  • /app.json - Archivo que configura el modo en que se despliega y se sirven las aplicaciones con 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 (.development.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:8000 en caso de ser el entorno local.