Production moved from on-prem VM 249 (10.22.68.249) to OVH VPS (57.128.200.27, inpi-vps-waw01). Updated ALL documentation, slash commands, memory files, architecture docs, and deploy procedures. Added |local_time Jinja filter (UTC→Europe/Warsaw) and converted 155 .strftime() calls across 71 templates so timestamps display in Polish timezone regardless of server timezone. Also includes: created_by_id tracking, abort import fix, ICS calendar fix for missing end times, Pros Poland data cleanup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
11 KiB
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
- 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 (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:
- 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 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
- Zaloguj się do OVH Manager: https://www.ovh.com/manager/
- Znajdź VPS inpi-vps-waw01
- Wykonaj reboot
- Poczekaj 2-3 minuty
- Zweryfikuj:
curl -I https://nordabiznes.pl/health
Opcja B: Pełne odtworzenie (nowy VPS lub VM)
- Utwórz nowy VPS w OVH lub VM w Proxmox
- Zainstaluj Ubuntu 22.04 LTS
- Postępuj zgodnie z sekcją 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:
- 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 nowego serwera
# 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
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 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
# 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
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 DNS (jeśli zmieniono IP)
Jeśli nowy serwer ma inny publiczny IP, zaktualizuj DNS w OVH:
# 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ł:
-
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@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
# 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