2c6c847d76
- docker-compose.yml: sostituisce pgdata/uploads/caddy_data/caddy_config con bind mount su ./data/ - app/public/.gitkeep: crea cartella richiesta dal Dockerfile durante il build - scripts/backup.sh: backup automatico di DB (pg_dump) e uploads con rotazione 30 giorni - docs/BACKUP.md: guida completa backup, ripristino e setup cron - .gitignore: aggiorna con data/ e backups/
2.1 KiB
2.1 KiB
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)
./scripts/backup.sh
Crea una cartella backups/YYYYMMDD_HHMMSS/ con:
db.sql.gz— dump compresso del databaseuploads.tar.gz— archivio delle immagini (se presenti)
I backup più vecchi di 30 giorni vengono eliminati automaticamente.
Percorso di destinazione personalizzato
BACKUP_DIR=/mnt/nas/backups ./scripts/backup.sh
Backup manuale passo passo
1. Database
# 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
# La cartella è leggibile direttamente dall'host
tar -czf backup_uploads.tar.gz -C data uploads
Ripristino
1. Ripristino database
# 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:
docker compose exec db psql -U ecommerce -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" ecommerce
2. Ripristino immagini
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:
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 semprepg_dumpper 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.