# NordaBiz Disaster Recovery Playbook

**Wersja:** 1.0
**Data utworzenia:** 2026-02-02
**Ostatnia aktualizacja:** 2026-02-02

---

## Spis treści

1. [Przegląd systemu backupów](#przegląd-systemu-backupów)
2. [Lokalizacje backupów](#lokalizacje-backupów)
3. [Scenariusze awarii](#scenariusze-awarii)
4. [Procedury odtwarzania](#procedury-odtwarzania)
5. [Testy DR](#testy-dr)
6. [Kontakty i eskalacja](#kontakty-i-eskalacja)

---

## Przegląd systemu backupów

### Metryki SLA

| Metryka | Wartość | Opis |
|---------|---------|------|
| **RTO** | 30-60 min | Recovery Time Objective - czas do przywrócenia |
| **RPO** | 1 godzina | Recovery Point Objective - maksymalna utrata danych |
| **Retencja hourly** | 24 godziny | Backupy co godzinę |
| **Retencja daily** | 30 dni | Backupy dzienne |
| **Offsite** | PBS (10.22.68.127) | Proxmox Backup Server |

### Harmonogram backupów

| Typ | Częstotliwość | Godzina | Retencja |
|-----|---------------|---------|----------|
| Hourly DB | Co godzinę | :00 | 24h |
| Daily DB | Codziennie | 02:00 | 30 dni |
| Config | Tygodniowo | Niedziela 03:00 | 4 tygodnie |
| Offsite sync | Codziennie | 04:00 | 30 dni |
| VM Snapshot | Przed deployment | Manual | 3 snapshoty |

---

## Lokalizacje backupów

### Backup lokalny (NORDABIZ-01)

```
/var/backups/nordabiz/
├── hourly/                    # Backupy co godzinę (retencja 24h)
│   ├── nordabiz_20260202_00.dump
│   ├── nordabiz_20260202_01.dump
│   └── ...
├── daily/                     # Backupy dzienne (retencja 30 dni)
│   ├── nordabiz_20260201.dump
│   ├── nordabiz_20260202.dump
│   └── ...
└── config/                    # Konfiguracja (retencja 4 tygodnie)
    ├── config_20260126.tar.gz
    └── config_20260202.tar.gz
```

### Backup offsite (PBS - 10.22.68.127)

```
/backup/nordabiz/
├── daily/                     # Mirror backupów dziennych
└── config/                    # Mirror konfiguracji
```

### VM Snapshots (Proxmox)

- **Lokalizacja:** Proxmox VE (hypervisor)
- **VM ID:** 249 (NORDABIZ-01), 119 (R11-REVPROXY-01)
- **Storage:** local-lvm lub PBS
- **Dostęp:** Proxmox Web UI (https://10.22.68.10:8006)

---

## Scenariusze awarii

### Scenariusz 1: Uszkodzenie bazy danych

**Objawy:**
- Błędy SQL w logach aplikacji
- HTTP 500 na stronie
- `psql: FATAL: database "nordabiz" does not exist`

**Procedura:**
1. Zatrzymaj aplikację: `sudo systemctl stop nordabiznes`
2. Zidentyfikuj ostatni działający backup
3. Użyj skryptu restore: `sudo ./scripts/dr-restore.sh /var/backups/nordabiz/hourly/latest.dump`
4. Zweryfikuj: `curl -I http://localhost:5000/health`

**RTO:** ~15 minut

---

### Scenariusz 2: Awaria VM (NORDABIZ-01)

**Objawy:**
- Brak odpowiedzi SSH
- HTTP 502 na https://nordabiznes.pl
- VM nie odpowiada w Proxmox

**Procedura:**

#### Opcja A: Restart VM
1. Zaloguj się do Proxmox: https://10.22.68.10:8006
2. VM 249 → Stop → Start
3. Poczekaj 2-3 minuty
4. Zweryfikuj: `curl -I https://nordabiznes.pl/health`

#### Opcja B: Rollback do snapshotu
1. Proxmox → VM 249 → Snapshots
2. Wybierz ostatni działający snapshot
3. Kliknij "Rollback"
4. Start VM
5. Zweryfikuj

#### Opcja C: Pełne odtworzenie (nowa VM)
1. Utwórz nową VM w Proxmox (4 vCPU, 8GB RAM, 100GB SSD)
2. Zainstaluj Ubuntu 22.04 LTS
3. Postępuj zgodnie z sekcją [Pełne odtworzenie systemu](#pełne-odtworzenie-systemu)

**RTO:** 5 min (opcja A), 10 min (opcja B), 60 min (opcja C)

---

### Scenariusz 3: Ransomware / kompromitacja

**Objawy:**
- Zaszyfrowane pliki
- Nieautoryzowane zmiany w bazie
- Podejrzana aktywność w logach

**Procedura:**
1. **NATYCHMIAST** odłącz VM od sieci (Proxmox → VM → Network → Disconnect)
2. Utwórz snapshot stanu (dla forensics)
3. Przywróć z offsite backup (PBS):
   ```bash
   scp maciejpi@10.22.68.127:/backup/nordabiz/daily/nordabiz_YYYYMMDD.dump /tmp/
   ```
4. Utwórz nową VM (nie używaj starej!)
5. Postępuj zgodnie z [Pełne odtworzenie systemu](#pełne-odtworzenie-systemu)
6. Zmień wszystkie hasła i klucze API
7. Zgłoś incydent bezpieczeństwa

**RTO:** 60-120 minut

---

### Scenariusz 4: Awaria NPM (Reverse Proxy)

**Objawy:**
- ERR_CONNECTION_REFUSED na https://nordabiznes.pl
- NPM container nie działa

**Procedura:**
1. SSH do R11-REVPROXY-01: `ssh maciejpi@10.22.68.250`
2. Sprawdź container: `docker ps | grep nginx-proxy-manager`
3. Restart containera: `docker restart nginx-proxy-manager_app_1`
4. Jeśli nie działa, sprawdź logi: `docker logs nginx-proxy-manager_app_1`
5. Zweryfikuj konfigurację proxy:
   ```bash
   docker exec nginx-proxy-manager_app_1 sqlite3 /data/database.sqlite \
     "SELECT forward_port FROM proxy_host WHERE id = 27;"
   # Musi być: 5000
   ```

**RTO:** 5-10 minut

---

## Procedury odtwarzania

### Przywracanie z backupu godzinowego

```bash
# 1. Lista dostępnych backupów
ls -la /var/backups/nordabiz/hourly/

# 2. Wybierz backup (np. z godziny 14:00)
BACKUP_FILE="/var/backups/nordabiz/hourly/nordabiz_20260202_14.dump"

# 3. Uruchom skrypt restore
sudo /var/www/nordabiznes/scripts/dr-restore.sh $BACKUP_FILE

# 4. Weryfikacja
curl -I http://localhost:5000/health
```

### Przywracanie z backupu dziennego

```bash
# 1. Lista backupów dziennych
ls -la /var/backups/nordabiz/daily/

# 2. Uruchom restore
sudo /var/www/nordabiznes/scripts/dr-restore.sh /var/backups/nordabiz/daily/nordabiz_20260201.dump
```

### Przywracanie z offsite (PBS)

```bash
# 1. Skopiuj backup z PBS
scp maciejpi@10.22.68.127:/backup/nordabiz/daily/nordabiz_20260201.dump /tmp/

# 2. Uruchom restore
sudo /var/www/nordabiznes/scripts/dr-restore.sh /tmp/nordabiz_20260201.dump
```

### Pełne odtworzenie systemu

Wykonaj gdy VM jest całkowicie niedostępna lub skompromitowana.

#### Krok 1: Przygotowanie nowej VM

```bash
# Na Proxmox - utwórz VM:
# - ID: 249 (lub nowy)
# - CPU: 4 vCPU
# - RAM: 8 GB
# - Disk: 100 GB SSD
# - Network: vmbr0
# - IP: 10.22.68.249/24
# - Gateway: 10.22.68.1
# - OS: Ubuntu 22.04 LTS
```

#### Krok 2: Instalacja pakietów

```bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip postgresql-14 git nginx rsync
```

#### Krok 3: Konfiguracja PostgreSQL

```bash
sudo -u postgres createuser nordabiz_app
sudo -u postgres createdb nordabiz -O nordabiz_app
sudo -u postgres psql -c "ALTER USER nordabiz_app WITH PASSWORD 'NOWE_HASLO';"
```

#### Krok 4: Przywrócenie bazy z backup

```bash
# Skopiuj backup z PBS
scp maciejpi@10.22.68.127:/backup/nordabiz/daily/nordabiz_LATEST.dump /tmp/

# Restore
sudo -u postgres pg_restore -d nordabiz -O --role=nordabiz_app /tmp/nordabiz_LATEST.dump

# Nadaj uprawnienia
sudo -u postgres psql -d nordabiz -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO nordabiz_app;"
sudo -u postgres psql -d nordabiz -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO nordabiz_app;"
```

#### Krok 5: Instalacja aplikacji

```bash
sudo mkdir -p /var/www/nordabiznes
sudo chown www-data:www-data /var/www/nordabiznes

# Clone z Gitea
sudo -u www-data git clone https://10.22.68.180:3000/maciejpi/nordabiz.git /var/www/nordabiznes

# Virtualenv
cd /var/www/nordabiznes
sudo -u www-data python3 -m venv venv
sudo -u www-data venv/bin/pip install -r requirements.txt
```

#### Krok 6: Przywrócenie konfiguracji

```bash
# Skopiuj .env z backup
scp maciejpi@10.22.68.127:/backup/nordabiz/config/latest/.env /var/www/nordabiznes/.env
sudo chown www-data:www-data /var/www/nordabiznes/.env
sudo chmod 600 /var/www/nordabiznes/.env

# WAŻNE: Zaktualizuj DATABASE_URL w .env jeśli zmieniłeś hasło!
```

#### Krok 7: Konfiguracja systemd

```bash
sudo cp /var/www/nordabiznes/docs/nordabiznes.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable nordabiznes
sudo systemctl start nordabiznes
```

#### Krok 8: Weryfikacja

```bash
# Status usługi
sudo systemctl status nordabiznes

# Health check
curl -I http://localhost:5000/health

# Logi
sudo journalctl -u nordabiznes -f
```

#### Krok 9: Aktualizacja NPM (jeśli zmieniono IP)

Jeśli nowa VM ma inny IP, zaktualizuj NPM:

```bash
ssh maciejpi@10.22.68.250
# NPM Admin: http://10.22.68.250:81
# Proxy Host 27 → Forward Host: NOWE_IP, Port: 5000
```

---

## Testy DR

### Test kwartalny

Wykonuj co kwartał:

1. **Przygotowanie:**
   - Utwórz testową VM w Proxmox
   - Skopiuj backup z PBS

2. **Wykonanie:**
   - Pełne odtworzenie zgodnie z procedurą
   - Zmierz czas (RTO)
   - Zweryfikuj działanie aplikacji

3. **Dokumentacja:**
   - Zapisz wyniki w `docs/DR-TEST-RESULTS.md`
   - Zaktualizuj procedury jeśli potrzeba

### Checklist testu DR

- [ ] Backup istnieje i jest aktualny (< 1h)
- [ ] Backup offsite zsynchronizowany (< 24h)
- [ ] Skrypt dr-restore.sh działa
- [ ] Aplikacja startuje po restore
- [ ] Health check zwraca HTTP 200
- [ ] Dane są kompletne (sprawdź liczbę firm)
- [ ] Chat AI działa (testowe pytanie)
- [ ] Logowanie działa

---

## Kontakty i eskalacja

### Poziomy eskalacji

| Poziom | Czas reakcji | Kto |
|--------|--------------|-----|
| L1 | < 15 min | Administrator (self-service) |
| L2 | < 1h | Wsparcie techniczne |
| L3 | < 4h | Eskalacja do dostawcy |

### Komendy diagnostyczne

```bash
# Quick health check
curl -I https://nordabiznes.pl/health

# Sprawdź status usługi
ssh maciejpi@10.22.68.249 "sudo systemctl status nordabiznes"

# Sprawdź logi
ssh maciejpi@10.22.68.249 "sudo journalctl -u nordabiznes -n 50"

# Sprawdź NPM
ssh maciejpi@10.22.68.250 "docker ps | grep nginx-proxy-manager"

# Sprawdź port forwarding
ssh maciejpi@10.22.68.250 "docker exec nginx-proxy-manager_app_1 sqlite3 /data/database.sqlite \"SELECT forward_port FROM proxy_host WHERE id = 27;\""
```

---

## Appendix: Komendy referencyjne

### Backup

```bash
# Ręczny backup bazy
sudo -u postgres pg_dump -Fc nordabiz > /tmp/backup_manual.dump

# Backup konfiguracji
sudo tar -czf /tmp/config_backup.tar.gz /var/www/nordabiznes/.env /etc/systemd/system/nordabiznes.service
```

### Restore

```bash
# Szybki restore (skrypt)
sudo /var/www/nordabiznes/scripts/dr-restore.sh /var/backups/nordabiz/hourly/latest.dump

# Ręczny restore
sudo systemctl stop nordabiznes
sudo -u postgres dropdb nordabiz
sudo -u postgres createdb nordabiz -O nordabiz_app
sudo -u postgres pg_restore -d nordabiz -O /tmp/backup.dump
sudo systemctl start nordabiznes
```

### Monitoring

```bash
# Sprawdź rozmiar backupów
du -sh /var/backups/nordabiz/*

# Sprawdź ostatni backup
ls -lt /var/backups/nordabiz/hourly/ | head -5

# Sprawdź cron
cat /etc/cron.d/nordabiz-backup
```

---

**Dokument utrzymywany przez:** Zespół NordaBiz
**Następny przegląd:** 2026-05-02
