# dfbackup — Backup PrestaShop 8 & 9: guida completa

> Panoramica dfbackup è un modulo di backup completo per PrestaShop 8 e 9. Salva il database e i file in puro PHP (senza mysqldump né shell_exec), cifra opzionalmente gli archivi…

- Pagina: <https://www.datafirefly.com/it/documentation/dfbackup/>
- Lingua: it
- Aggiornato il: 2026-07-02
- Altre lingue: [fr](https://www.datafirefly.com/documentation/dfbackup/index.md), [en](https://www.datafirefly.com/en/documentation/dfbackup/index.md), [es](https://www.datafirefly.com/es/documentation/dfbackup/index.md), [de](https://www.datafirefly.com/de/documentation/dfbackup/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfbackup/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfbackup/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfbackup/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

## Panoramica

dfbackup è un modulo di backup completo per PrestaShop 8 e 9. Salva il database e i file in puro PHP (senza mysqldump né shell_exec), cifra opzionalmente gli archivi in AES-256, li carica su più destinazioni (Locale, S3, FTP, Dropbox, replica PrestaShop) e offre un ripristino in un clic con snapshot di sicurezza automatico.

Tre schede vengono aggiunte nel menu **Parametri avanzati** del back-office: **Dashboard** (panoramica e avvii manuali), **Cronologia** (elenco dei backup, ripristino, verifica, eliminazione) e **Impostazioni** (pianificazione, storage, crittografia, notifiche).

## Installazione

1. Nel back-office, andare su **Moduli > Gestione moduli > Carica un modulo**.
2. Selezionare il file `dfbackup-1.0.0.zip` scaricato dopo l'acquisto.
3. Fare clic su **Installa**. Il modulo crea quattro tabelle (`dfbackup`, `dfbackup_log`, `dfbackup_filemap`, `dfbackup_audit`) e la directory di storage `var/dfbackup/` protetta da un .htaccess.
4. Aprire **Parametri avanzati > DF Backup** per accedere alla dashboard.

Dopo ogni aggiornamento del modulo, svuotare la cache PHP (opcache) e la cache Smarty: **Parametri avanzati > Prestazioni > Svuota cache**. Su alcuni hosting è necessario un riavvio di PHP-FPM per ricaricare il bytecode.

## Avviare un primo backup

Dalla Dashboard, tre pulsanti consentono un avvio manuale:

- **Run backup now** — backup completo (DB + file);
- **Database only** — solo dump del DB, veloce (meno di un minuto sulla maggior parte dei negozi);
- **Files only** — solo archivio dei file.

Il backup viene eseguito in background nel proprio processo PHP: la pagina non si blocca, e una scheda di avanzamento mostra i log in tempo reale con una percentuale stimata (dump DB, archiviazione file, crittografia, checksum, upload, rotazione). Si può lasciare la pagina — il backup continua lato server.

## Pianificazione

In **Impostazioni > Pianificazione**, sono disponibili tre frequenze:

- **Daily** — ogni giorno all'orario target (es. 03:00);
- **Weekly** — un giorno della settimana + orario;
- **Monthly** — un giorno del mese + orario.

Una finestra di tolleranza di 30 minuti e una deduplicazione di 60 minuti evitano i doppi avvii. Coesistono due meccanismi di esecuzione:

### Cron nativo PrestaShop

L'hook `actionCronJob` viene eseguito durante le visite al negozio. Sufficiente per negozi con traffico regolare, ma non garantito di notte.

### Web-cron (consigliato)

Un URL firmato da token viene mostrato nelle Impostazioni, nel formato:

```
https://il-tuo-negozio.com/index.php?fc=module&module=dfbackup&controller=webcron&token=IL_TUO_TOKEN
```

Configurare un servizio esterno gratuito come [cron-job.org](https://cron-job.org) o EasyCron per chiamare questo URL ogni ora (o ogni 15 minuti). Il modulo verifica internamente se l'orario target è stato raggiunto e risponde immediatamente `QUEUED | id=N` quando un backup viene avviato, o `Not scheduled now.` altrimenti. La risposta è istantanea — nessun rischio di timeout lato servizio di cron.

Il pulsante **Rigenera token** invalida immediatamente il vecchio URL. Ricordarsi di aggiornare il servizio di cron esterno dopo la rigenerazione.

## Destinazioni di storage

Ogni backup può essere caricato su **più destinazioni contemporaneamente** — la regola 3-2-1 (tre copie, due supporti, una fuori sede). Selezionare le destinazioni desiderate in **Impostazioni > Storage**:

### Locale

Gli archivi restano in `var/dfbackup/` sotto la radice di PrestaShop, protetti da un .htaccess Deny. Sempre attivo come copia di lavoro.

### Amazon S3 e compatibili

Compilare Access Key, Secret Key, bucket, regione. Il campo **Endpoint** consente di usare qualsiasi servizio compatibile S3:

- Amazon S3: lasciare l'endpoint vuoto, indicare la regione (es. `eu-west-3`);
- Cloudflare R2: `https://ACCOUNT_ID.r2.cloudflarestorage.com`, regione `auto` — 10 GB gratuiti, zero costi di uscita;
- MinIO self-hosted: `https://minio.il-tuo-dominio.com`;
- OVH Object Storage, Scaleway, Wasabi, Backblaze B2: endpoint fornito dal provider.

Il multipart upload si attiva automaticamente oltre 100 MB (parti da 10 MB) — gli archivi da diversi GB vengono trasferiti senza saturare la memoria PHP.

### FTP / FTPS

Host, porta, credenziali, directory remota (creata automaticamente se mancante), FTPS e modalità passiva attivabili.

### Dropbox

Incollare un access token generato dalla [console sviluppatore Dropbox](https://www.dropbox.com/developers/apps) (permesso `files.content.write`). Gli archivi oltre 150 MB passano automaticamente a una upload_session a chunk.

Ogni destinazione dispone di un pulsante **Test** che verifica la connessione e i permessi di scrittura prima del primo backup reale.

## Replica verso un PrestaShop staging

La replica spinge ogni backup verso una seconda installazione PrestaShop dotata di dfbackup — ideale per mantenere un ambiente di pre-produzione sincronizzato ogni notte.

### Configurazione

1. **Sul negozio di destinazione (staging)**: installare dfbackup, poi registrare un segreto condiviso (32+ caratteri casuali) sotto la chiave di configurazione `DFBACKUP_REPLICATION_SECRET` (tramite Impostazioni o Parametri avanzati > Configurazione).
2. **Sul negozio sorgente (produzione)**: in **Impostazioni > Storage > Replica PrestaShop**, inserire l'URL dello staging (es. `https://staging.example.com`) e lo stesso segreto. Selezionare **Replica** tra le destinazioni.
3. Fare clic su **Test replication target**: la destinazione deve rispondere OK.

### Ripristino automatico (opzionale)

Perché lo staging applichi automaticamente ogni archivio ricevuto, attivare sulla **destinazione** la chiave `DFBACKUP_REPLICATION_AUTO_RESTORE = 1` e selezionare l'opzione corrispondente lato sorgente. La mattina dopo, lo staging riflette la produzione del giorno precedente.

L'auto-restore sovrascrive il DB e i file dello staging ad ogni ricezione. Non attivarlo mai su un negozio di produzione. Il flag lato destinazione è una protezione volutamente separata dal segreto condiviso.

### Sicurezza del trasporto

Gli archivi vengono trasferiti in chunk da 8 MB, ciascuno firmato HMAC-SHA-256 (la firma copre i parametri e l'hash del corpo). Un controllo anti-replay rifiuta qualsiasi richiesta il cui timestamp devia di oltre 5 minuti.

## Crittografia AES-256

In **Impostazioni > Crittografia**, attivare la casella e definire una passphrase. Gli archivi vengono quindi cifrati in AES-256-CBC con HMAC-SHA-256 (pattern encrypt-then-MAC, derivazione PBKDF2 a 120.000 iterazioni).

- La passphrase **non viene mai memorizzata in chiaro** — solo il suo hash serve per la verifica al ripristino.
- Un archivio cifrato di cui si perde la passphrase è **definitivamente irrecuperabile**. Conservare la passphrase in un gestore di password (Bitwarden, 1Password) prima di attivare l'opzione.
- Il checksum SHA-256 viene calcolato sull'archivio prima della crittografia e verificato al ripristino.

## Ripristino

Dalla **Cronologia**, ogni backup propone tre azioni: **Verifica** (ricalcola lo SHA-256), **Ripristina** ed **Elimina**.

### Svolgimento di un ripristino

1. Uno **snapshot DB di sicurezza** viene creato automaticamente prima di qualsiasi operazione.
2. Si sceglie l'ambito: tutto, solo DB, o solo file.
3. Se l'archivio è cifrato, viene richiesta la passphrase.
4. Il DB viene ripristinato istruzione per istruzione; i file vengono estratti a lotti.
5. Le tabelle `dfbackup*` vengono **sempre preservate**: la cronologia dei backup sopravvive al ripristino.

### Modalità migrazione (cambio di dominio)

Selezionare **Modalità migrazione** e indicare il nuovo dominio: il modulo aggiorna `PS_SHOP_DOMAIN`, `PS_SHOP_DOMAIN_SSL`, la tabella `shop_url` e riscrive gli URL hardcoded nei contenuti CMS, prodotti e meta. Pratico per clonare un negozio in pre-produzione o traslocare di dominio.

Dopo un ripristino, svuotare sempre la cache (Prestazioni > Svuota cache) e verificare la homepage in navigazione privata.

## Rotazione e conservazione

Due regole cumulative in **Impostazioni > Conservazione**:

- **Conserva N backup** — oltre, i più vecchi vengono eliminati;
- **Elimina dopo X giorni** — indipendentemente dal numero.

Solo i backup con stato `completed` o `verified` vengono contati ed eliminati; gli snapshot pre-ripristino e pre-upgrade seguono le stesse regole.

## Notifiche e avvisi

- **Email** — invio tramite `Mail::Send` (le impostazioni SMTP di PrestaShop vengono rispettate) in caso di successo e/o fallimento, template FR/EN/ES/DE.
- **Webhook** — incollare un URL Slack, Discord o Microsoft Teams: il formato viene rilevato automaticamente. Qualsiasi altro URL riceve un JSON generico.
- **Avviso back-office** — un banner appare in cima a tutte le pagine admin se l'ultimo backup è fallito (rosso) o risale a più di 7 giorni (giallo).
- **Snapshot pre-upgrade** — un backup DB viene avviato automaticamente prima di ogni aggiornamento di modulo (hook `actionAdminModulesUpgradeBefore`), disattivabile nelle Impostazioni.

## Esclusioni di file

Il modulo esclude d'ufficio `var/dfbackup`, `var/cache`, `.git`, `node_modules` e la cartella autoupgrade. È possibile aggiungere percorsi e pattern glob personalizzati (es. `img/tmp/*`, `*.log`) in **Impostazioni > Esclusioni**. La modalità incrementale (solo file modificati, rilevati tramite impronta percorso + dimensione + data) riduce drasticamente la dimensione dei backup intermedi.

## Risoluzione dei problemi

### Un backup resta bloccato in "running"

Se il processo è stato terminato (riavvio del server), la riga verrà contrassegnata come fallita al prossimo avvio grazie al lock `flock`. Si può anche eliminarla dalla Cronologia.

### "Another backup is already running"

Un lock su file impedisce due backup simultanei. Attendere la fine del backup in corso (visibile nella Dashboard) o verificare che un cron esterno non si attivi contemporaneamente a un avvio manuale.

### Il backup fallisce su un negozio grande

Aumentare **Max execution time** e **Memory limit** nelle Impostazioni (il modulo li applica al proprio processo). Attivare la modalità incrementale per i file ed escludere le directory voluminose inutili (export, log).

### Le modifiche del modulo non sembrano applicarsi

È quasi sempre l'opcache PHP che serve bytecode obsoleto. Svuotare la cache PrestaShop _e_ riavviare PHP-FPM (o attendere la scadenza dell'opcache).

### L'URL del web-cron restituisce un 404

Usare l'URL nel formato dispatcher (`index.php?fc=module&module=dfbackup&controller=webcron`) mostrato nelle Impostazioni — alcuni hosting bloccano l'accesso diretto ai file PHP sotto `/modules/`.

## Disinstallazione

La disinstallazione elimina le quattro tabelle e tutte le configurazioni. Gli archivi presenti in `var/dfbackup/` **non** vengono rimossi automaticamente — scaricare i backup recenti prima di disinstallare se si prevede di reinstallare più tardi.
