thecr3w-dev/docs/BACKUP-RESTORE.md

59 lines
1.9 KiB
Markdown

# THECR3W-DEV — STRATEGIA BACKUPU I ODTWARZANIA AWARYJNEGO (DISASTER RECOVERY)
## Wersja: 1.0.0 | Data: 2026-10-31
---
## 1. Cele RPO i RTO
- **RPO (Recovery Point Objective):** Maksymalnie 6 godzin dla bazy danych PostgreSQL.
- **RTO (Recovery Time Objective):** Maksymalnie 30 minut na pełne przywrócenie środowiska kontenerowego na serwerze Netcup VPS.
---
## 2. Zakres Backupu
1. **Baza Danych PostgreSQL (`thecr3w-postgres`):**
- Wszystkie tabele metadanych wydań, kluczy, manifestów wdrożeniowych oraz dziennik audytowy `audit_events`.
2. **Konfiguracja Serwera i Reverse Proxy:**
- `/opt/proxy/Caddyfile` oraz certyfikaty TLS.
- Zmienne środowiskowe `.env` dla usług TheCr3w-dev.
3. **Magazyn Artefaktów (Cloudflare R2):**
- Bucket `thecr3w-app` posiada wbudowaną redundancję geograficzną w chmurze Cloudflare.
---
## 3. Procedura Wykonywania Kopii Zapasowej (Automatyczny Cron)
Skrypt wykonywany codziennie o godzinie 02:00 UTC:
```bash
#!/usr/bin/env bash
set -eo pipefail
BACKUP_DIR="/opt/backups/thecr3w"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "${BACKUP_DIR}"
# 1. Zrzut bazy PostgreSQL bez zatrzymywania kontenera
docker exec -t thecr3w-postgres pg_dump -U thecr3w_user thecr3w_db | gzip > "${BACKUP_DIR}/thecr3w_db_${TIMESTAMP}.sql.gz"
# 2. Kopia Caddyfile
cp /opt/proxy/Caddyfile "${BACKUP_DIR}/Caddyfile_${TIMESTAMP}"
# 3. Retencja: usuwanie kopii starszych niż 30 dni
find "${BACKUP_DIR}" -type f -name "*.sql.gz" -mtime +30 -delete
```
---
## 4. Procedura Odtwarzania Awaryjnego (Restore Runbook)
```bash
# 1. Uruchomienie nowej bazy
docker compose -f /opt/thecr3w/docker-compose.prod.yml up -d thecr3w-postgres
# 2. Przywrócenie danych ze skompresowanego zrzutu SQL
gunzip -c /opt/backups/thecr3w/thecr3w_db_YYYYMMDD_HHMMSS.sql.gz | docker exec -i thecr3w-postgres psql -U thecr3w_user -d thecr3w_db
# 3. Uruchomienie backendu i frontendu
docker compose -f /opt/thecr3w/docker-compose.prod.yml up -d
```