# 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.