PS PrestaShop Principiante

dfbackup — Backup PrestaShop 8 & 9: guida completa

Installazione, pianificazione, storage S3/FTP/Dropbox, crittografia AES-256, ripristino 1-clic e replica staging del modulo dfbackup.

Aggiornato Versione del modulo 1.0.0

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

Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza