Despliegue continuo: de git push a producción
Despliegue continuo: de git push a producción
Este post es un poco especial: es el primero que se publica solo. No he entrado
al servidor, no he ejecutado ningún comando de despliegue a mano. Simplemente he
hecho git push desde mi portátil y el resto ha ocurrido sin intervención.
Las piezas
El blog es un sitio estático (Astro compila todo a HTML en el build), así que en producción no hace falta ni Node ni un servidor de aplicaciones: basta con servir archivos. Las piezas encajan así:
- Astro compila el contenido a
dist/. - Un Dockerfile multi-stage hace ese build dentro de una etapa con Node y deja una imagen final que es solo nginx + los estáticos (sin Node).
- nginx, tras Traefik, sirve el sitio.
- Un runner de Forgejo Actions en mi homelab orquesta todo cuando detecta un push.
El flujo
Al empujar a main, el runner ejecuta un par de comandos en el servidor:
git -C server pull --ff-only
docker compose up -d --build
Si un post rompe el build, la imagen no se llega a construir y el contenedor anterior sigue en pie: la peor consecuencia de un error es que no se publique, nunca que el blog se caiga.
Lo que he aprendido
Montar esto me ha obligado a entender cosas que como desarrollador solía dar por sentadas: la diferencia entre estático y SSR, por qué una imagen multi-stage no necesita arrastrar Node, y cómo un runner se conecta a Forgejo sin exponer puertos.
Si estás leyendo esto, es que el experimento ha funcionado. 🎉