96 lines
2.1 KiB
Markdown
96 lines
2.1 KiB
Markdown
|
|
# Backup e Ripristino
|
||
|
|
|
||
|
|
## Cosa viene salvato
|
||
|
|
|
||
|
|
| Dato | Posizione | Contenuto |
|
||
|
|
|------|-----------|-----------|
|
||
|
|
| Database | `data/db/` | Utenti, prodotti, ordini, impostazioni |
|
||
|
|
| Upload | `data/uploads/` | Immagini prodotti, favicon |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Backup manuale
|
||
|
|
|
||
|
|
### Script automatico (consigliato)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./scripts/backup.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
Crea una cartella `backups/YYYYMMDD_HHMMSS/` con:
|
||
|
|
- `db.sql.gz` — dump compresso del database
|
||
|
|
- `uploads.tar.gz` — archivio delle immagini (se presenti)
|
||
|
|
|
||
|
|
I backup più vecchi di 30 giorni vengono eliminati automaticamente.
|
||
|
|
|
||
|
|
### Percorso di destinazione personalizzato
|
||
|
|
|
||
|
|
```bash
|
||
|
|
BACKUP_DIR=/mnt/nas/backups ./scripts/backup.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Backup manuale passo passo
|
||
|
|
|
||
|
|
### 1. Database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Crea dump SQL compresso
|
||
|
|
docker compose exec -T db pg_dump -U ecommerce ecommerce | gzip > backup_db.sql.gz
|
||
|
|
|
||
|
|
# Verifica che il file non sia vuoto
|
||
|
|
ls -lh backup_db.sql.gz
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Immagini e file caricati
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# La cartella è leggibile direttamente dall'host
|
||
|
|
tar -czf backup_uploads.tar.gz -C data uploads
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Ripristino
|
||
|
|
|
||
|
|
### 1. Ripristino database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# I container devono essere in esecuzione
|
||
|
|
gunzip -c backups/20260519_120000/db.sql.gz | docker compose exec -T db psql -U ecommerce ecommerce
|
||
|
|
```
|
||
|
|
|
||
|
|
> Se il database contiene già dati, svuotalo prima:
|
||
|
|
> ```bash
|
||
|
|
> docker compose exec db psql -U ecommerce -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" ecommerce
|
||
|
|
> ```
|
||
|
|
|
||
|
|
### 2. Ripristino immagini
|
||
|
|
|
||
|
|
```bash
|
||
|
|
tar -xzf backups/20260519_120000/uploads.tar.gz -C data
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Backup automatico (cron)
|
||
|
|
|
||
|
|
Per eseguire il backup ogni notte alle 02:00, aggiungi questa riga al crontab dell'host:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
crontab -e
|
||
|
|
```
|
||
|
|
|
||
|
|
```
|
||
|
|
0 2 * * * /home/davide/ecommerce-platform/scripts/backup.sh >> /var/log/ecommerce-backup.log 2>&1
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Note importanti
|
||
|
|
|
||
|
|
- La cartella `data/db/` **non è leggibile** dall'utente host (appartiene all'utente interno di PostgreSQL). Usare sempre `pg_dump` per i backup del DB, mai copiare i file direttamente.
|
||
|
|
- La cartella `backups/` è esclusa da git (`.gitignore`). Salva i backup su storage esterno o NAS.
|
||
|
|
- I container devono essere **in esecuzione** durante il backup del database.
|