# NordaBiz Disaster Recovery Playbook **Wersja:** 1.1 **Data utworzenia:** 2026-02-02 **Ostatnia aktualizacja:** 2026-04-04 > **UWAGA (2026-04-04):** Produkcja przeniesiona z OVH VPS inpi-vps-waw01 (VM 249, 57.128.200.27) na OVH VPS (57.128.200.27, hostname inpi-vps-waw01). Deploy via rsync (brak .git na serwerze). Migracje: `sudo -u postgres psql nordabiz`. .env jest root-owned, skrypty wymagają `sudo`. --- ## 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 (OVH VPS — inpi-vps-waw01) ``` /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 — TYLKO STAGING) - **Lokalizacja:** Proxmox VE (hypervisor) - **VM ID:** 248 (NORDABIZ-STAGING-01), 119 (R11-REVPROXY-01) - **Storage:** local-lvm lub PBS - **Dostęp:** Proxmox Web UI (https://10.22.68.10:8006) - **UWAGA:** Produkcja nie jest na Proxmox — snapshoty dotyczą tylko staging i reverse proxy --- ## 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 serwera produkcyjnego (OVH VPS) **Objawy:** - Brak odpowiedzi SSH na 57.128.200.27 - HTTP 502 na https://nordabiznes.pl **Procedura:** #### Opcja A: Restart VPS via OVH Panel 1. Zaloguj się do OVH Manager: https://www.ovh.com/manager/ 2. Znajdź VPS inpi-vps-waw01 3. Wykonaj reboot 4. Poczekaj 2-3 minuty 5. Zweryfikuj: `curl -I https://nordabiznes.pl/health` #### Opcja B: Pełne odtworzenie (nowy VPS lub VM) 1. Utwórz nowy VPS w OVH lub VM w Proxmox 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), 60 min (opcja B) --- ### 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 nowego serwera ```bash # Na OVH Manager - utwórz VPS lub na Proxmox - utwórz VM: # - CPU: 4 vCPU # - RAM: 8 GB # - Disk: 100 GB SSD # - OS: Ubuntu 22.04 LTS # - Publiczny IP (jeśli OVH VPS) lub IP wewnętrzny (jeśli Proxmox) ``` #### 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 maciejpi:maciejpi /var/www/nordabiznes # Sync z lokalnej maszyny deweloperskiej (brak .git na serwerze!) rsync -avz --exclude='.git' --exclude='venv' --exclude='.env' \ /path/to/nordabiz/ maciejpi@57.128.200.27:/var/www/nordabiznes/ # Virtualenv cd /var/www/nordabiznes python3 -m venv venv 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 root:root /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 DNS (jeśli zmieniono IP) Jeśli nowy serwer ma inny publiczny IP, zaktualizuj DNS w OVH: ```bash # OVH Manager → nordabiznes.pl → DNS Zone → rekord A → NOWE_IP # Produkcja na OVH VPS ma publiczny IP — ruch nie przechodzi przez NPM (10.22.68.250) # NPM obsługuje tylko staging (staging.nordabiznes.pl) ``` --- ## 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@57.128.200.27 "sudo systemctl status nordabiznes" # Sprawdź logi ssh maciejpi@57.128.200.27 "sudo journalctl -u nordabiznes -n 50" # Sprawdź NPM (tylko staging) ssh maciejpi@10.22.68.250 "docker ps | grep nginx-proxy-manager" ``` --- ## 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