Skip to content

Arquitectura de despliegue ​

Visión general ​

Todos los servicios web se ejecutan como contenedores Docker en un host por entorno (test y producción). El despliegue está centralizado en el repositorio infra-deploy, que actúa como orquestador: contiene los docker-compose.yml de cada sistema y el pipeline que los aplica en el host vía SSH.

EntornoRama GitTag de imagenVariables CI/CD
Testdevelopdevelop-latestDEV_*
Producciónmainmain-latestPROD_*

Repositorio infra-deploy ​

infra-deploy/
├── .gitlab-ci.yml          # Pipeline orquestador (job deploy-orquestador)
├── idp/docker-compose.yml  # Stack del IDP
├── seleccionador/docker-compose.yml  # Stack del SPS
└── docs/docker-compose.yml # Stack de documentación

Cada docker-compose.yml define un proyecto Compose independiente (name:), con su propia red y sus propios servicios.

Stacks ​

IDP (name: idp) ​

Red: idp-net (bridge).

ServicioPuerto hostVolúmenesenv_file
auth-backend8500Síback.env
auth-authorization-frontend8300No—
auth-frontend-admin8301No—
frontend-public-auth8302No—

Seleccionador (name: seleccionador) ​

Red: seleccionador-net (bridge).

ServicioPuerto hostVolúmenesenv_file
backend-seleccion-postulantes8501Síback.env
frontend-portal-admin-seleccion-postulantes8303No—
frontend-portal-comisiones-seleccion-postulantes8304No—
frontend-portal-postulantes-seleccion-postulantes8305No—
frontend-estacion-examen8306No—

Documentación (name: docs) ​

Red: docs-net (bridge).

ServicioPuerto host
frontend-manual-tecnico8401
frontend-manual-de-usuario8402

INFO

Todos los contenedores escuchan en el puerto 80 interno. Los subdominios públicos de cada servicio se detallan en Mapas de subdominios y puertos.

Configuración común de los servicios ​

Todos los servicios comparten la misma configuración base en Compose:

yaml
image: "git.eje.gob.bo:5050/proceso-seleccion/<servicio>:${IMAGE_TAG}"
container_name: <servicio>
restart: unless-stopped
healthcheck:
  test: ["CMD", "curl", "-fsS", "http://localhost/health/"]
  interval: 30s
  timeout: 5s        # backends | 3s frontends
  retries: 3
  start_period: 20s  # backends | 5s frontends
logging:
  driver: json-file
  options:
    max-size: "10m"
    max-file: "5"
  • IMAGE_TAG se lee del archivo .env del stack, que el pipeline genera en cada despliegue (develop-latest o main-latest).
  • restart: unless-stopped reinicia el contenedor ante caídas, salvo que se haya detenido manualmente.
  • Los logs rotan a 10 MB con un máximo de 5 archivos por contenedor.

Backends ​

Los backends montan adicionalmente:

yaml
env_file:
  - back.env
volumes:
  - ./storage/public:/app/public_files
  - ./storage/private:/app/private_files
  - ./back.env:/app/.env:ro
Ruta en hostRuta en contenedorUso
storage/public//app/public_filesArchivos públicos, servidos por nginx en /files/
storage/private//app/private_filesArchivos privados, solo accesibles vía X-Accel-Redirect
back.env/app/.env (ro)Variables de entorno de Django

Estructura en el host ​

El pipeline crea y mantiene esta estructura bajo DEPLOY_BASE_PATH (variable distinta por entorno):

${DEPLOY_BASE_PATH}/
├── idp/
│   ├── docker-compose.yml   # copiado desde infra-deploy/idp
│   ├── .env                 # IMAGE_TAG=<develop|main>-latest
│   ├── back.env             # variables + secretos de auth-backend
│   └── storage/
│       ├── public/
│       └── private/
├── seleccionador/
│   ├── docker-compose.yml
│   ├── .env
│   ├── back.env             # variables + secretos de backend-seleccion-postulantes
│   └── storage/
│       ├── public/
│       └── private/
└── docs/
    ├── docker-compose.yml
    └── .env

WARNING

docker-compose.yml, .env y back.env se sobrescriben en cada despliegue. Cualquier cambio manual en el host se pierde; los cambios deben hacerse en infra-deploy o en las variables CI/CD de GitLab.

Custodio ​

custodio no se despliega en el host: es una aplicación de escritorio (Python + Tkinter) que valida, consolida y cifra los bancos de preguntas para la comisión de elaboración. Su pipeline genera ejecutables para Linux y Windows y los publica en el Package Registry de GitLab. Ver Pipelines CI/CD.