Trazo corre en un VPS con el mismo compose de siempre más docker-compose.prod.yml. En ese servidor hay otros proyectos y un proxy (Caddy) que ya tiene los puertos 80 y 443 y los certificados. Trazo no publica puertos: el proxy le pasa las peticiones de su dominio por una red de Docker compartida, trazo-proxy.
Paso a paso
- Operacióngit pull --ff-only en el servidor
Solo avance rápido sobre
main: si el historial no coincide, se detiene en lugar de mezclar. - Servidor¿Existe el .env?
Se crea una sola vez con
scripts/deploy/new-env.sh: permisos 600 y secretos aleatorios generados en el servidor. El correo y las cuentas por rol se escriben a mano. - Docker de Trazoup -d --build --wait
Con
-p trazoy los archivos base y de producción. Si falta un secreto obligatorio, Compose no arranca.--waitespera a que todo esté sano. - Docker de Trazoinit migra y siembra
Migraciones solo aditivas; los datos, las llaves y los respaldos viven en volúmenes y no se tocan.
- Docker de Trazo¿Todo quedó sano?
- Proxy de TLS¿El proxy ya está en trazo-proxy?
El nombre del contenedor del proxy sale de
TRAZO_PROXY_CONTAINER. - Proxy de TLSLo conecta a la red sin reiniciarlo
docker network connect: si alguien recreó el proxy desde su propio proyecto, perdió la red; conectarlo de nuevo es seguro y no corta nada. - VisitanteEntra por HTTPS al gateway de Trazo
El proxy termina TLS y pasa a
trazo-gateway:8080. El gateway pone las cabeceras de seguridad (CSP y HSTS, porque el proxy avisa que llegó por HTTPS) y solo cree la IP del visitante si viene detrazo-proxy.
La IP real importa: los límites del ingreso y de la recuperación de contraseña cuentan por IP, y sin ella todas las personas compartirían la del proxy y se bloquearían entre sí.
Reglas de convivencia
- Todo lo de Trazo se maneja con
docker compose -p trazo …. - A los otros proyectos no se les reinicia ni recrea nada. Al proxy solo se le agrega una red y se le recarga la configuración, que no corta las conexiones abiertas.
Dónde está en el código
deploy.shynew-env.sh.docker-compose.prod.yml: secretos obligatorios, gateway sin puerto y redtrazo-proxy.real-ip.prod.conf: de qué red se acepta la IP del visitante.- Guía completa: Despliegue. Decisión: ADR-0088.