fix(backup): respaldar TODO (DB + secrets + caddy + systemd) atómicamente
Bug: el script previo solo respaldaba la BD donna. /etc/donna/donna.env, /etc/caddy/Caddyfile y los systemd units quedaban sin respaldo. Además, si mariadb-dump fallaba a media corrida el .sql.gz parcial quedaba como si fuera válido (se vio hoy con un archivo de 20 bytes). Cambios: - Output ahora es un solo tar.gz con DB + GRANTs + configs + MANIFEST (sha256 de cada archivo incluido) - Atómico: tar se escribe a .tmp y se renombra solo al final - Incluye SHOW GRANTS para poder recrear el usuario donna_app en un server nuevo sin tener que conocer el password de root del MariaDB - Limpieza de archivos .sql.gz legacy también en la retención - README documenta el procedimiento de restore en server nuevo
This commit is contained in:
@@ -336,11 +336,37 @@ Colores por tipo de evento manual:
|
||||
|
||||
## Backups
|
||||
|
||||
`donna-backup.timer` ejecuta diariamente a las 03:00 (jitter ±5min) y vuelca `donna` comprimido a `/var/backups/donna/donna-YYYY-MM-DD_HHMMSS.sql.gz`. Retención 14 días.
|
||||
`donna-backup.timer` ejecuta diariamente a las 03:00 (jitter ±5min) y genera `/var/backups/donna/donna-YYYY-MM-DD_HHMMSS.tar.gz`. Retención 14 días. Atómico: el `.tmp` se renombra al final solo si todo salió bien (no quedan archivos parciales).
|
||||
|
||||
Restaurar:
|
||||
Contenido del tarball:
|
||||
```
|
||||
donna-YYYY-MM-DD_HHMMSS/
|
||||
├── MANIFEST.txt ← inventario + tamaños + SHA-256 de cada archivo
|
||||
├── db/
|
||||
│ ├── schema-and-data.sql.gz ← mariadb-dump completo (schema + data + routines + triggers + events)
|
||||
│ └── grants.sql ← SHOW GRANTS del usuario donna_app
|
||||
└── etc/
|
||||
├── donna/donna.env ← secrets (OAuth, DB pass, APP_SECRET)
|
||||
├── caddy/Caddyfile ← config del Caddy local
|
||||
└── systemd/system/
|
||||
├── donna-backup.service
|
||||
└── donna-backup.timer
|
||||
```
|
||||
|
||||
Restaurar en un server nuevo:
|
||||
```bash
|
||||
gunzip -c /var/backups/donna/donna-YYYY-MM-DD_HHMMSS.sql.gz | mariadb donna
|
||||
TAR=/path/to/donna-YYYY-MM-DD_HHMMSS.tar.gz
|
||||
tar -xzf "$TAR" -C /tmp && cd /tmp/donna-*
|
||||
# 1. Configs
|
||||
cp etc/donna/donna.env /etc/donna/donna.env && chmod 640 /etc/donna/donna.env
|
||||
cp etc/caddy/Caddyfile /etc/caddy/Caddyfile && systemctl reload caddy
|
||||
cp etc/systemd/system/* /etc/systemd/system/ && systemctl daemon-reload
|
||||
# 2. DB (crea DB y usuario primero)
|
||||
mariadb -e "CREATE DATABASE donna CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
mariadb < db/grants.sql # recrea el usuario y sus permisos
|
||||
gunzip -c db/schema-and-data.sql.gz | mariadb donna
|
||||
# 3. Verificar
|
||||
sha256sum -c <(grep -E '^[a-f0-9]{64}' MANIFEST.txt) # checksums OK?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user