# NordaBiz Backup Operations

Wykonaj backup bazy danych i konfiguracji projektu NordaBiz.

## Argument: $ARGUMENTS
Opcjonalny argument określa typ backupu:
- `/backup` - pełny backup (DB + pliki)
- `/backup db` - tylko baza danych
- `/backup snapshot` - snapshot VM w Proxmox
- `/backup restore` - przywracanie (interaktywne)
- `/backup status` - sprawdź status automatycznych backupów

## System automatycznych backupów

### Harmonogram (cron na NORDABIZ-01)

| Typ | Częstotliwość | Godzina | Retencja | Lokalizacja |
|-----|---------------|---------|----------|-------------|
| Hourly | Co godzinę | :00 | 24h | `/var/backups/nordabiz/hourly/` |
| Daily | Codziennie | 02:00 | 30 dni | `/var/backups/nordabiz/daily/` |
| Offsite | Codziennie | 04:00 | 30 dni | PBS (10.22.68.127) |
| Config | Tygodniowo | Niedziela 03:00 | 4 tyg | `/var/backups/nordabiz/config/` |

### Sprawdzenie statusu backupów

```bash
# Ostatnie backupy hourly
ssh maciejpi@10.22.68.249 "ls -lt /var/backups/nordabiz/hourly/ | head -5"

# Ostatnie backupy daily
ssh maciejpi@10.22.68.249 "ls -lt /var/backups/nordabiz/daily/ | head -5"

# Sprawdź offsite (PBS)
ssh maciejpi@10.22.68.127 "ls -lt /backup/nordabiz/daily/ | head -5"

# Rozmiar backupów
ssh maciejpi@10.22.68.249 "du -sh /var/backups/nordabiz/*"
```

## Kroki do wykonania:

### 1. Backup lokalnej bazy PostgreSQL (DEV via Docker)
```bash
mkdir -p backups
docker exec nordabiz-postgres pg_dump -U nordabiz_app nordabiz > "backups/dev_$(date +%Y%m%d_%H%M%S).sql"
```

### 2. Backup produkcyjnej bazy PostgreSQL
Eksport do lokalnego:
```bash
ssh maciejpi@10.22.68.249 "sudo -u postgres pg_dump nordabiz" > "backups/prod_$(date +%Y%m%d_%H%M%S).sql"
```

Lub backup na serwerze:
```bash
ssh maciejpi@10.22.68.249 "sudo -u postgres pg_dump -Fc nordabiz > /tmp/backup_$(date +%Y%m%d_%H%M%S).dump"
```

### 3. Backup plików konfiguracyjnych
```bash
mkdir -p backups/config_$(date +%Y%m%d)
cp .env backups/config_$(date +%Y%m%d)/dev.env
ssh maciejpi@10.22.68.249 "cat /var/www/nordabiznes/.env" > backups/config_$(date +%Y%m%d)/prod.env
ssh maciejpi@10.22.68.249 "cat /etc/nginx/sites-available/nordabiznes" > backups/config_$(date +%Y%m%d)/nginx.conf
```

### 4. Snapshot VM w Proxmox
Użyj skill `proxmox-manager`:
```
Utwórz snapshot VM NORDABIZ-01 (ID: 249) z opisem "Backup przed [operacja]"
```

Lub ręcznie:
```bash
ssh root@10.22.68.10 "qm snapshot 249 backup_$(date +%Y%m%d) --description 'Automatyczny backup'"
```

### 5. Lista istniejących backupów
Lokalne:
```bash
ls -la backups/*.sql 2>/dev/null
```

Snapshoty VM (użyj skill proxmox-manager):
```
Pokaż snapshoty VM 249
```

### 6. Przywracanie z backupu

#### Szybkie przywracanie (skrypt DR)
```bash
ssh maciejpi@10.22.68.249 "sudo /var/www/nordabiznes/scripts/dr-restore.sh /var/backups/nordabiz/hourly/nordabiz_YYYYMMDD_HH.dump"
```

#### DEV (Docker PostgreSQL):
```bash
docker exec -i nordabiz-postgres psql -U nordabiz_app -d nordabiz < backups/dev_YYYYMMDD_HHMMSS.sql
```

#### PROD (PostgreSQL):
```bash
cat backups/prod_YYYYMMDD_HHMMSS.sql | ssh maciejpi@10.22.68.249 "sudo -u postgres psql nordabiz"
```

#### Rollback VM:
Użyj skill `proxmox-manager`:
```
Przywróć VM 249 ze snapshotu backup_YYYYMMDD
```

## Konfiguracja cron (na serwerze PROD)

### Plik: `/etc/cron.d/nordabiz-backup`

```bash
# Backup co godzinę (retencja 24h)
0 * * * * postgres pg_dump -Fc nordabiz > /var/backups/nordabiz/hourly/nordabiz_$(date +\%Y\%m\%d_\%H).dump 2>> /var/log/nordabiznes/backup.log

# Backup dzienny o 2:00 (retencja 30 dni)
0 2 * * * postgres pg_dump -Fc nordabiz > /var/backups/nordabiz/daily/nordabiz_$(date +\%Y\%m\%d).dump 2>> /var/log/nordabiznes/backup.log

# Cleanup starych hourly (24h)
0 3 * * * root find /var/backups/nordabiz/hourly -name "*.dump" -mtime +1 -delete

# Cleanup starych daily (30 dni)
0 3 * * * root find /var/backups/nordabiz/daily -name "*.dump" -mtime +30 -delete
```

### Plik: `/etc/cron.d/nordabiz-offsite`

```bash
# Sync daily backups do PBS o 4:00
0 4 * * * root rsync -avz --delete /var/backups/nordabiz/daily/ maciejpi@10.22.68.127:/backup/nordabiz/daily/ 2>> /var/log/nordabiznes/backup.log

# Sync config do PBS o 4:30
30 4 * * * root rsync -avz /var/backups/nordabiz/config/ maciejpi@10.22.68.127:/backup/nordabiz/config/ 2>> /var/log/nordabiznes/backup.log
```

## Disaster Recovery

**Pełna dokumentacja:** `docs/DR-PLAYBOOK.md`

### Metryki SLA
- **RTO:** 30-60 min
- **RPO:** 1 godzina

### Skrypt restore
```bash
sudo /var/www/nordabiznes/scripts/dr-restore.sh /path/to/backup.dump
```

## Przechowywanie:
- Lokalne DEV: `./backups/` (dodane do .gitignore)
- Lokalne PROD: `/var/backups/nordabiz/`
- Offsite: PBS (10.22.68.127:/backup/nordabiz/)
- Proxmox: snapshoty VM

## Uwagi:
- ZAWSZE rób backup przed większymi zmianami
- Testuj przywracanie okresowo (co kwartał)
- Snapshoty VM są najszybsze do rollbacku
- PostgreSQL dump jest przenośny między środowiskami
- DEV używa Docker PostgreSQL na localhost:5433
- PROD używa PostgreSQL na 10.22.68.249:5432

Data aktualizacji: 2026-02-02
