PS PrestaShop Początkujący

dfbackup: kopia zapasowa PrestaShop 8 i 9, kompletny przewodnik

Instalacja, planowanie, składowanie S3, FTP i Dropbox, szyfrowanie AES-256, przywracanie jednym kliknięciem i replikacja staging w module dfbackup.

Zaktualizowano Wersja modułu 1.0.0

Prezentacja

dfbackup to kompletny moduł kopii zapasowych dla PrestaShop 8 i 9. Tworzy kopię bazy danych i plików w czystym PHP (bez mysqldump i bez shell_exec), opcjonalnie szyfruje archiwa algorytmem AES-256, wysyła je do kilku celów jednocześnie (lokalnie, S3, FTP, Dropbox, replikacja PrestaShop) i pozwala przywrócić sklep jednym kliknięciem, z automatyczną migawką bezpieczeństwa.

W menu Zaawansowane parametry w back office pojawiają się trzy zakładki: Dashboard (przegląd i uruchamianie ręczne), Historia (lista kopii, przywracanie, weryfikacja, usuwanie) i Ustawienia (planowanie, składowanie, szyfrowanie, powiadomienia).

Interfejs back office modułu jest dostarczany w czterech językach: francuskim, angielskim, hiszpańskim i niemieckim. W polskim sklepie wyświetla się w języku angielskim, dlatego w tym przewodniku nazwy przycisków podajemy w oryginale, z polskim objaśnieniem w nawiasie.

Instalacja

  1. W back office przejdź do Moduły > Menedżer modułów > Wgraj moduł.
  2. Wybierz plik dfbackup-1.0.0.zip pobrany po zakupie.
  3. Kliknij Zainstaluj. Moduł tworzy cztery tabele (dfbackup, dfbackup_log, dfbackup_filemap, dfbackup_audit) oraz katalog składowania var/dfbackup/ zabezpieczony plikiem .htaccess.
  4. Otwórz Zaawansowane parametry > DF Backup, aby wejść na dashboard.

Po każdej aktualizacji modułu wyczyść pamięć podręczną PHP (opcache) i pamięć Smarty: Zaawansowane parametry > Wydajność > Wyczyść pamięć podręczną. Na części hostingów konieczny jest restart PHP-FPM, aby przeładować bytecode.

Pierwsza kopia zapasowa

Na dashboardzie trzy przyciski pozwalają uruchomić kopię ręcznie:

  • Run backup now (uruchom kopię teraz): pełna kopia bazy i plików;
  • Database only (tylko baza): sam zrzut bazy, szybki, w większości sklepów poniżej minuty;
  • Files only (tylko pliki): samo archiwum plików.

Kopia wykonuje się w tle, we własnym procesie PHP: strona się nie blokuje, a karta postępu pokazuje logi w czasie rzeczywistym z szacowanym procentem (zrzut bazy, archiwizacja plików, szyfrowanie, suma kontrolna, upload, rotacja). Możesz opuścić stronę, kopia działa dalej po stronie serwera.

Planowanie

W Ustawienia > Planowanie dostępne są trzy częstotliwości:

  • Daily (codziennie): każdego dnia o zadanej godzinie, na przykład 03:00;
  • Weekly (tygodniowo): wybrany dzień tygodnia i godzina;
  • Monthly (miesięcznie): wybrany dzień miesiąca i godzina.

Okno tolerancji 30 minut i deduplikacja w oknie 60 minut zapobiegają podwójnym uruchomieniom. Współistnieją dwa mechanizmy wykonania:

Natywny cron PrestaShop

Hook actionCronJob uruchamia się przy wizytach w sklepie. Wystarcza sklepom z regularnym ruchem, ale nie daje gwarancji uruchomienia w nocy.

Web-cron (zalecany)

W ustawieniach wyświetlany jest adres podpisany tokenem, w formacie:

https://twoj-sklep.pl/index.php?fc=module&module=dfbackup&controller=webcron&token=TWOJ_TOKEN

Skonfiguruj bezpłatną usługę zewnętrzną, na przykład cron-job.org albo EasyCron, tak aby wywoływała ten adres co godzinę (albo co 15 minut). Moduł sam sprawdza, czy nadeszła godzina docelowa, i odpowiada natychmiast QUEUED | id=N, gdy kopia zostaje uruchomiona, albo Not scheduled now. w przeciwnym razie. Odpowiedź jest błyskawiczna, więc po stronie usługi crona nie ma ryzyka przekroczenia limitu czasu.

Przycisk Regenerate token (wygeneruj token na nowo) unieważnia stary adres natychmiast. Pamiętaj, aby po regeneracji zaktualizować konfigurację zewnętrznej usługi crona.

Cele składowania

Każda kopia może trafiać do kilku celów jednocześnie, zgodnie z regułą 3-2-1 (trzy kopie, dwa nośniki, jedna poza siedzibą). Zaznacz wybrane cele w Ustawienia > Składowanie:

Lokalnie

Archiwa pozostają w katalogu var/dfbackup/ pod katalogiem głównym PrestaShop, chronione regułą Deny w pliku .htaccess. Zawsze aktywne jako kopia robocza.

Amazon S3 i usługi zgodne

Podaj Access Key, Secret Key, bucket i region. Pole Endpoint pozwala użyć dowolnej usługi zgodnej z S3:

  • Amazon S3: zostaw endpoint pusty, podaj region, na przykład eu-central-1;
  • Cloudflare R2: https://ACCOUNT_ID.r2.cloudflarestorage.com, region auto, 10 GB za darmo i zerowy koszt transferu wychodzącego;
  • samodzielnie hostowane MinIO: https://minio.twoja-domena.pl;
  • OVH Object Storage, Scaleway, Wasabi, Backblaze B2: endpoint podany przez dostawcę.

Multipart upload uruchamia się automatycznie powyżej 100 MB (części po 10 MB), więc archiwa wielogigabajtowe przechodzą bez wysycania pamięci PHP.

FTP i FTPS

Host, port, dane logowania, katalog zdalny (tworzony automatycznie, jeśli nie istnieje), przełączniki FTPS i trybu pasywnego.

Dropbox

Wklej access token wygenerowany w konsoli deweloperskiej Dropbox (uprawnienie files.content.write). Archiwa powyżej 150 MB automatycznie przechodzą na upload_session z podziałem na części.

Każdy cel ma przycisk Test, który sprawdza połączenie i prawa zapisu jeszcze przed pierwszą realną kopią.

Replikacja do środowiska staging PrestaShop

Replikacja wypycha każdą kopię do drugiej instalacji PrestaShop wyposażonej w dfbackup. To idealne rozwiązanie, aby utrzymywać środowisko przedprodukcyjne synchronizowane co noc.

Konfiguracja

  1. Na sklepie docelowym (staging): zainstaluj dfbackup, a następnie zapisz wspólny sekret (co najmniej 32 losowe znaki) pod kluczem konfiguracyjnym DFBACKUP_REPLICATION_SECRET (w ustawieniach modułu albo w Zaawansowane parametry > Konfiguracja).
  2. Na sklepie źródłowym (produkcja): w Ustawienia > Składowanie > Replikacja PrestaShop podaj adres środowiska staging (na przykład https://staging.twoj-sklep.pl) i ten sam sekret. Zaznacz Replikację wśród celów składowania.
  3. Kliknij Test replication target (przetestuj cel replikacji): cel powinien odpowiedzieć OK.

Automatyczne przywracanie (opcjonalne)

Aby staging sam stosował każde odebrane archiwum, ustaw po stronie docelowej klucz DFBACKUP_REPLICATION_AUTO_RESTORE = 1 i zaznacz odpowiadającą opcję po stronie źródłowej. Następnego ranka staging odzwierciedla produkcję z poprzedniego dnia.

Automatyczne przywracanie nadpisuje bazę i pliki środowiska staging przy każdym odbiorze. Nigdy nie włączaj go na sklepie produkcyjnym. Flaga po stronie docelowej jest celowo oddzielona od wspólnego sekretu, właśnie jako zabezpieczenie.

Bezpieczeństwo transportu

Archiwa są przesyłane partiami po 8 MB, każda podpisana HMAC-SHA-256 (podpis obejmuje parametry i hash treści). Ochrona przed powtórzeniem odrzuca każde żądanie, którego znacznik czasu odbiega o więcej niż 5 minut.

Szyfrowanie AES-256

W Ustawienia > Szyfrowanie zaznacz pole wyboru i ustal hasło. Archiwa są wtedy szyfrowane algorytmem AES-256-CBC z HMAC-SHA-256 (wzorzec encrypt-then-MAC, wyprowadzanie klucza przez PBKDF2 ze 120000 iteracjami).

  • Hasło nigdy nie jest przechowywane jawnie. Zapisywany jest wyłącznie jego hash, używany do weryfikacji przy przywracaniu.
  • Zaszyfrowane archiwum, do którego zgubiono hasło, jest trwale nie do odzyskania. Zapisz hasło w menedżerze haseł (Bitwarden, 1Password), zanim włączysz tę opcję.
  • Suma kontrolna SHA-256 jest liczona z archiwum przed zaszyfrowaniem i weryfikowana przy przywracaniu.

Przywracanie

W zakładce Historia każda kopia ma trzy akcje: Verify (zweryfikuj, przelicza SHA-256), Restore (przywróć) i Delete (usuń).

Przebieg przywracania

  1. Przed jakąkolwiek operacją automatycznie tworzona jest migawka bezpieczeństwa bazy.
  2. Wybierasz zakres: wszystko, sama baza albo same pliki.
  3. Jeśli archiwum jest zaszyfrowane, moduł prosi o hasło.
  4. Baza jest przywracana instrukcja po instrukcji, pliki wypakowywane partiami.
  5. Tabele dfbackup*zawsze zachowywane, więc historia kopii przetrwa przywracanie.

Tryb migracji (zmiana domeny)

Zaznacz Tryb migracji i podaj nową domenę. Moduł zaktualizuje PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL, tabelę shop_url oraz przepisze adresy zapisane na sztywno w treściach CMS, produktach i meta. Przydatne przy klonowaniu sklepu na środowisko przedprodukcyjne albo przy przenosinach na inną domenę.

Po przywróceniu zawsze wyczyść pamięć podręczną (Wydajność > Wyczyść pamięć podręczną) i sprawdź stronę główną w oknie prywatnym przeglądarki.

Rotacja i retencja

W Ustawienia > Retencja działają dwie łączone reguły:

  • Zachowaj N kopii: powyżej tej liczby najstarsze są usuwane;
  • Usuń po X dniach: niezależnie od liczby kopii.

Liczone i czyszczone są wyłącznie kopie o statusie completed albo verified. Migawki tworzone przed przywracaniem i przed aktualizacją modułu podlegają tym samym regułom.

Powiadomienia i alerty

  • E-mail: wysyłka przez Mail::Send (Twoje ustawienia SMTP w PrestaShop są respektowane), przy sukcesie i przy błędzie, szablony FR, EN, ES i DE.
  • Webhook: wklej adres Slacka, Discorda albo Microsoft Teams, format jest wykrywany automatycznie. Każdy inny adres otrzymuje ogólny JSON.
  • Alert w back office: baner na górze wszystkich stron administracyjnych, gdy ostatnia kopia się nie powiodła (czerwony) albo jest starsza niż 7 dni (żółty).
  • Migawka przed aktualizacją: kopia bazy uruchamiana automatycznie przed każdą aktualizacją modułu (hook actionAdminModulesUpgradeBefore), do wyłączenia w ustawieniach.

Wykluczenia plików

Moduł domyślnie wyklucza var/dfbackup, var/cache, .git, node_modules oraz katalog autoupgrade. W Ustawienia > Wykluczenia możesz dodać własne ścieżki i wzorce glob, na przykład img/tmp/* albo *.log. Tryb przyrostowy (tylko pliki zmienione, wykrywane po odcisku ze ścieżki, rozmiaru i daty) mocno zmniejsza rozmiar kopii pośrednich.

Rozwiązywanie problemów

Kopia zostaje w stanie „running”

Jeśli proces został zabity (restart serwera), wiersz zostanie oznaczony jako nieudany przy następnym uruchomieniu, dzięki blokadzie flock. Możesz też usunąć go ręcznie z historii.

Komunikat „Another backup is already running”

Blokada plikowa uniemożliwia dwie równoległe kopie. Poczekaj na zakończenie bieżącej kopii (widocznej na dashboardzie) albo sprawdź, czy zewnętrzny cron nie uruchamia się dokładnie wtedy, gdy startujesz kopię ręcznie.

Kopia kończy się błędem na dużym sklepie

Zwiększ Max execution time i Memory limit w ustawieniach (moduł stosuje je do własnego procesu). Włącz tryb przyrostowy dla plików i wyklucz duże, niepotrzebne katalogi (eksporty, logi).

Zmiany w module nie są widoczne

Prawie zawsze odpowiada za to opcache PHP, który serwuje stary bytecode. Wyczyść pamięć podręczną PrestaShop oraz zrestartuj PHP-FPM (albo poczekaj na wygaśnięcie opcache).

Adres web-crona zwraca błąd 404

Użyj adresu w formacie dispatchera (index.php?fc=module&module=dfbackup&controller=webcron) pokazanego w ustawieniach. Część hostingów blokuje bezpośredni dostęp do plików PHP w katalogu /modules/.

Deinstalacja

Deinstalacja usuwa cztery tabele i wszystkie konfiguracje. Archiwa znajdujące się w var/dfbackup/ nie są usuwane automatycznie. Jeśli planujesz późniejszą reinstalację, pobierz najnowsze kopie przed deinstalacją.

Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia