# Sikker Test Plan for Backup Restore ## ✅ SAFETY CHECKLIST ### Før test: - [x] **Emergency backup oprettet**: `/manual_backup_*/emergency_backup_before_restore_test.dump` - [x] **DRY_RUN mode aktiveret**: `BACKUP_RESTORE_DRY_RUN=true` (default) - [ ] **Test på ikke-kritisk data**: Slet eller ændr noget test-data først ### Test Fase 1: DRY-RUN (Sikker - ingen ændringer) ```bash # 1. Kør restore i DRY-RUN mode (gør INGENTING - kun logger) curl -X POST http://localhost:8001/api/v1/backups/restore/17 \ -H "Content-Type: application/json" \ -d '{"confirmation": true}' # Forventet: "DRY RUN MODE: Would restore..." i logs docker-compose logs api --tail 20 | grep "DRY RUN" ``` ### Test Fase 2: Recovery Test (Valgfri) ```bash # 2. Lav en lille test-ændring i databasen docker-compose exec postgres psql -U bmc_hub -d bmc_hub -c \ "INSERT INTO backup_jobs (job_type, status, backup_format, started_at) VALUES ('database', 'completed', 'dump', NOW());" # 3. Tjek at test-data findes docker-compose exec postgres psql -U bmc_hub -d bmc_hub -c \ "SELECT COUNT(*) FROM backup_jobs;" # 4. Restore fra backup (DISABLED indtil du er klar) # echo "BACKUP_RESTORE_DRY_RUN=false" >> .env # docker-compose restart api # curl -X POST http://localhost:8001/api/v1/backups/restore/16 -H "Content-Type: application/json" -d '{"confirmation": true}' # 5. Verificer at test-data er væk (restore virkede) docker-compose exec postgres psql -U bmc_hub -d bmc_hub -c \ "SELECT COUNT(*) FROM backup_jobs;" ``` ### Emergency Recovery (hvis noget går galt) ```bash # Restore fra emergency backup docker-compose exec postgres dropdb -U bmc_hub --if-exists bmc_hub docker-compose exec postgres createdb -U bmc_hub bmc_hub docker-compose exec postgres pg_restore -U bmc_hub -d bmc_hub -Fc < \ manual_backup_*/emergency_backup_before_restore_test.dump # Genstart API docker-compose restart api ``` ## 🛡️ SAFETY FEATURES I KODEN 1. **BACKUP_RESTORE_DRY_RUN=true** (default) - blokerer alle restores 2. **BACKUP_READ_ONLY=true** - blokerer restores hvis sat 3. **Checksum verification** - verificerer fil integritet før restore 4. **File lock** - forhindrer concurrent restores 5. **Maintenance mode** - sætter system i maintenance under restore ## ⚠️ VIGTIG ADVARSEL **RESTORE OVERSKRIVER AL DATA I DATABASEN!** Før du deaktiverer DRY-RUN mode: 1. Tag ALTID en emergency backup først (allerede gjort ✅) 2. Test på en development/staging server først 3. Sørg for at backup filen er den rigtige 4. Kommuniker med brugere hvis på produktion ## 🚀 Når du er klar til rigtig restore: 1. Tilføj i `.env`: ``` BACKUP_RESTORE_DRY_RUN=false ``` 2. Genstart API: ```bash docker-compose restart api ``` 3. Test restore via UI eller curl --- **Oprettet**: 2. januar 2026 **Emergency Backup**: manual_backup_20260102_103605/emergency_backup_before_restore_test.dump (2.8MB)