# Backup

# Backup

Automatyczny backup danych produkcyjnych na **Google Drive** via `rclone`.

---

## Co jest backupowane?

| Wolumin Docker | Zawartość | Kontener |
|----------------|-----------|----------|
| `combo_data` | `auth.json`, `email.json` | `combo_prod` (port 4173) |
| `combo_data_87` | `auth.json`, `email.json` | `combo_prod87` (port 87) |

> Kod źródłowy jest już chroniony przez git (GitHub). Backup dotyczy wyłącznie danych runtime — kont użytkowników i konfiguracji emaila.

---

## Jednorazowy setup

### 1. Instalacja rclone

```bash
sudo apt install rclone
# lub najnowsza wersja:
curl https://rclone.org/install.sh | sudo bash
```

Weryfikacja:

```bash
rclone --version
```

### 2. Konfiguracja Google Drive

```bash
rclone config
```

Przejdź przez kreator:

```
n  → New remote
Name: gdrive
Storage: drive        (wpisz numer odpowiadający "Google Drive")
client_id:            (Enter — zostaw puste)
client_secret:        (Enter — zostaw puste)
scope: 1              (Full access)
root_folder_id:       (Enter — zostaw puste)
service_account_file: (Enter — zostaw puste)
Edit advanced config: n
Use auto config: y    → otworzy przeglądarkę, zaloguj się na konto Google
Configure as a Shared Drive: n
y  → potwierdzenie
q  → wyjście
```

Weryfikacja dostępu:

```bash
rclone lsd gdrive:
```

Powinny pojawić się foldery z Twojego Google Drive.

### 3. Test manualny

```bash
cd /home/ultrax/Projects/combo-project/combo-raport-app
./scripts/backup-gdrive.sh
```

Po wykonaniu sprawdź Google Drive — powinien pojawić się folder `combo-raport-backup/`.

---

## Automatyczny backup — cron

### Konfiguracja

Dodaj wpis do crontab:

```bash
crontab -e
```

Wklej linię (backup codziennie o **03:00**):

```cron
0 3 * * * /home/ultrax/Projects/combo-project/combo-raport-app/scripts/backup-gdrive.sh >> /var/log/combo-backup.log 2>&1
```

Zapisz i wyjdź. Weryfikacja:

```bash
crontab -l
```

### Sprawdzanie logów

```bash
# Ostatnie 50 linii logu
tail -50 /var/log/combo-backup.log

# Podgląd na żywo
tail -f /var/log/combo-backup.log
```

---

## Skrypt backup-gdrive.sh — zachowanie

- Tworzy archiwum `tar.gz` z zawartości każdego wolumenu
- Upload do `gdrive:combo-raport-backup/<nazwa_wolumenu>/`
- Usuwa pliki na GDrive starsze niż **30 dni**
- Pomija wolumin jeśli nie istnieje (np. `combo_data_87` przed pierwszym uruchomieniem prod87)
- Loguje każdy krok z timestampem

### Uruchomienie manualne

```bash
# Backup oba wolumeny
./scripts/backup-gdrive.sh

# Backup tylko jednego wolumenu
./scripts/backup-gdrive.sh combo_data
./scripts/backup-gdrive.sh combo_data_87
```

---

## Struktura na Google Drive

```
combo-raport-backup/
├── combo_data/
│   ├── combo_data_20260415_030001.tar.gz
│   ├── combo_data_20260416_030001.tar.gz
│   └── ...
└── combo_data_87/
    ├── combo_data_87_20260415_030001.tar.gz
    └── ...
```

---

## Odtworzenie danych (disaster recovery)

W przypadku utraty środowiska:

```bash
# 1. Pobierz najnowszy backup z Google Drive
rclone copy gdrive:combo-raport-backup/combo_data/ ./restore-tmp/ --include "*.tar.gz"

# 2. Sprawdź pobrane pliki
ls -lh ./restore-tmp/

# 3. Odtwórz wolumin (zastępuje obecną zawartość!)
ARCHIVE=$(ls ./restore-tmp/*.tar.gz | sort | tail -1)
docker run --rm \
  -v combo_data:/data \
  -v "$(pwd)/restore-tmp:/backup:ro" \
  alpine \
  sh -c "cd /data && tar xzf /backup/$(basename ${ARCHIVE})"

# 4. Uruchom aplikację
docker compose --profile prod up -d

# 5. Usuń tymczasowy katalog
rm -rf ./restore-tmp/
```

---

## Zmiana częstotliwości backupu

Przykładowe harmonogramy cron:

| Harmonogram | Wyrażenie cron |
|-------------|----------------|
| Codziennie o 03:00 | `0 3 * * *` |
| Co 12 godzin | `0 3,15 * * *` |
| Co poniedziałek o 02:00 | `0 2 * * 1` |

Edycja:

```bash
crontab -e
```

---

## Zmiana okresu przechowywania

W pliku `scripts/backup-gdrive.sh` zmień wartość `KEEP_DAYS`:

```bash
KEEP_DAYS=30   # domyślnie 30 dni
```