Do czego służy moduł
- Ochrona od pierwszej minuty. Instalacja tworzy profil „Codzienna pełna kopia”: pliki i baza każdej nocy o 03:00, siedem najnowszych kopii na serwerze. Kopie z harmonogramu potrzebują wywołania crona co kilka minut albo wyzwalacza z panelu – pulpit pokazuje gotowy adres i komendę.
- Kopia, która przetrwa awarię serwera. Kopia leżąca tylko na tym samym serwerze co sklep przepada razem z nim. Moduł wysyła każdą gotową kopię do zaznaczonych miejsc poza serwerem i ostrzega na pulpicie, gdy żadnego takiego miejsca nie ma.
- Zabezpieczenie przed aktualizacją. Przycisk „Szybka migawka przed aktualizacją” kopiuje bazę oraz moduły, motywy, nadpisania i konfigurację – to, co aktualizacja może zepsuć – bez masy zdjęć, w ułamku czasu pełnej kopii.
- Naprawa po awarii, włamaniu lub nieudanej zmianie. Odtworzenie całego sklepu albo tylko jego części: bazy, plików, jednej tabeli lub jednego katalogu, na przykład motywu.
- Odtworzenie na nowym serwerze. Awaryjny skrypt
pdrestore.phpodtwarza sklep z kopii na pustym serwerze, bez zainstalowanego PrestaShop – po utracie serwera albo przy zmianie hostingu pod tym samym adresem sklepu.
Co trafia do kopii zapasowej
Pięć zakresów kopii
- Pliki i baza – wszystko, czego trzeba do odbudowania sklepu (zalecane).
- Tylko baza – mała i szybka kopia, dobra do częstych kopii między pełnymi.
- Tylko pliki – zdjęcia, moduły, motywy i pozostałe pliki sklepu.
- Szybka migawka – baza oraz katalogi modules, themes, override, config, app/config, mails, translations, classes i controllers.
- Własny zakres – baza i zaznaczone katalogi najwyższego poziomu; luźne pliki katalogu głównego (index.php, .htaccess i podobne) są dołączane zawsze.
Baza danych
- Zrzut w czystym PHP. Tabele, widoki, wyzwalacze, procedury, funkcje i zdarzenia, bez narzędzia mysqldump i bez dostępu do powłoki serwera.
- Tabele sklepu albo cała baza. Domyślnie kopiowane są tabele z prefiksem sklepu; jedna opcja dołącza wszystkie tabele bazy, na przykład tabele zewnętrznej integracji.
- Tabele bez wierszy i tabele pominięte. Statystyki odwiedzin, indeks wyszukiwarki, pamięć podręczna i logi trafiają do kopii jako sama struktura. Własne listy pozwalają dodać kolejne tabele kopiowane bez wierszy albo pominąć tabele całkowicie.
- Zamknięcie sklepu na czas kopiowania bazy. Opcja profilu przełącza sklep w tryb konserwacji tylko na minuty zrzutu bazy, tak aby żadne zamówienie nie zostało uchwycone w połowie zapisu, i otwiera go ponownie – także wtedy, gdy kopia się nie powiedzie.
Pliki i wykluczenia
- Zawsze pomijane. Pamięć podręczna, logi, sesje, obrazy tymczasowe, katalogi .git i node_modules, katalog kopii samego modułu oraz katalogi kopii innych modułów kopii zapasowych i modułu aktualizacji.
- Własne wykluczenia. Pomijane ścieżki z symbolem wieloznacznym (themes/*/cache, **/nazwa), pomijane typy plików (np. zip, mp4, psd) i limit rozmiaru pojedynczego pliku.
- Miniatury i zdjęcia produktów. Osobne opcje pomijają miniatury zdjęć (da się je wygenerować z oryginałów) albo cały katalog zdjęć produktów, gdy zdjęcia mają własną kopię.
- Pliki zmieniane w trakcie kopii. Plik zmieniony, usunięty lub nieczytelny podczas kopiowania jest odnotowywany w dzienniku, a kopia biegnie dalej.
Kompresja i podział na pliki
- Cztery poziomy kompresji gzip – brak, lekka, zalecana i najmocniejsza. Dane, które się nie kompresują (zdjęcia, archiwa), moduł sam zapisuje bez kompresji, oszczędzając czas.
- Kopia podzielona na pliki o wybranej wielkości (domyślnie 256 MB, od 16 do 4096 MB), dzięki czemu wysyłkę można wznawiać, a limity rozmiaru pliku na hostingu nie przeszkadzają. Obsługiwane są pliki sklepu większe niż 2 GB.
Harmonogram i automatyczne kopie
- Profile kopii. Każdy profil ma własny zakres, harmonogram, miejsca docelowe, reguły usuwania starych kopii i szyfrowanie – na przykład pełna kopia codziennie i dodatkowo sama baza co kilka godzin.
- Harmonogram. Tylko ręcznie, co kilka godzin (od 1 do 24 godzin albo co 2–7 dób), codziennie, w wybrane dni tygodnia lub raz w miesiącu (w krótszym miesiącu – ostatniego dnia), o godzinie w strefie czasowej sklepu.
- Trzy sposoby uruchamiania. Adres crona z tajnym tokenem (wywoływany co 5 minut, nowy adres jednym kliknięciem), wiersz poleceń
php modules/pdbackupandrestorepro/cli.phpz komendami cron, run i status – bez limitu czasu – oraz wyzwalacz z panelu dla hostingów bez crona, który uruchamia zaległą kopię przy wizycie pracownika w panelu. - Krótkie, wznawiane kroki. Czas jednego kroku ustawiasz od 5 do 120 sekund (zalecane 20). Po każdym kroku postęp jest zapisywany, a adres crona sam wywołuje kolejny krok; gdy serwer na to nie pozwala, kopię kontynuuje następne wywołanie crona.
- Postęp na żywo. Pasek postępu, bieżący etap i ostatnie zdarzenia. Zamknięcie karty przeglądarki nie przerywa kopii, a przycisk „Zatrzymaj” kończy ją w najbliższym bezpiecznym miejscu.
- Jedno zadanie naraz. Blokada w bazie i blokada pliku nie pozwalają, by dwa procesy (np. cron i karta przeglądarki) wykonywały tę samą kopię jednocześnie. Zadanie, które trzy razy z rzędu nie zrobi postępu, kończy się błędem z podaną przyczyną.
Gdzie przechowywać kopie: dysk, NAS, FTP, FTPS, SFTP, S3
- Inny katalog na tym serwerze – drugi dysk albo zamontowany dysk sieciowy (NAS), poza katalogiem sklepu.
- FTP i FTPS. FTPS szyfruje połączenie i sprawdza certyfikat serwera (sprawdzanie można wyłączyć dla własnego serwera z certyfikatem podpisanym samodzielnie); tryb pasywny lub aktywny.
- SFTP (SSH). Logowanie hasłem albo kluczem prywatnym (RSA w formacie PEM lub klucz OpenSSH, także zabezpieczony hasłem; klucze ed25519 tam, gdzie obsługuje je cURL hostingu) oraz opcjonalny odcisk klucza serwera, z którym moduł rozmawia wyłącznie z właściwym serwerem.
- Magazyn zgodny z S3. Amazon S3, Backblaze B2, Wasabi, Cloudflare R2, Hetzner, OVH, MinIO i inne usługi zgodne z S3: adres usługi, region, bucket, katalog w buckecie (kilka sklepów w jednym buckecie) i adresowanie bucketu w ścieżce. Duże pliki są wysyłane w częściach, a moduł nigdy nie zmienia ustawień samego bucketu.
- Test połączenia. Przycisk „Testuj połączenie” zapisuje, odczytuje i usuwa plik próbny, a gdy usługa to podaje – pokazuje wolne miejsce. Wynik ostatniego testu widać na liście miejsc docelowych.
- Wznawiana wysyłka. Kopia jest wysyłana do zaznaczonych miejsc po kolei i w częściach; przerwana wysyłka wznawia się od miejsca, w którym stanęła, a na serwerach FTP, FTPS i SFTP rozmiar wysłanego pliku jest porównywany z oryginałem. Resztki kopii, której nie udało się wysłać, są usuwane z miejsca docelowego.
- Skrypt odtwarzania razem z kopią. Domyślnie do każdego miejsca poza serwerem trafia też
pdrestore.php, więc kopię da się odtworzyć nawet wtedy, gdy sklepu i jego panelu już nie ma.
Usuwanie starych kopii (retencja)
- W miejscach docelowych. Liczba najnowszych kopii zachowywanych w każdym miejscu, usuwanie kopii starszych niż wybrana liczba dni oraz długa historia według schematu dzień–tydzień–miesiąc: dodatkowo najnowsza kopia z każdego z ostatnich dni, tygodni lub miesięcy.
- Na tym serwerze. Osobna liczba najnowszych kopii i osobny limit wieku. Przy braku miejsca na dysku profil może usuwać kopię z serwera, gdy dotrze ona do co najmniej jednego miejsca docelowego.
- Czego reguły nie usuwają. Najnowszej dobrej kopii, kopii oznaczonych jako chronione (na liście kopii albo dla całego profilu, np. migawek przed aktualizacją) i kopii, z której przygotowano odtwarzanie. Stare kopie są usuwane dopiero po tym, jak nowa kopia dotrze na miejsce.
- Sprzątanie resztek. Gdy profil nie trzyma kopii na serwerze, kopie pobrane do odtworzenia znikają z serwera po tygodniu, a z kopii, których nie udało się wysłać, zostają tam dwie najnowsze. Usunięcie przerwane w połowie jest ponawiane. Z kopii wykonanych z wiersza poleceń bez profilu na serwerze zostaje siedem najnowszych.
Szyfrowanie kopii i bezpieczeństwo
- AES-256 z kontrolą integralności. Każdy fragment kopii jest szyfrowany algorytmem AES-256 (tryb CTR) i podpisany HMAC-SHA256; klucz powstaje z hasła przez PBKDF2-SHA256 (200 000 iteracji). Zaszyfrowana jest także lista plików kopii, więc nazwy plików nie są widoczne.
- Wykrywanie podmiany. Opis kopii (manifest) jest podpisany, a każdy fragment związany z kopią, plikiem i miejscem w pliku – podmieniony, przestawiony lub podłożony z innej kopii fragment nie przejdzie kontroli.
- Hasło kopii. Co najmniej 12 znaków, wpisywane dwa razy, przechowywane w postaci zaszyfrowanej i nigdzie więcej niepokazywane. Bez hasła zaszyfrowanej kopii nie odtworzy nikt, także autor modułu. Nowe hasło dotyczy przyszłych kopii.
- Zaszyfrowane dane logowania. Hasła i klucze miejsc docelowych są przechowywane w bazie w postaci zaszyfrowanej i nie wracają do formularza.
- Katalog kopii zamknięty dla internetu. Przy instalacji moduł wybiera katalog poza publiczną częścią strony, jeśli hosting na to pozwala; w przeciwnym razie folder o losowej nazwie z plikami ochronnymi. Przycisk „Sprawdź z internetu” na pulpicie sprawdza, czy pliki z katalogu da się pobrać, a dla nginx podaje gotową regułę blokującą.
- Ostrzeżenia w panelu. Lista profili ostrzega, gdy niezaszyfrowane kopie trafiają poza serwer, a lista miejsc docelowych – gdy miejsce SFTP nie sprawdza klucza serwera.
- Bez połączeń z serwerami autora. Moduł nie wysyła danych do autora i nie uruchamia poleceń systemowych; poza własnym sklepem łączy się wyłącznie z miejscami docelowymi i adresem monitoringu, które sam ustawisz.
Weryfikacja kopii i próbne odtworzenie
- Sprawdzenie każdej kopii. Po wykonaniu kopia jest odczytywana ponownie, a sumy SHA-256 wszystkich jej fragmentów porównywane z zapisanymi. Na liście kopia ma wtedy status „zweryfikowana”.
- Próbne odtworzenie. Pełny odczyt kopii – odszyfrowanie, dekompresja, sprawdzenie archiwum i policzenie instrukcji SQL względem opisu kopii – bez żadnych zmian w sklepie. Kopia przechowywana tylko poza serwerem jest do tego pobierana.
- Przypomnienie. Pulpit zaznacza, gdy w ostatnim miesiącu żadna kopia nie została odczytana w całości.
Odtwarzanie sklepu z kopii w panelu
- Kreator w trzech krokach. Wybór kopii, wybór tego, co ma wrócić, i potwierdzenie przez wpisanie adresu sklepu. Do potwierdzenia nic się nie zmienia.
- Pięć zakresów odtwarzania. Wszystko, co jest w kopii; tylko baza danych; tylko pliki; wybrane tabele; wybrane katalogi (np. themes/classic albo img/p).
- Najpierw stan obecny. Zalecana opcja wykonuje przed odtworzeniem chronioną kopię tego, co zostanie zastąpione – przy kopiach szyfrowanych zaszyfrowaną hasłem profilu. Jeśli odtworzenie okaże się pomyłką, wracasz do stanu sprzed niego.
- Kontrola przed startem. Wolne miejsce na dysku, prawo zapisu w katalogu sklepu, zgodność prefiksu tabel, wersja PrestaShop, z której pochodzi kopia, i hasło kopii zaszyfrowanej. Ostrzeżenia są pokazane przed potwierdzeniem.
- Bezpieczne wykonanie. Na czas odtwarzania sklep jest zamknięty dla klientów i otwierany na końcu. Odtwarzanie działa na osobnej stronie poza panelem, bo sam panel jest w tym czasie zastępowany; po przerwaniu rusza od miejsca, w którym stanęło, a strona usuwa się po zakończeniu.
- Plik ustawień i logowanie. Plik ustawień PrestaShop pochodzi z kopii, ale zachowuje połączenie z bazą bieżącego serwera. Po odtworzeniu bazy pracownicy logują się kontami z dnia wykonania kopii.
- Kopie spoza serwera. Kopię przechowywaną tylko w miejscu docelowym przycisk „Pobierz i sprawdź” pobiera i od razu odczytuje w całości, zanim posłuży do odtworzenia.
- Kopie z nowszego serwera bazy. Przy odtwarzaniu kopii wykonanej na nowszej wersji MySQL lub MariaDB nieznane kolacje i usunięte tryby SQL są zastępowane odpowiednikami, a pozostałe błędy są zgłaszane.
- Przerwane odtwarzanie. Odtwarzanie, które przez 10 minut nie da znaku życia, można porzucić z panelu – sklep zostaje ponownie otwarty, a kopie znów są wykonywane.
Awaryjne odtwarzanie bez panelu: pdrestore.php
- Jeden plik.
pdrestore.phppobierzesz z zakładki Odtwarzanie; domyślnie leży też w każdym miejscu docelowym obok kopii. - Bez PrestaShop. Wgrywasz skrypt razem z plikami kopii (nazwy zaczynające się od pdbr-) do katalogu sklepu i otwierasz go w przeglądarce. Gdy na serwerze nie ma sklepu, skrypt pyta o dane bazy danych.
- Dowód dostępu do serwera. Skrypt tworzy obok siebie plik z kodem, który trzeba przepisać – nikt obcy, kto zna adres skryptu, go nie użyje.
- Wznawianie i sprzątanie. Po zerwaniu połączenia odtwarzanie rusza od ostatniego ukończonego kroku, a na koniec skrypt usuwa się z serwera jednym przyciskiem. Interfejs po polsku i angielsku.
Pulpit: czy sklep jest chroniony?
- Ocena w jednym zdaniu. Na przykład „Sklep jest chroniony. Ostatnia kopia jest z …, następna zaplanowana na …” albo konkretny problem: brak kopii, nieudana kopia, zbyt stara kopia, niedziałający cron, brak miejsca poza serwerem, katalog kopii otwarty z internetu.
- Lista kontrolna. Ostatnia kopia, jej wiek, harmonogram, cron, kopia poza serwerem, katalog kopii, powiadomienia i próbne odtworzenie – każdy punkt z przyciskiem prowadzącym do miejsca, w którym go naprawisz.
- Kafelki, wykres i zdarzenia. Ostatnia dobra kopia, następna kopia, liczba kopii na serwerze (z ich rozmiarem) i w każdym miejscu docelowym, wolne miejsce na dysku, wykres rozmiaru i czasu ostatnich kopii oraz ostatnie zdarzenia z dziennika.
- Cztery pytania na start. Co kopiować, gdzie trzymać kopie, kiedy i kogo powiadomić – odpowiedzi zapisują się w profilu. Nowe miejsce docelowe dodasz w trakcie, a po udanym teście połączenia wrócisz do pytań z tym miejscem zaznaczonym.
- Test środowiska. Wersja PHP, rozszerzenia, limity czasu i pamięci, katalog kopii i wolne miejsce na dysku – z wyjaśnieniem, co każde ograniczenie oznacza.
- Nagłówek na każdej zakładce. Ostatnia dobra kopia, najbliższa zaplanowana kopia i stan ochrony widoczne z każdej strony modułu.
Powiadomienia e-mail i monitoring
- Alarmy. E-mail, gdy kopia się nie uda; gdy kopia powstała, ale nie dotarła do wszystkich miejsc docelowych; gdy profil nie ma dokąd jej wysłać; gdy kopia z harmonogramu nie mogła się rozpocząć oraz gdy przez ustawiony czas (domyślnie 48 godzin) nie ma udanej kopii.
- Potwierdzenia. Opcjonalny e-mail po każdej udanej kopii, z rozmiarem i liczbą miejsc, w których jest przechowywana.
- Odbiorcy i język. Dowolna lista adresów (puste pole = adres e-mail sklepu); wiadomości w języku domyślnym sklepu, po polsku albo po angielsku.
- Adres monitoringu (heartbeat). Wywoływany po każdej udanej kopii, dzięki czemu zewnętrzna usługa monitoringu powiadomi Cię, gdy kopie przestaną powstawać. Ustawienia pokazują, kiedy ostatnio odezwał się cron, a pulpit alarmuje, gdy cron przestał wywoływać sklep.
Lista kopii i dziennik
- Lista kopii. Profil, zawartość, rozmiar, czas trwania, miejsca przechowywania, wynik weryfikacji i ochrona. Szczegóły kopii: rozmiar przed kompresją, liczba plików i tabel, szyfrowanie oraz wersje PrestaShop i modułu, które ją wykonały.
- Działania na kopii. Pobranie plików kopii na własny komputer (z możliwością wznowienia pobierania), notatka, ochrona przed automatycznym usuwaniem, próbne odtworzenie, odtworzenie i usunięcie ze wszystkich miejsc naraz.
- Znajdź kopie w katalogu. Kopie leżące w katalogu kopii, a nieobecne na liście (np. przeniesione z innego serwera), są dodawane do listy jednym przyciskiem.
- Dziennik. Każdy krok kopii, wysyłki i odtwarzania z czytelnym, przetłumaczonym komunikatem; filtrowanie i pobieranie dziennika jako pliku tekstowego. Pobrania kopii, odtworzenia i porzucenia odtwarzania – z nazwą pracownika – są przechowywane przez dwa lata, pozostałe wpisy przez sześć miesięcy.
Otwarty format kopii
- Zwykłe archiwa .tar.gz. Niezaszyfrowaną kopię otworzy każdy program do archiwów (7-Zip, WinRAR, tar), a baza jest w środku jako pliki SQL w katalogu db – kopia nie uzależnia od modułu.
- Niezależne fragmenty. Każdy plik kopii składa się z fragmentów kompresowanych i sprawdzanych osobno, dzięki czemu kopię, weryfikację, wysyłkę i odtwarzanie można wznawiać po przerwie.
Uprawnienia, wiele sklepów i odinstalowanie
- Uprawnienia pracowników. Pracownik z prawem podglądu widzi kopie, postęp i dziennik; uruchamianie kopii, pobieranie plików kopii, odtwarzanie i zmiana ustawień wymagają prawa edycji. Każde działanie w panelu sprawdza token bezpieczeństwa i uprawnienia.
- Wiele sklepów (multistore). Kopia obejmuje całą instalację PrestaShop – wszystkie sklepy naraz – a ustawienia modułu są wspólne dla instalacji.
- Odinstalowanie. Usuwa ustawienia modułu, harmonogramy i historię kopii. Pliki kopii na dysku i w miejscach docelowych zostają.
Wymagania i zgodność
- PrestaShop 1.7.0–9.x, PHP 7.0–8.5 (64-bitowe), MySQL 5.6+ lub MariaDB 10+.
- Rozszerzenia PHP. zlib (kompresja, wymagane), OpenSSL (szyfrowanie kopii i ochrona danych logowania), cURL (FTP, FTPS, SFTP, S3, sprawdzanie katalogu kopii z internetu i adres monitoringu); SFTP wymaga cURL zbudowanego z obsługą SFTP. Ustawienie mbstring.func_overload musi być wyłączone.
- Małe wymagania pamięciowe. Sam silnik kopii potrzebuje około 20 MB pamięci; krótki limit czasu żądania nie przeszkadza.
- Bez zależności. Bez Composera, bez dołączonych bibliotek, bez exec i poleceń powłoki.
- Języki. Interfejs modułu, e-maile i skrypt odtwarzania po polsku i angielsku.
Ważne granice działania (wersja 1.0)
- Odtworzenie pod innym adresem sklepu albo do bazy z innym prefiksem tabel nie jest obsługiwane – moduł odmawia przed pierwszą zmianą.
- Każda kopia jest pełną kopią swojego zakresu; kopie przyrostowe nie są dostępne.
- Wśród miejsc docelowych nie ma Google Drive ani Dropbox.
- Odtworzenie nie usuwa plików ani tabel, które pojawiły się w sklepie po wykonaniu kopii.
- Widoki, wyzwalacze i procedury wracają tylko przy odtwarzaniu całej bazy.
- Kopia bazy wykonywana przez adres crona lub przeglądarkę powstaje w wielu krótkich krokach; w ruchliwym sklepie zalecana jest opcja zamknięcia sklepu na czas kopiowania bazy albo uruchamianie kopii z wiersza poleceń.
- Kopie z harmonogramu wymagają crona; wyzwalacz z panelu jest wyjściem awaryjnym zależnym od wizyt pracowników.
- Skrypt awaryjny potrzebuje pliku opisu kopii (nazwa kończy się na .manifest.json).
- Odinstalowanie zostawia w katalogu sklepu pliki rozpoczętego i niedokończonego odtwarzania (pdbr-restore-*) – trzeba je dokończyć, porzucić w panelu albo usunąć ręcznie.
- Dziennik przez dwa lata przechowuje nazwy pracowników, którzy pobrali kopię lub odtworzyli sklep – warto to uwzględnić w rejestrze czynności przetwarzania danych osobowych.