Capa 7 — Backups Postgres¶
Qué hace¶
Un systemd timer (qrsgen-postgres-backup.timer) ejecuta pg_dump -Fc
de la DB bridge cada día a las 03:00 local. Layout en
/opt/qrsgen-stack/backups/:
daily/ qrsgen-bridge-YYYYMMDD-HHMM.dump (retención 7 días)
weekly/ qrsgen-bridge-YYYY-WW.dump (retención 4 semanas, copia los domingos)
El timer ejecuta como root (necesita acceso a docker socket). Logs en
journalctl -u qrsgen-postgres-backup.service.
Qué mitiga¶
Pérdida o corrupción de la DB:
- Disco del VPS dañado.
- DROP TABLE accidental (incluido el audit log — recuerda: el trigger bloquea UPDATE/DELETE de filas, no la tabla entera).
- Migración fallida que deja la DB en estado inconsistente.
Cómo verificarla¶
# Disparar backup manual:
sudo systemctl start qrsgen-postgres-backup.service
sudo journalctl -u qrsgen-postgres-backup.service -n 20
# Verificar dump:
ls -lh /opt/qrsgen-stack/backups/daily/
# Probar restore en un DB de pruebas (NO en la prod):
docker exec -i postgres pg_restore -l < latest.dump | head -20
Runbook de restore completo:
ops/backup/README.md.
Limitación¶
Los backups están en el mismo VPS. Si el VPS se quema, se pierden.
Para producción crítica, configura un ExecStartPost= en el .service
que pushee el dump a S3/Backblaze/Wasabi.
Glosario¶
Backup: copia de seguridad de los datos. Para qrsgen son dumps
periódicos de la base de datos bridge.
pg_dump: utilidad oficial de Postgres para exportar una base de
datos a un fichero. qrsgen usa el formato custom -Fc (binario,
comprimido).
Custom format (-Fc): formato binario de pg_dump que permite
restore selectivo (solo una tabla, solo el schema, etc.) y es mucho
más rápido que SQL plano.
systemd timer: equivalente moderno a cron en Linux con journald.
Lanza un .service en horario calendario. qrsgen lo usa para backup
diario a las 03:00.
Retención: política sobre cuánto tiempo mantener cada backup generado. qrsgen tiene 7 días daily + 4 semanas weekly (rotación dominical) configurables vía drop-in.
Off-site backup: copia almacenada en una infraestructura distinta al servidor primario. Protege contra pérdida del VPS entero (fuego, borrado accidental por el provider, etc.).
Drop-in: archivo .conf en /etc/systemd/system/<unit>.d/ que
extiende o modifica una unit systemd sin tocar el archivo original.
Útil para personalizar ExecStartPost=.
ExecStartPost: hook de systemd que ejecuta un comando después de
que el ExecStart principal termine con éxito. Aquí pushea el dump a
S3/Backblaze/Wasabi.
Restore selectivo: capacidad de restaurar solo una tabla o un
schema concreto del backup. Requiere formato custom (-Fc).