A cosa serve il modulo
- Protezione dal primo minuto. L’installazione crea il profilo “Backup completo giornaliero”: file e database ogni notte alle 03:00, sette backup più recenti sul server. I backup pianificati richiedono l’esecuzione del cron ogni pochi minuti oppure un trigger dal pannello – la dashboard mostra l’indirizzo e il comando già pronti.
- Un backup che sopravvive al guasto del server. Un backup conservato solo sullo stesso server del negozio va perso insieme ad esso. Il modulo invia ogni backup completato alle destinazioni selezionate fuori dal server e avvisa nella dashboard quando non esiste alcuna destinazione di questo tipo.
- Protezione prima di un aggiornamento. Il pulsante “Snapshot rapido prima dell’aggiornamento” copia il database e anche moduli, temi, override e configurazione – cioè ciò che un aggiornamento può danneggiare – senza la massa di immagini, in una frazione del tempo necessario per un backup completo.
- Ripristino dopo un guasto, un’intrusione o una modifica non riuscita. Ripristino dell’intero negozio oppure solo di una sua parte: database, file, una singola tabella o una singola cartella, ad esempio il tema.
- Ripristino su un nuovo server. Lo script di emergenza
pdrestore.phpripristina il negozio da un backup su un server vuoto, senza PrestaShop installato – dopo la perdita del server oppure durante il cambio di hosting mantenendo lo stesso indirizzo del negozio.
Cosa viene incluso nel backup
Cinque ambiti di backup
- File e database – tutto ciò che serve per ricostruire il negozio (consigliato).
- Solo database – backup piccolo e veloce, adatto a backup frequenti tra un backup completo e l’altro.
- Solo file – immagini, moduli, temi e gli altri file del negozio.
- Snapshot rapido – database e cartelle modules, themes, override, config, app/config, mails, translations, classes e controllers.
- Ambito personalizzato – database e cartelle di primo livello selezionate; i file sciolti della cartella principale (index.php, .htaccess e simili) vengono sempre inclusi.
Database
- Dump in puro PHP. Tabelle, viste, trigger, procedure, funzioni ed eventi, senza lo strumento mysqldump e senza accesso alla shell del server.
- Tabelle del negozio oppure intero database. Per impostazione predefinita vengono copiate le tabelle con il prefisso del negozio; un’unica opzione include tutte le tabelle del database, ad esempio quelle di un’integrazione esterna.
- Tabelle senza righe e tabelle escluse. Statistiche delle visite, indice di ricerca, cache e log vengono inclusi nel backup come sola struttura. Elenchi personalizzati permettono di aggiungere altre tabelle da copiare senza righe oppure di escludere completamente delle tabelle.
- Chiusura del negozio durante il backup del database. Un’opzione del profilo mette il negozio in modalità manutenzione solo per i minuti del dump del database, in modo che nessun ordine venga catturato a metà scrittura, e lo riapre poi – anche se il backup non riesce.
File ed esclusioni
- Sempre esclusi. Cache, log, sessioni, immagini temporanee, cartelle .git e node_modules, la cartella dei backup del modulo stesso e le cartelle dei backup di altri moduli di backup e del modulo di aggiornamento.
- Esclusioni personalizzate. Percorsi esclusi con caratteri jolly (themes/*/cache, **/nazwa), tipi di file esclusi (ad es. zip, mp4, psd) e limite di dimensione del singolo file.
- Miniature e immagini dei prodotti. Opzioni separate escludono le miniature delle immagini (che possono essere rigenerate dagli originali) oppure l’intera cartella delle immagini dei prodotti, quando le immagini hanno un proprio backup.
- File modificati durante il backup. Un file modificato, eliminato o illeggibile durante la copia viene registrato nel log, e il backup continua.
Compressione e suddivisione in file
- Quattro livelli di compressione gzip – nessuna, leggera, consigliata e massima. I dati che non si comprimono (immagini, archivi) il modulo li salva automaticamente senza compressione, risparmiando tempo.
- Backup suddiviso in file della dimensione scelta (predefinita 256 MB, da 16 a 4096 MB), così l’invio può essere ripreso e i limiti di dimensione dei file dell’hosting non creano problemi. Sono supportati file del negozio più grandi di 2 GB.
Pianificazione e backup automatici
- Profili di backup. Ogni profilo ha il proprio ambito, pianificazione, destinazioni, regole di eliminazione dei vecchi backup e crittografia – ad esempio backup completo ogni giorno e in più solo il database ogni poche ore.
- Pianificazione. Solo manualmente, ogni poche ore (da 1 a 24 ore oppure ogni 2–7 giorni), ogni giorno, in giorni selezionati della settimana oppure una volta al mese (nei mesi più brevi – l’ultimo giorno), a un’ora nel fuso orario del negozio.
- Tre modalità di avvio. Indirizzo cron con token segreto (richiamato ogni 5 minuti, nuovo indirizzo con un clic), riga di comando
php modules/pdbackupandrestorepro/cli.phpcon i comandi cron, run e status – senza limite di tempo – e trigger dal pannello per hosting senza cron, che avvia un backup in ritardo alla visita di un dipendente nel pannello. - Passi brevi e riprendibili. Il tempo di un singolo passo si imposta da 5 a 120 secondi (consigliati 20). Dopo ogni passo il progresso viene salvato e l’indirizzo cron richiama automaticamente il passo successivo; se il server non lo consente, il backup continua alla successiva chiamata cron.
- Avanzamento in tempo reale. Barra di avanzamento, fase corrente e ultimi eventi. Chiudere la scheda del browser non interrompe il backup, e il pulsante “Ferma” lo conclude nel punto sicuro più vicino.
- Un solo processo alla volta. Un lock nel database e un lock su file impediscono che due processi (ad es. cron e scheda del browser) eseguano lo stesso backup contemporaneamente. Un’attività che per tre volte consecutive non fa progressi termina con errore e con la causa indicata.
Dove conservare i backup: disco, NAS, FTP, FTPS, SFTP, S3
- Un’altra cartella sullo stesso server – un secondo disco oppure un disco di rete montato (NAS), fuori dalla cartella del negozio.
- FTP e FTPS. FTPS cifra la connessione e verifica il certificato del server (la verifica può essere disattivata per il proprio server con certificato autofirmato); modalità passiva o attiva.
- SFTP (SSH). Accesso con password oppure chiave privata (RSA in formato PEM oppure chiave OpenSSH, anche protetta da password; chiavi ed25519 dove il cURL dell’hosting le supporta) e impronta facoltativa della chiave del server, così il modulo comunica esclusivamente con il server corretto.
- Storage compatibile con S3. Amazon S3, Backblaze B2, Wasabi, Cloudflare R2, Hetzner, OVH, MinIO e altri servizi compatibili con S3: indirizzo del servizio, regione, bucket, cartella nel bucket (più negozi in un solo bucket) e indirizzamento del bucket nel percorso. I file grandi vengono inviati in parti, e il modulo non modifica mai le impostazioni del bucket stesso.
- Test di connessione. Il pulsante “Testa connessione” salva, legge ed elimina un file di prova e, quando il servizio lo fornisce, mostra lo spazio libero. Il risultato dell’ultimo test è visibile nell’elenco delle destinazioni.
- Invio riprendibile. Il backup viene inviato alle destinazioni selezionate una dopo l’altra e in parti; un invio interrotto riprende dal punto in cui si è fermato, e sui server FTP, FTPS e SFTP la dimensione del file inviato viene confrontata con l’originale. I residui di un backup che non è stato possibile inviare vengono eliminati dalla destinazione.
- Script di ripristino insieme al backup. Per impostazione predefinita, in ogni destinazione fuori dal server viene inviato anche
pdrestore.php, quindi il backup può essere ripristinato anche quando il negozio e il suo pannello non esistono più.
Eliminazione dei vecchi backup (retention)
- Nelle destinazioni. Numero di backup più recenti da conservare in ogni destinazione, eliminazione dei backup più vecchi di un numero selezionato di giorni e cronologia lunga secondo lo schema giorno–settimana–mese: inoltre il backup più recente di ciascuno degli ultimi giorni, settimane o mesi.
- Su questo server. Numero separato di backup più recenti e limite di età separato. In caso di mancanza di spazio su disco, il profilo può eliminare il backup dal server quando esso raggiunge almeno una destinazione.
- Cosa le regole non eliminano. L’ultimo backup valido, i backup contrassegnati come protetti (nell’elenco dei backup oppure per l’intero profilo, ad es. gli snapshot prima dell’aggiornamento) e il backup da cui è stato preparato un ripristino. I vecchi backup vengono eliminati solo dopo che il nuovo backup è arrivato a destinazione.
- Pulizia dei residui. Quando il profilo non conserva backup sul server, i backup scaricati per il ripristino scompaiono dal server dopo una settimana, e dei backup che non è stato possibile inviare vi restano i due più recenti. Un’eliminazione interrotta a metà viene ripetuta. Dei backup eseguiti da riga di comando senza profilo, sul server restano i sette più recenti.
Crittografia dei backup e sicurezza
- AES-256 con controllo di integrità. Ogni frammento del backup è cifrato con l’algoritmo AES-256 (modalità CTR) e firmato con HMAC-SHA256; la chiave viene derivata dalla password tramite PBKDF2-SHA256 (200 000 iterazioni). Anche l’elenco dei file del backup è cifrato, quindi i nomi dei file non sono visibili.
- Rilevamento delle manomissioni. La descrizione del backup (manifest) è firmata, e ogni frammento è legato al backup, al file e alla posizione nel file – un frammento sostituito, spostato o inserito da un altro backup non supererà il controllo.
- Password del backup. Almeno 12 caratteri, inserita due volte, conservata in forma cifrata e mai più mostrata altrove. Senza la password del backup cifrato nessuno potrà ripristinarlo, nemmeno l’autore del modulo. La nuova password vale per i backup futuri.
- Dati di accesso cifrati. Le password e le chiavi delle destinazioni sono conservate nel database in forma cifrata e non ritornano nel modulo.
- Cartella dei backup chiusa a internet. Durante l’installazione il modulo sceglie una cartella fuori dalla parte pubblica del sito, se l’hosting lo consente; altrimenti una cartella dal nome casuale con file di protezione. Il pulsante “Verifica da internet” nella dashboard controlla se i file della cartella possono essere scaricati e, per nginx, fornisce una regola di blocco già pronta.
- Avvisi nel pannello. L’elenco dei profili avvisa quando backup non cifrati vengono inviati fuori dal server, e l’elenco delle destinazioni – quando una destinazione SFTP non verifica la chiave del server.
- Nessuna connessione ai server dell’autore. Il modulo non invia dati all’autore e non esegue comandi di sistema; oltre al proprio negozio si connette esclusivamente alle destinazioni e all’indirizzo di monitoraggio che imposti tu.
Verifica del backup e ripristino di prova
- Controllo di ogni backup. Dopo l’esecuzione, il backup viene riletto e gli hash SHA-256 di tutti i suoi frammenti vengono confrontati con quelli salvati. Nell’elenco il backup ha allora lo stato “verificato”.
- Ripristino di prova. Lettura completa del backup – decifratura, decompressione, controllo dell’archivio e conteggio delle istruzioni SQL rispetto alla descrizione del backup – senza alcuna modifica al negozio. Un backup conservato solo fuori dal server viene scaricato a questo scopo.
- Promemoria. La dashboard segnala quando nell’ultimo mese nessun backup è stato letto completamente.
Ripristino del negozio da backup nel pannello
- Procedura guidata in tre passaggi. Scelta del backup, scelta di ciò che deve essere ripristinato e conferma digitando l’indirizzo del negozio. Fino alla conferma non cambia nulla.
- Cinque ambiti di ripristino. Tutto ciò che è nel backup; solo database; solo file; tabelle selezionate; cartelle selezionate (ad es. themes/classic oppure img/p).
- Prima lo stato attuale. L’opzione consigliata esegue prima del ripristino un backup protetto di ciò che verrà sostituito – per i backup cifrati, cifrato con la password del profilo. Se il ripristino si rivela un errore, torni allo stato precedente.
- Controllo prima dell’avvio. Spazio libero su disco, permesso di scrittura nella cartella del negozio, compatibilità del prefisso delle tabelle, versione di PrestaShop da cui proviene il backup e password del backup cifrato. Gli avvisi vengono mostrati prima della conferma.
- Esecuzione sicura. Durante il ripristino il negozio viene chiuso ai clienti e riaperto alla fine. Il ripristino funziona su una pagina separata fuori dal pannello, perché il pannello stesso viene sostituito in quel momento; dopo un’interruzione riparte dal punto in cui si è fermato, e la pagina si elimina al termine.
- File di configurazione e accesso. Il file di configurazione di PrestaShop proviene dal backup, ma mantiene la connessione al database del server attuale. Dopo il ripristino i dipendenti accedono con gli account del giorno in cui è stato eseguito il backup.
- Backup esterni al server. Un backup conservato solo in una destinazione viene scaricato dal pulsante “Scarica e verifica” e subito letto completamente, prima di essere usato per il ripristino.
- Backup da un server database più recente. Durante il ripristino di un backup eseguito su una versione più recente di MySQL o MariaDB, le collation sconosciute e le modalità SQL rimosse vengono sostituite con equivalenti, mentre gli altri errori vengono segnalati.
- Ripristino interrotto. Un ripristino che per 10 minuti non dà segni di vita può essere abbandonato dal pannello – il negozio viene riaperto e i backup tornano a essere eseguiti.
Ripristino di emergenza senza pannello: pdrestore.php
- Un solo file.
pdrestore.phppuò essere scaricato dalla scheda Ripristino; per impostazione predefinita si trova anche in ogni destinazione accanto al backup. - Senza PrestaShop. Carichi lo script insieme ai file del backup (nomi che iniziano con pdbr-) nella cartella del negozio e lo apri nel browser. Se sul server non c’è il negozio, lo script chiede i dati del database.
- Prova di accesso al server. Lo script crea accanto a sé un file con un codice che deve essere trascritto – nessun estraneo che conosca l’indirizzo dello script potrà usarlo.
- Ripresa e pulizia. Dopo un’interruzione della connessione, il ripristino riparte dall’ultimo passaggio completato e alla fine lo script si elimina dal server con un solo pulsante. Interfaccia in polacco e inglese.
Dashboard: il negozio è protetto?
- Valutazione in una frase. Ad esempio “Il negozio è protetto. L’ultimo backup è del …, il prossimo è pianificato per …” oppure un problema concreto: nessun backup, backup non riuscito, backup troppo vecchio, cron non funzionante, nessuna destinazione fuori dal server, cartella dei backup accessibile da internet.
- Checklist. Ultimo backup, sua età, pianificazione, cron, backup fuori dal server, cartella dei backup, notifiche e ripristino di prova – ogni punto con un pulsante che porta al punto in cui correggerlo.
- Riquadri, grafico ed eventi. Ultimo backup valido, prossimo backup, numero di backup sul server (con la loro dimensione) e in ogni destinazione, spazio libero su disco, grafico della dimensione e del tempo degli ultimi backup e ultimi eventi del log.
- Quattro domande iniziali. Cosa copiare, dove conservare i backup, quando e chi notificare – le risposte vengono salvate nel profilo. Una nuova destinazione può essere aggiunta durante il processo e, dopo un test di connessione riuscito, tornerai alle domande con quella destinazione già selezionata.
- Test dell’ambiente. Versione PHP, estensioni, limiti di tempo e memoria, cartella dei backup e spazio libero su disco – con spiegazione di cosa significa ogni limitazione.
- Intestazione in ogni scheda. Ultimo backup valido, backup pianificato più vicino e stato della protezione visibili da ogni pagina del modulo.
Notifiche e-mail e monitoraggio
- Allarmi. E-mail quando il backup non riesce; quando il backup è stato creato ma non è arrivato a tutte le destinazioni; quando il profilo non ha dove inviarlo; quando un backup pianificato non ha potuto iniziare e quando per il tempo impostato (predefinito 48 ore) non c’è alcun backup riuscito.
- Conferme. E-mail facoltativa dopo ogni backup riuscito, con dimensione e numero di destinazioni in cui è conservato.
- Destinatari e lingua. Qualsiasi elenco di indirizzi (campo vuoto = indirizzo e-mail del negozio); messaggi nella lingua predefinita del negozio, in polacco oppure in inglese.
- Indirizzo di monitoraggio (heartbeat). Richiamato dopo ogni backup riuscito, così un servizio di monitoraggio esterno ti avviserà quando i backup smetteranno di essere creati. Le impostazioni mostrano quando il cron ha dato l’ultimo segnale, e la dashboard avvisa quando il cron ha smesso di richiamare il negozio.
Elenco dei backup e log
- Elenco dei backup. Profilo, contenuto, dimensione, durata, luoghi di conservazione, risultato della verifica e protezione. Dettagli del backup: dimensione prima della compressione, numero di file e tabelle, crittografia e versioni di PrestaShop e del modulo che lo hanno eseguito.
- Azioni sul backup. Download dei file del backup sul proprio computer (con possibilità di riprendere il download), nota, protezione dall’eliminazione automatica, ripristino di prova, ripristino ed eliminazione da tutte le destinazioni in una volta sola.
- Trova backup nella cartella. I backup presenti nella cartella dei backup ma assenti dall’elenco (ad es. spostati da un altro server) vengono aggiunti all’elenco con un solo pulsante.
- Log. Ogni passaggio di backup, invio e ripristino con messaggio leggibile e tradotto; filtro e download del log come file di testo. I download dei backup, i ripristini e gli abbandoni del ripristino – con il nome del dipendente – vengono conservati per due anni, gli altri record per sei mesi.
Formato di backup aperto
- Normali archivi .tar.gz. Un backup non cifrato può essere aperto con qualsiasi programma di archiviazione (7-Zip, WinRAR, tar), e il database si trova all’interno come file SQL nella cartella db – il backup non crea dipendenza dal modulo.
- Frammenti indipendenti. Ogni file di backup è composto da frammenti compressi e verificati separatamente, così backup, verifica, invio e ripristino possono essere ripresi dopo un’interruzione.
Permessi, multistore e disinstallazione
- Permessi dei dipendenti. Un dipendente con diritto di visualizzazione vede backup, avanzamento e log; l’avvio dei backup, il download dei file di backup, il ripristino e la modifica delle impostazioni richiedono il diritto di modifica. Ogni azione nel pannello verifica il token di sicurezza e i permessi.
- Multistore. Il backup comprende l’intera installazione di PrestaShop – tutti i negozi insieme – e le impostazioni del modulo sono comuni all’installazione.
- Disinstallazione. Elimina le impostazioni del modulo, le pianificazioni e la cronologia dei backup. I file di backup sul disco e nelle destinazioni restano.
Requisiti e compatibilità
- PrestaShop 1.7.0–9.x, PHP 7.0–8.5 (64 bit), MySQL 5.6+ oppure MariaDB 10+.
- Estensioni PHP. zlib (compressione, richiesto), OpenSSL (crittografia dei backup e protezione dei dati di accesso), cURL (FTP, FTPS, SFTP, S3, verifica della cartella dei backup da internet e indirizzo di monitoraggio); SFTP richiede cURL compilato con supporto SFTP. L’impostazione mbstring.func_overload deve essere disattivata.
- Requisiti di memoria ridotti. Il motore di backup stesso richiede circa 20 MB di memoria; un limite breve del tempo di richiesta non crea problemi.
- Senza dipendenze. Senza Composer, senza librerie incluse, senza exec e senza comandi shell.
- Lingue. Interfaccia del modulo, e-mail e script di ripristino in polacco e inglese.
Limiti operativi importanti (versione 1.0)
- Il ripristino a un indirizzo del negozio diverso oppure in un database con prefisso delle tabelle diverso non è supportato – il modulo lo rifiuta prima della prima modifica.
- Ogni backup è un backup completo del proprio ambito; i backup incrementali non sono disponibili.
- Tra le destinazioni non ci sono Google Drive né Dropbox.
- Il ripristino non elimina file né tabelle che sono comparsi nel negozio dopo l’esecuzione del backup.
- Viste, trigger e procedure vengono ripristinati solo durante il ripristino dell’intero database.
- Il backup del database eseguito tramite indirizzo cron o browser viene creato in molti passaggi brevi; in un negozio con molto traffico è consigliata l’opzione di chiusura del negozio durante il backup del database oppure l’avvio del backup da riga di comando.
- I backup pianificati richiedono il cron; il trigger dal pannello è una soluzione di emergenza che dipende dalle visite dei dipendenti.
- Lo script di emergenza richiede il file di descrizione del backup (il nome termina con .manifest.json).
- La disinstallazione lascia nella cartella del negozio i file di un ripristino avviato e non completato (pdbr-restore-*) – occorre completarli, abbandonarli dal pannello oppure eliminarli manualmente.
- Per due anni il log conserva i nomi dei dipendenti che hanno scaricato un backup o ripristinato il negozio – è opportuno tenerne conto nel registro delle attività di trattamento dei dati personali.