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
- 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):
dtmood-web
├── .well-known
├── .github
├── compose
├── config
| ├── settings
| | ├── base.py
| | ├── local.py
| | ├── production.py
| └── urls.py
├── dtmood_api
├── dtmood_web_app
| ├── apps
| ├── media
| ├── static
| ├── templates
| └── utils
├── fixture
├── requeriments
| ├── base.txt
| ├── local.txt
| ├── production.txt
├── .gitignore
├── .development.env
├── development.yml
├── staging.yml
├── production.yml
├── runtime.txt
├── requirements.txt
├── Procfile
├── DOKKU_SCALE
└── 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:stagingomain./compose/- Este directorio contiene la configuración del Dockerfile según el entorno. En esta carpeta también se encuentra el archivoentrypoint.sh, que es un Script que se usa en el Dockerfile para esperar por el levantamiento de Postgres./config/- La configuración del proyecto en Django se estructura según el entorno en que se esté trabajando. En el subdirectoriosettingsse encuentra el archivobase.py, siendo la base de todos los entornos posibles. Enbase.pyse 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. Enlocal.pyse definen algunas configuraciones diferentes a otros entornos para el desarrollo de forma local. Respectivamente lo mismo aplica para el caso deproduction.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.urls.py- En este archivo están definidas todas las rutas generales del proyecto./dtmood_api/- Esta es la aplicación correspondiente al modulo del API, aquí se encuentra todo lo correspondiente a la misma./dtmood_web_app/- En esta carpeta están todos los módulos funcionales del proyecto./dtmood_web_app/apps/- Aquí se encuentran todos los módulos funcionales, donde se incluyen usuarios, posiciones, entidades, flujos de viewflow, etc./dtmood_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} )./dtmood_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/dtmood_web_app/static/main/), como también archivos CSS, JS e imágenes./dtmood_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:/dtmood_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)./dtmood_web_app/templates/hr/- En esta carpeta específica se encuentran los componentes de interfaces para las selecciones de listas./dtmood_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.
/dtmood_web_app/utils/- Aquí se encuentran algunas utilidades del proyecto, como es el caso de los storages de AWS./fixture/- 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.txttiene todas las librerías que se usan en común en todos los entornos,local.txttiene solo las librerías necesarias para el entorno de desarrollo yproduction.txtrespectivamente las de producción..gitignore- Archivo que le especifíca a Github que archivos y directorios ignorar.development.yml,staging.ymlyproduction.yml- Son archivos de Compose en el cuál se configura la forma en que se ejecutará el proyecto según el entorno en que se encuentren.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.DOKKU_SCALE- Archivo que indica cuantos containers se crearan por proceso dentro del proyecto.
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 -f file_name up --build
En este caso el file_name dependerá del entorno en el que se quiera levantar el proyecto. Los archivos posibles son: development.yml, staging.yml o production.yml. Generalmente solo se usa development.yml.
Cuidado
Antes se deben haber configurado las variables de entorno según sea el caso (.development.env).
Levantamiento del Proyecto
Para levantar el proyecto se hace uso de estos comandos:
- Levantar el proyecto.
docker-compose -f file_name up
En este caso el file_name dependerá del entorno en el que se quiera levantar el proyecto. Los archivos posibles son: development.yml, staging.yml o production.yml.
Automáticamente debería poder acceder desde localhost:8000 en caso de ser el entorno local.