Despliegue¶
Todos los servicios del ecosistema usan un mismo modelo de despliegue. Esta página lo describe.
Aquí no hay detalles concretos de los hosts
Los detalles operativos — direcciones de servidor, nombres de usuario, configuración secreta — no forman parte de este sitio público. Viven en un runbook cerrado dentro del repositorio correspondiente.
El modelo general¶
Internet
│
▼
┌─────────────────┐
│ edge nginx │ TLS termination · HSTS · rate limit
│ (contenedor) │ cada vhost → un servicio interno
└────────┬────────┘
│ red Docker compartida
┌────────┴──────────────────────────────┐
│ │
▼ ▼ ▼
app A app B sitio estático
(Go + Next) (Go + Next) (nginx)
│ │
└────────┬───────┘
▼
PostgreSQL · Redis (compartidos)
Principios básicos:
- Un edge, muchos vhosts. Por fuera, un único contenedor nginx posee los
puertos 80/443. Cada dominio tiene su bloque
servery hace proxy hacia un servicio interno. - Los servicios internos no están expuestos. Las aplicaciones solo escuchan
en la red Docker compartida, o se enlazan a
127.0.0.1. No se puede llegar a ellas directamente desde fuera. - Infraestructura compartida. Una instancia de PostgreSQL y una de Redis sirven a varias aplicaciones; cada aplicación tiene su propia base o esquema.
- Docker Compose: cada aplicación tiene su propia stack de compose, conectada a la red compartida.
El edge nginx¶
El edge se encarga de:
| Función | Detalle |
|---|---|
| Terminación TLS | Certificados de Let's Encrypt, renovación automática |
| HSTS | max-age=63072000; includeSubDomains |
| Rate limit | Por zonas: auth (estricta) · app (laxa) · api |
| Proxy inverso | vhost → servicio interno |
| Rechazo de hosts desconocidos | Default server → cortar la conexión |
La configuración del edge se gestiona por git
El directorio conf.d del edge nginx se sincroniza desde un repositorio
concreto mediante git. Cualquier edición manual en el host quedará
sobrescrita por git reset --hard en el siguiente despliegue.
Por eso añadir o cambiar un vhost se hace haciendo commit en el repositorio, y la CI se encarga de distribuirlo.
Un segundo modelo: que el servicio posea su propio vhost
También existe el modelo en que un vhost que solo atañe a un servicio reside
en el repositorio de ese servicio y no en un fichero central, y su
despliegue instala la configuración en el conf.d del edge como fichero
aparte.
La ventaja: el cambio se completa dentro de un único repositorio y no espera al despliegue de otro equipo. La condición: la configuración debe ser totalmente autónoma — no puede depender de una zona de rate-limit ni de un default server definidos en otro fichero.
Este sitio funciona justamente así — véase Esta plataforma documental.
Certificados¶
- Let's Encrypt, con
certboten modo webroot. - El desafío ACME se sirve por el puerto 80 en
/.well-known/acme-challenge/. - La renovación es automática, semanal por cron; si tiene éxito se recarga nginx.
Para añadir un dominio nuevo:
- Apunte el DNS al servidor.
- Añada el dominio al bloque ACME del puerto 80.
- Obtenga el certificado con certbot.
- Añada el vhost HTTPS y apúntelo al certificado.
- Ejecute
nginx -ty recargue.
Sitios estáticos (portales de documentación)¶
Los sitios de documentación son HTML estático construido de antemano. La forma más sencilla de servirlos:
- construir
site/con MkDocs, - copiar el resultado al servidor,
- servirlo con un pequeño contenedor
nginx:alpine, - que el edge nginx haga proxy hacia él.
No hay runtime de aplicación, así que se consumen pocos recursos y hay poco que se pueda romper.
Este sitio funciona exactamente así — véase Esta plataforma documental para el detalle.
Despliegue de aplicaciones¶
Para las aplicaciones conviven dos modelos:
| Modelo | Detalle |
|---|---|
| Build en el host | La CI sincroniza el repositorio en el host y ejecuta docker compose build && up -d |
| Vía registry | La CI construye la imagen y la sube a un registry; el host hace pull && up -d |
La tendencia va hacia reducir dependencias: hay casos que pasaron de un registry externo a construir en el propio host.
Despliegue parcial: la CI determina qué servicios reconstruir a partir de
las rutas modificadas (paths-filter). Un cambio en una aplicación no altera
las demás.
Rollback¶
- Sitio estático — descomprimir el archivo de la construcción anterior.
- Aplicación — volver al tag de imagen anterior (se puede fijar con la
variable
<SVC>_IMAGE_TAG).
Comprobaciones de salud¶
Cada servicio tiene un endpoint /health. Los healthcheck de compose verifican
que la infraestructura (PostgreSQL, Redis) esté lista y arrancan la aplicación
solo después.
Lista de comprobación del despliegue¶
- [ ] DNS apuntado correctamente
- [ ] Certificado emitido y cubierto por la renovación automática
- [ ] Vhost del edge añadido y con commit en el repositorio
- [ ]
nginx -tpasa correctamente - [ ] Servicios internos no expuestos al exterior
- [ ]
/healthresponde - [ ] Secretos por variables de entorno, ausentes del repositorio
- [ ] Método de rollback claro
Para el detalle de la automatización, véase CI/CD.