dfbackup: back-up PrestaShop 8 & 9, volledige gids
Installatie, planning, opslag via S3/FTP/Dropbox, AES-256-versleuteling, herstel met één klik en stagingreplicatie van de module dfbackup.
Presentatie
dfbackup is een volledige back-upmodule voor PrestaShop 8 en 9. Hij maakt een back-up van uw database en uw bestanden in pure PHP (zonder mysqldump of shell_exec), versleutelt de archieven optioneel met AES-256, stuurt ze naar meerdere bestemmingen (Lokaal, S3, FTP, Dropbox, PrestaShop-replicatie) en maakt herstel met één klik mogelijk, met een automatisch veiligheidssnapshot.
Er worden drie tabbladen toegevoegd in het menu Geavanceerde instellingen van uw backoffice: Dashboard (overzicht en handmatige start), Geschiedenis (lijst met back-ups, herstel, controle, verwijdering) en Instellingen (planning, opslag, versleuteling, meldingen).
Installatie
- Ga in uw backoffice naar Modules > Modulebeheer > Een module installeren.
- Selecteer het bestand
dfbackup-1.0.0.zipdat u na uw aankoop hebt gedownload. - Klik op Installeren. De module maakt vier tabellen aan (
dfbackup,dfbackup_log,dfbackup_filemap,dfbackup_audit) en de opslagmapvar/dfbackup/, beschermd door een .htaccess. - Open Geavanceerde instellingen > DF Backup om naar het dashboard te gaan.
Leeg na elke update van de module de PHP-cache (opcache) en de Smarty-cache via Geavanceerde instellingen > Prestaties > Cache legen. Op sommige hostingpakketten is een herstart van PHP-FPM nodig om de bytecode opnieuw te laden.
Een eerste back-up starten
Vanuit het dashboard kunt u met drie knoppen handmatig starten:
- Run backup now: volledige back-up (database en bestanden);
- Database only: enkel de databasedump, snel (minder dan een minuut op de meeste webshops);
- Files only: enkel het bestandsarchief.
De back-up draait op de achtergrond in een eigen PHP-proces: de pagina blijft niet hangen en een voortgangskaart toont de logs in real time met een geschat percentage (databasedump, bestandsarchief, versleuteling, checksum, upload, rotatie). U mag de pagina verlaten: de back-up loopt aan de serverzijde gewoon door.
Planning
In Instellingen > Planning zijn er drie frequenties:
- Daily: elke dag op het doeltijdstip (bijvoorbeeld 03:00);
- Weekly: een dag van de week plus een uur;
- Monthly: een dag van de maand plus een uur.
Een tolerantievenster van 30 minuten en ontdubbeling over 60 minuten voorkomen dubbele starts. Er bestaan twee uitvoeringsmechanismen naast elkaar:
Native PrestaShop-cron
De hook actionCronJob draait bij bezoeken aan de winkel. Voldoende voor webshops met regelmatig verkeer, maar ‘s nachts niet gegarandeerd.
Web-cron (aanbevolen)
In de instellingen verschijnt een met een token ondertekende URL, in dit formaat:
https://uw-winkel.com/index.php?fc=module&module=dfbackup&controller=webcron&token=UW_TOKEN
Stel een gratis externe dienst zoals cron-job.org of EasyCron in om die URL elk uur aan te roepen (of elke 15 minuten). De module controleert intern of het doeltijdstip bereikt is en antwoordt onmiddellijk met QUEUED | id=N wanneer een back-up start, of anders met Not scheduled now. Het antwoord komt meteen, zodat er geen risico op een timeout bij de crondienst is.
De knop Token opnieuw genereren maakt de oude URL onmiddellijk ongeldig. Werk uw externe crondienst na het opnieuw genereren dus bij.
Opslagbestemmingen
Elke back-up kan naar meerdere bestemmingen tegelijk worden gestuurd, volgens de 3-2-1-regel (drie kopieën, twee dragers, één buitenshuis). Vink de gewenste bestemmingen aan in Instellingen > Opslag:
Lokaal
De archieven blijven in var/dfbackup/ onder de PrestaShop-hoofdmap, beschermd door een htaccess met Deny. Altijd actief als werkkopie.
Amazon S3 en compatibele diensten
Vul de Access Key, de Secret Key, de bucket en de regio in. Met het veld Endpoint kunt u elke S3-compatibele dienst gebruiken:
- Amazon S3: laat het endpoint leeg en geef de regio op (bijvoorbeeld
eu-west-3); - Cloudflare R2:
https://ACCOUNT_ID.r2.cloudflarestorage.com, regioauto, met 10 GB gratis en zonder uitgaande kosten; - Zelfgehost MinIO:
https://minio.uw-domein.com; - OVH Object Storage, Scaleway, Wasabi, Backblaze B2: endpoint dat uw hostingpartij bezorgt.
De multipart upload start automatisch boven 100 MB (delen van 10 MB), zodat archieven van meerdere GB doorgaan zonder het PHP-geheugen te verzadigen.
FTP / FTPS
Host, poort, inloggegevens en externe map (automatisch aangemaakt als ze niet bestaat), met FTPS en passieve modus die u kunt inschakelen.
Dropbox
Plak een access token dat u genereert vanuit de Dropbox-ontwikkelaarsconsole (rechten files.content.write). Archieven boven 150 MB schakelen automatisch over op een upload_session in blokken.
Elke bestemming heeft een knop Test die de verbinding en de schrijfrechten controleert voordat de eerste echte back-up loopt.
Replicatie naar een PrestaShop-staging
De replicatie duwt elke back-up naar een tweede PrestaShop-installatie waarop dfbackup staat, ideaal om elke nacht een gesynchroniseerde pre-productieomgeving te onderhouden.
Configuratie
- Op de doelwinkel (staging): installeer dfbackup en bewaar daarna een gedeeld geheim (32 of meer willekeurige tekens) onder de configuratiesleutel
DFBACKUP_REPLICATION_SECRET(via de instellingen of via Geavanceerde instellingen > Configuratie). - Op de bronwinkel (productie): vul in Instellingen > Opslag > PrestaShop-replicatie de URL van de staging in (bijvoorbeeld
https://staging.example.com) plus hetzelfde geheim. Vink Replicatie aan bij de bestemmingen. - Klik op Test replication target: de doelinstallatie moet OK antwoorden.
Automatisch herstel (optioneel)
Wilt u dat de staging elk ontvangen archief automatisch toepast, activeer dan op de doelinstallatie de sleutel DFBACKUP_REPLICATION_AUTO_RESTORE = 1 en vink de bijbehorende optie aan de bronzijde aan. De volgende ochtend weerspiegelt uw staging de productie van de dag ervoor.
Automatisch herstel overschrijft bij elke ontvangst de database en de bestanden van de staging. Activeer het nooit op een productiewinkel. De vlag aan de doelzijde staat bewust los van het gedeelde geheim, als extra bescherming.
Beveiliging van het transport
De archieven worden in blokken van 8 MB overgedragen, elk ondertekend met HMAC-SHA-256 (de handtekening dekt de parameters en de hash van de body). Een anti-replaycontrole weigert elk verzoek waarvan de timestamp meer dan 5 minuten afwijkt.
AES-256-versleuteling
Vink in Instellingen > Versleuteling het vakje aan en stel een wachtwoordzin in. De archieven worden dan versleuteld met AES-256-CBC en HMAC-SHA-256 (het encrypt-then-MAC-patroon, met PBKDF2-afleiding en 120.000 iteraties).
- De wachtwoordzin wordt nooit in leesbare vorm opgeslagen: alleen de hash dient om ze bij een herstel te controleren.
- Een versleuteld archief waarvan de wachtwoordzin verloren is, is definitief onherstelbaar. Bewaar de wachtwoordzin in een wachtwoordmanager (Bitwarden, 1Password) voordat u de optie activeert.
- De SHA-256-checksum wordt op het archief vóór de versleuteling berekend en bij het herstel gecontroleerd.
Herstel
Vanuit Geschiedenis biedt elke back-up drie acties: Controleren (herberekent de SHA-256), Herstellen en Verwijderen.
Verloop van een herstel
- Er wordt automatisch een veiligheidssnapshot van de database gemaakt vóór elke bewerking.
- U kiest het bereik: alles, alleen de database, of alleen de bestanden.
- Is het archief versleuteld, dan wordt de wachtwoordzin gevraagd.
- De database wordt instructie per instructie hersteld; de bestanden worden in batches uitgepakt.
- De tabellen
dfbackup*blijven altijd behouden: uw back-upgeschiedenis overleeft het herstel.
Migratiemodus (domein wijzigen)
Vink Migratiemodus aan en geef het nieuwe domein op: de module werkt PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL en de tabel shop_url bij, en herschrijft de hardgecodeerde URL’s in de CMS-, product- en meta-inhoud. Handig om een winkel naar een pre-productieomgeving te klonen of naar een ander domein te verhuizen.
Leeg na een herstel altijd de cache (Prestaties > Cache legen) en controleer de startpagina in een privévenster.
Rotatie en bewaartermijn
Twee cumulatieve regels in Instellingen > Bewaartermijn:
- N back-ups bewaren: daarboven worden de oudste verwijderd;
- Verwijderen na X dagen: los van het aantal.
Alleen back-ups met de status completed of verified worden meegeteld en opgeschoond; de snapshots vóór een herstel of een update volgen dezelfde regels.
Meldingen en waarschuwingen
- E-mail: verzending via
Mail::Send(uw SMTP-instellingen van PrestaShop worden gerespecteerd) bij succes en/of mislukking, met templates FR/EN/ES/DE. - Webhook: plak een URL van Slack, Discord of Microsoft Teams; het formaat wordt automatisch herkend. Elke andere URL krijgt generieke JSON.
- Backofficewaarschuwing: bovenaan alle beheerpagina’s verschijnt een balk wanneer de laatste back-up is mislukt (rood) of ouder is dan 7 dagen (geel).
- Snapshot vóór een update: er start automatisch een databaseback-up vóór elke module-update (hook
actionAdminModulesUpgradeBefore), uit te schakelen in de instellingen.
Bestanden uitsluiten
De module sluit standaard var/dfbackup, var/cache, .git, node_modules en de autoupgrade-map uit. U kunt eigen paden en glob-patronen toevoegen (bijvoorbeeld img/tmp/* of *.log) in Instellingen > Uitsluitingen. De incrementele modus (alleen gewijzigde bestanden, herkend via een vingerafdruk van pad, grootte en datum) verkleint de tussenliggende back-ups aanzienlijk.
Probleemoplossing
Een back-up blijft op “running” staan
Is het proces afgebroken (bijvoorbeeld door een herstart van de server), dan wordt de regel bij de volgende start als mislukt gemarkeerd dankzij de flock-vergrendeling. U kunt ze ook vanuit de geschiedenis verwijderen.
“Another backup is already running”
Een bestandsvergrendeling verhindert twee gelijktijdige back-ups. Wacht tot de lopende back-up klaar is (zichtbaar op het dashboard) of controleer of een externe cron niet tegelijk met een handmatige start draait.
De back-up mislukt op een grote webshop
Verhoog Max execution time en Memory limit in de instellingen (de module past ze toe op haar eigen proces). Activeer de incrementele modus voor de bestanden en sluit grote, overbodige mappen uit (exports, logs).
Wijzigingen aan de module lijken geen effect te hebben
Bijna altijd serveert de PHP-opcache nog de oude bytecode. Leeg de PrestaShop-cache en herstart PHP-FPM (of wacht tot de opcache verloopt).
De web-cron-URL geeft een 404
Gebruik de URL in dispatcherformaat (index.php?fc=module&module=dfbackup&controller=webcron) die in de instellingen wordt getoond: sommige hostingpakketten blokkeren rechtstreekse toegang tot PHP-bestanden onder /modules/.
Verwijdering
Bij het verwijderen worden de vier tabellen en alle instellingen gewist. De archieven in var/dfbackup/ worden niet automatisch verwijderd: download uw recente back-ups voordat u de module verwijdert, als u van plan bent later opnieuw te installeren.