Appearance
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.
| Entorno | Rama Git | Tag de imagen | Variables CI/CD |
|---|---|---|---|
| Test | develop | develop-latest | DEV_* |
| Producción | main | main-latest | PROD_* |
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ónCada 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).
| Servicio | Puerto host | Volúmenes | env_file |
|---|---|---|---|
auth-backend | 8500 | Sí | back.env |
auth-authorization-frontend | 8300 | No | — |
auth-frontend-admin | 8301 | No | — |
frontend-public-auth | 8302 | No | — |
Seleccionador (name: seleccionador)
Red: seleccionador-net (bridge).
| Servicio | Puerto host | Volúmenes | env_file |
|---|---|---|---|
backend-seleccion-postulantes | 8501 | Sí | back.env |
frontend-portal-admin-seleccion-postulantes | 8303 | No | — |
frontend-portal-comisiones-seleccion-postulantes | 8304 | No | — |
frontend-portal-postulantes-seleccion-postulantes | 8305 | No | — |
frontend-estacion-examen | 8306 | No | — |
Documentación (name: docs)
Red: docs-net (bridge).
| Servicio | Puerto host |
|---|---|
frontend-manual-tecnico | 8401 |
frontend-manual-de-usuario | 8402 |
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_TAGse lee del archivo.envdel stack, que el pipeline genera en cada despliegue (develop-latestomain-latest).restart: unless-stoppedreinicia 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 host | Ruta en contenedor | Uso |
|---|---|---|
storage/public/ | /app/public_files | Archivos públicos, servidos por nginx en /files/ |
storage/private/ | /app/private_files | Archivos 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
└── .envWARNING
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.
