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
- 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>
10 KiB
10 KiB
NordaBiz Disaster Recovery Playbook
Wersja: 1.0 Data utworzenia: 2026-02-02 Ostatnia aktualizacja: 2026-02-02
Spis treści
- Przegląd systemu backupów
- Lokalizacje backupów
- Scenariusze awarii
- Procedury odtwarzania
- Testy DR
- 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:
- Zatrzymaj aplikację:
sudo systemctl stop nordabiznes - Zidentyfikuj ostatni działający backup
- Użyj skryptu restore:
sudo ./scripts/dr-restore.sh /var/backups/nordabiz/hourly/latest.dump - 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
- Zaloguj się do Proxmox: https://10.22.68.10:8006
- VM 249 → Stop → Start
- Poczekaj 2-3 minuty
- Zweryfikuj:
curl -I https://nordabiznes.pl/health
Opcja B: Rollback do snapshotu
- Proxmox → VM 249 → Snapshots
- Wybierz ostatni działający snapshot
- Kliknij "Rollback"
- Start VM
- Zweryfikuj
Opcja C: Pełne odtworzenie (nowa VM)
- Utwórz nową VM w Proxmox (4 vCPU, 8GB RAM, 100GB SSD)
- Zainstaluj Ubuntu 22.04 LTS
- 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:
- NATYCHMIAST odłącz VM od sieci (Proxmox → VM → Network → Disconnect)
- Utwórz snapshot stanu (dla forensics)
- Przywróć z offsite backup (PBS):
scp maciejpi@10.22.68.127:/backup/nordabiz/daily/nordabiz_YYYYMMDD.dump /tmp/ - Utwórz nową VM (nie używaj starej!)
- Postępuj zgodnie z Pełne odtworzenie systemu
- Zmień wszystkie hasła i klucze API
- 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:
- SSH do R11-REVPROXY-01:
ssh maciejpi@10.22.68.250 - Sprawdź container:
docker ps | grep nginx-proxy-manager - Restart containera:
docker restart nginx-proxy-manager_app_1 - Jeśli nie działa, sprawdź logi:
docker logs nginx-proxy-manager_app_1 - 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ł:
-
Przygotowanie:
- Utwórz testową VM w Proxmox
- Skopiuj backup z PBS
-
Wykonanie:
- Pełne odtworzenie zgodnie z procedurą
- Zmierz czas (RTO)
- Zweryfikuj działanie aplikacji
-
Dokumentacja:
- Zapisz wyniki w
docs/DR-TEST-RESULTS.md - Zaktualizuj procedury jeśli potrzeba
- Zapisz wyniki w
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