nordabiz/docs/DR-PLAYBOOK.md
Maciej Pienczyn a57187e05f
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
test: Add comprehensive testing infrastructure
- pytest framework with fixtures for auth (auth_client, admin_client)
- Unit tests for SearchService
- Integration tests for auth flow
- Security tests (OWASP Top 10: SQL injection, XSS, CSRF)
- Smoke tests for production health and backup monitoring
- E2E tests with Playwright (basic structure)
- DR tests for backup/restore procedures
- GitHub Actions CI/CD workflow (.github/workflows/test.yml)
- Coverage configuration (.coveragerc) with 80% minimum
- DR documentation and restore script

Staging environment: VM 248, staging.nordabiznes.pl

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 07:52:34 +01:00

10 KiB

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
  2. Lokalizacje backupów
  3. Scenariusze awarii
  4. Procedury odtwarzania
  5. Testy DR
  6. 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:

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

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):
    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
  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:

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:
    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

# 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

# 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)

# 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

# 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

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

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

# 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

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

# 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

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

# 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:

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

# 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

# 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

# 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

# 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