Files
ecommerce-platform/docs/BACKUP.md
T
davide 2c6c847d76 feat: replace Docker named volumes with local bind mounts and add backup script
- 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/
2026-05-19 08:49:28 +02:00

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 database
  • uploads.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 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.