ADR-0003 · Deploy por git pull + hot-reload en la VM, con imágenes latest¶
- Estado: aceptado
- Decisores: Hugo Quintero (único autor del repo)
- Fecha de la decisión: no registrada. El workflow existe desde el primer
commit del repo (2026-03-11,
1390638).
Contexto y problema¶
El stack es solo configuración (YAML, reglas, dashboards JSON). Cambiar un umbral o un target debía llegar a producción en minutos, sin construir imágenes ni interrumpir la recolección de métricas. Trabaja una sola persona, sin entorno de staging del stack.
Opciones consideradas¶
- GitHub Actions entra por SSH a la VM, hace
git pullsobre el checkout demainen/opt/monitoring, llama a/-/reloadde Prometheus y Alertmanager y corredocker compose up -d --remove-orphans. - Construir imágenes con la config incluida y desplegarlas por tag.
- Gestor de configuración (Ansible) o GitOps con agente en la VM.
No hay registro escrito de la evaluación.
Decisión¶
Opción 1. El repo es el estado desplegado: lo que está en main es lo
que corre. Prometheus habilita --web.enable-lifecycle para el reload
caliente. Las imágenes de Prometheus, Alertmanager, Grafana y Blackbox se
usan con tag latest; solo Loki está fijado (3.0.0).
Consecuencias¶
Positivas¶
- Deploy en menos de un minuto y sin reiniciar Prometheus: no se pierden
scrapes ni se corta el
remote_write. - Rollback =
git revert(ver runbook). Historial completo de cada cambio de umbral o target.
Negativas / deuda asumida¶
git pullexige que el árbol en la VM esté limpio y enmain; un cambio hecho a mano en el servidor deja el próximo deploy en conflicto.- No hay validación previa (
promtool check config) en el workflow y loscurl -sde reload no usan-f: una regla mal escrita hace fallar el-/reload, Prometheus sigue con la config anterior y Actions queda en verde igual. - Tag
latest: undocker compose pullo una recreación del contenedor puede traer una versión mayor nueva de Prometheus/Grafana sin aviso, y no hay forma de volver a la anterior desde el repo. Fijar versiones es la deuda que más se re-discute. - El reload no cubre
blackbox.yml,loki/config.ymlni cambios de datasources de Grafana: esos requieren reiniciar el contenedor a mano.