Desarrollo de Servicios – Despliegue¶
Contenedores¶
Dockerfiles por servicio/MFE; imágenes versionadas.
Ambientes¶
Dev/staging/prod con configuración por variables; endpoints de MFEs y APIs resueltos por ambiente.
Publicación vía EDI¶
Servicios backend se exponen en X-Road con certificados y versionado; pruebas de interoperabilidad antes de publicar.
CI/CD¶
Pipelines para build, test, lint y push de imágenes; actualización de refs de submódulos en dev-env del shell.
Documentación operativa¶
Health checks, dashboards, alertas; runbooks básicos (restart, rotación de secretos, escalado).
deploy-env backend – Ambiente de despliegue¶
Repositorio que orquesta imágenes versionadas en producción:
deploy-env/
├── config/
│ └── nginx.conf # opcional
├── data/ # volúmenes de persistencia (postgres, minio, etc.)
├── versions.json # mapping servicio → imagen + versión
├── docker-compose.yml # compose productivo
├── Makefile # deploy/rollback/logs
├── .env # secretos y configuración (NO en git)
└── README.md
Principios:
1. Un único repositorio de despliegue (sin branches por ambiente).
2. versions.json versionado en git; .env siempre fuera de git.
3. Imágenes inmutables; solo se despliega código compilado.
4. CI/CD actualiza versions.json, commitea y taguea deploy-env.
versions.json¶
Define solo servicios propios construidos en CI/CD:
{
"backend": {
"image": "registry.io/proyecto/backend",
"version": "1.0.1"
},
"frontend": {
"image": "registry.io/proyecto/frontend",
"version": "1.0.0"
}
}
.env de deploy-env¶
Contiene puertos, secretos y configuración (no versionado):
BACKEND_PORT=8010
FRONTEND_PORT=8011
POSTGRES_PORT=8014
POSTGRES_USER=postgres
POSTGRES_PASSWORD=STRONG_PASSWORD
POSTGRES_DB=app_db_prod
NODE_ENV=production
JWT_SECRET=STRONG_JWT_SECRET
LOG_MAX_SIZE=10m
LOG_MAX_FILE=3
docker-compose productivo (backend)¶
Usa versiones tomadas de versions.json para servicios propios; versiones fijas para conectables:
services:
backend:
image: registry.io/proyecto/backend:${BACKEND_VERSION}
restart: unless-stopped
ports:
- "${BACKEND_PORT}:3000"
environment:
- NODE_ENV=${NODE_ENV}
- DATABASE_HOST=postgres
- DATABASE_PORT=5432
- DATABASE_USER=${POSTGRES_USER}
- DATABASE_PASSWORD=${POSTGRES_PASSWORD}
- DATABASE_NAME=${POSTGRES_DB}
- JWT_SECRET=${JWT_SECRET}
depends_on:
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: ${LOG_MAX_SIZE}
max-file: ${LOG_MAX_FILE}
deploy-env frontend – Shell y microfrontends¶
Estructura¶
deploy-env/
├── config/
│ ├── env.example # variables de ambiente
│ ├── microfrontends.json # configuración de MFEs
│ └── nginx.conf # opcional
├── docker-compose.yml # orquestación
├── Makefile # deploy/rollback
└── .env # valores reales
Shell (contenedor madre)¶
services:
shell:
image: registry.url/proyecto/eter-shell:${SHELL_VERSION}
ports:
- "${SHELL_PORT}:80"
environment:
- NODE_ENV=production
- BACKEND_URL=${BACKEND_URL}
depends_on:
- backend
volumes:
- ./config/microfrontends.json:/config/microfrontends.json:ro
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
Microfrontends¶
personas-frontend:
image: registry.url/proyecto/eter-personas-frontend:${PERSONAS_FRONTEND_VERSION}
environment:
- NODE_ENV=production
- BACKEND_URL=${BACKEND_URL}
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
microfrontends.json¶
Define metadata de MFEs, URLs y rutas:
{
"environment": "production",
"shell": {
"name": "eter-shell",
"version": "1.3.0"
},
"microfrontends": [
{
"name": "personas",
"title": "Gestión de Personas",
"version": "1.0.0",
"url": "https://personas.example.com",
"healthcheck": "https://personas.example.com/health",
"routes": ["/personas", "/personas/:id"]
}
]
}
CI/CD y operaciones¶
- Pipelines de cada servicio construyen imágenes dev/prod y actualizan
versions.jsono variables de versión. - Pipelines del deploy-env aplican
docker compose pull+docker compose up -dcon las nuevas versiones. - Operación diaria: uso de healthchecks, dashboards, alertas, runbooks de rollback (
docker compose rollbacko equivalente Makefile).