Files

62 lines
2.1 KiB
Markdown

# Procedimiento de recuperación — DH V2
Este documento es un runbook para incidentes. No debe ejecutarse durante un
deploy normal.
## Principios
- identificar exactamente el backup a utilizar;
- verificar `SHA256SUMS` antes de cualquier cambio;
- generar un backup de seguridad del estado actual;
- no usar `docker compose down -v`;
- no eliminar `dhv2_pgdata`;
- no eliminar `dhv2_asset_media`;
- detener únicamente API y web mientras se recupera la base;
- conservar el `.env` actual salvo que el incidente requiera recuperar el del backup;
- validar primero el dump con `scripts/verify-backup.sh`.
## Verificación previa
```bash
cd /var/www/dhv2.korexlabs.com
bash scripts/verify-backup.sh /var/www/dh-backup/dhv2-BACKUP-ELEGIDO
```
## Orden de recuperación
1. Registrar el motivo, fecha y backup seleccionado.
2. Ejecutar `scripts/backup-phase-a.sh pre-restore`.
3. Verificar ambos backups.
4. Detener `api` y `web`, manteniendo `db` activo.
5. Extraer `source.tar.gz` en un directorio temporal, no sobre producción.
6. Revisar su contenido y recién entonces reemplazar los fuentes.
7. Restaurar `database.dump` con el usuario owner y `pg_restore`.
8. Si el backup contiene `asset-media.tar.gz`, restaurarlo en el volumen
`dhv2_asset_media` antes de iniciar la API.
9. Ejecutar `migration:show` y aplicar sólo migraciones pendientes conocidas.
10. Reconstruir API y web.
11. Ejecutar health interno y externo.
12. Ejecutar la aceptación de la fase y una descarga autenticada conocida.
13. Conservar el backup anterior hasta confirmar estabilidad.
La restauración de la base reemplaza datos y requiere una autorización
específica para el incidente. Por ese motivo no se incluye un script automático
que borre o sobrescriba producción.
## Validación posterior
```text
health interno y externo: ok
database: ok
versión esperada
Pending migrations: no
login: 200
endpoints administrativos con sesión: 200
endpoints administrativos sin sesión: 401
logout: sesión revocada
contenedores: Up
logs: sin errores de bootstrap
volumen dhv2_asset_media: montado y escribible
fotografía o documento conocido: descarga íntegra
```