DfBackup SW: kompletny przewodnik
Instalacja, konfiguracja i eksploatacja DfBackup SW: kopia bazy i plików, szyfrowanie AES-256, przechowywanie S3/FTP/Dropbox, replikacja stagingowa i przywracanie jednym kliknięciem dla Shopware 6.5, 6.6 i 6.7.
DfBackup SW to system kopii zapasowych klasy produkcyjnej dla Shopware 6.5, 6.6 i 6.7, bez żadnych zewnętrznych zależności: bez mysqldump, bez shell_exec, bez SDK Amazona. Wykonuje kopię bazy danych i plików w czystym PHP, szyfruje archiwa uwierzytelnianym AES-256, wysyła je do backendu Local, S3, FTP lub Dropbox, a nawet potrafi replikować każdą kopię do drugiego Shopware stagingowego. Przywracanie odbywa się jednym kliknięciem, z automatycznym snapshotem bezpieczeństwa. Ten przewodnik obejmuje instalację, wykonywanie w tle, szyfrowanie, backendy przechowywania, replikację, przywracanie, harmonogram i rozwiązywanie problemów.
Instalacja
- Pobierz archiwum
DfBackup-SW-1.0.0.zipze swojego konta DataFirefly. - Skopiuj rozpakowany katalog
DfBackupdocustom/plugins/swojego Shopware albo zainstaluj ZIP przez Administracja → Rozszerzenia → Moje rozszerzenia → Prześlij rozszerzenie. - Uruchom instalację i aktywację:
bin/console plugin:refresh bin/console plugin:install --activate DfBackup bin/console cache:clear - Przy instalacji plugin tworzy swoje cztery tabele (
df_backup,df_backup_log,df_backup_filemap,df_backup_audit) i rejestruje swój ScheduledTask.
Zgodny z Shopware 6.5.x, 6.6.x i 6.7.x na jednym codebase, PHP 8.1 do 8.3. Wymagane rozszerzenia PHP: zip i openssl (zawsze), curl (S3, Dropbox, replikacja) oraz ftp (backend FTP/FTPS). Żadnych dodatkowych zależności Composera.
Gdzie znaleźć plugin w administracji
Po aktywacji w menu pojawia się dedykowany moduł administracji DfBackup. Zawiera listę kopii zapasowych, przycisk Wykonaj kopię teraz, postęp w czasie rzeczywistym oraz dostęp do akcji per kopia (weryfikuj, pobierz, chroń, przywróć, usuń). Konfiguracja (harmonogram, szyfrowanie, backendy, replikacja, powiadomienia) odbywa się w konfiguracji pluginu przez Rozszerzenia → Moje rozszerzenia → DfBackup → ⋯ → Konfiguruj.
Wykonywanie w tle: Messenger, ScheduledTask i web-cron
Kopia zapasowa nigdy nie blokuje interfejsu. Kliknięcie Wykonaj kopię teraz prealokuje wiersz, dispatchuje asynchroniczną wiadomość Symfony Messenger i natychmiast zwraca identyfikator. Właściwa praca wykonuje się w workerze, a administracja pokazuje postęp na żywo przez 15 kamieni milowych (start, dump bazy, archiwizacja, szyfrowanie, checksum, upload per backend, rotacja).
Worker zalecany w produkcji
Dla sklepów produkcyjnych uruchom stale nadzorowany consumer Messengera:
bin/console messenger:consume async --time-limit=300 --memory-limit=512M
Umieść go pod systemd lub supervisorem, aby restartował się automatycznie. To konfiguracja, która pozwala wykonywać kopie bez żadnych limitów czasu web.
ScheduledTask
Natywny ScheduledTask uruchamia się co 10 minut i pełni rolę bramy harmonogramu: sprawdza, czy zaplanowana kopia powinna wystartować, i w razie potrzeby dispatchuje wiadomość. Zależy od schedulera Shopware, napędzanego przez worker albo cron Shopware.
Zapasowy web-cron
Na hostingach bez dostępu CLI i bez stałego workera włącz web-cron: adres URL podpisany tokenem (regenerowalnym z konfiguracji), który zewnętrzna usługa, na przykład cron-job.org, wywołuje co 10 do 15 minut. Wewnętrzna brama harmonogramu (okno 30 minut, deduplikacja 60 minut) zapobiega podwójnym uruchomieniom.
Jeśli strona administracji zostanie zamknięta w trakcie kopii, proces trwa dalej w workerze. Otwórz ponownie moduł DfBackup, aby zobaczyć postęp i wynik.
Dump bazy danych pomyślany pod Shopware
Naiwny dump SQL wysypuje się na Shopware. DfBackup SW natywnie obsługuje osobliwości schematu:
- Kolumny generowane (STORED lub VIRTUAL) są wykluczane z INSERT-ów, ponieważ MySQL nie pozwala na ich zapis.
- Kolumny binarne, w tym klucze główne UUID w BINARY 16, wszechobecne w Shopware, są emitowane jako literały szesnastkowe
0x…, co daje idealnie wierny reimport. - Paginacja keyset po całkowitoliczbowym kluczu głównym pozwala dumpować bardzo duże tabele (order, log_entry) bez zapychania pamięci.
- Widoki są odtwarzane na końcu, po wszystkich tabelach.
Dump jest dzielony na porcje (500 wierszy na partię), a wygenerowany plik importuje się czysto, instrukcja po instrukcji, z wyłączonym FOREIGN_KEY_CHECKS podczas importu.
Kopia plików
Pliki są archiwizowane przez ZipArchive z konfigurowalnymi wykluczeniami glob (domyślnie var/cache, var/log, node_modules, miniatury…). Opcjonalny tryb przyrostowy opiera się na sha1 ze ścieżki + rozmiaru + mtime śledzonym w bazie: ponownie archiwizowane są tylko pliki zmienione od ostatniej pełnej kopii.
Szyfrowanie AES-256
Szyfrowanie jest opcjonalne, ale mocno zalecane dla archiwów przechowywanych poza serwerem. DfBackup SW stosuje schemat AES-256-CBC plus HMAC-SHA-256 według wzorca encrypt-then-MAC:
- Passphrase przechodzi przez PBKDF2-SHA256 ze 120 000 iteracji w celu wyprowadzenia osobnych kluczy szyfrowania i HMAC.
- Szyfrowanie odbywa się strumieniowo, blokami po 1 MiB: archiwum wielogigabajtowe szyfruje się przy stałym zużyciu pamięci.
- Przy odczycie HMAC jest weryfikowany przed jakimkolwiek deszyfrowaniem (ochrona przed atakami padding oracle i bit-flip).
- Niezależny SHA-256 gwarantuje integralność surowego pliku (status
verifiedlubcorruptedw bazie).
Jeśli passphrase zostanie utracone, zaszyfrowane archiwa stają się definitywnie nieodzyskiwalne: to sama istota uwierzytelnianego szyfrowania. Przed włączeniem szyfrowania zapisz passphrase w zewnętrznym menedżerze haseł (Bitwarden, 1Password).
Backendy przechowywania
Każdą kopię można wysłać do jednego lub kilku backendów jednocześnie, aby stosować zasadę 3-2-1:
- Local: w
var/df-backup, z ochroną przed listingiem. - Amazon S3 i kompatybilne: natywny podpis AWS V4 (bez SDK), automatyczny multipart upload powyżej 100 MB (części po 10 MB). Zgodny z MinIO, Wasabi, Cloudflare R2, OVH, Scaleway, Backblaze B2 przez nadpisanie endpointu i regionu.
- FTP i FTPS: tryb pasywny, automatyczne tworzenie zdalnego katalogu.
- Dropbox v2: REST z chunkowanym
upload_sessiondla archiwów powyżej 150 MB.
Cloudflare R2 oferuje 10 GB za darmo z zerowymi kosztami transferu wychodzącego: świetny zdalny backend dla zaszyfrowanych kopii. W konfiguracji S3 podaj endpoint R2 i region auto.
Replikacja do Shopware stagingowego
To funkcja wyróżniająca DfBackup SW: wysyłanie każdej kopii do drugiej instalacji Shopware wyposażonej w ten sam plugin.
- Zainstaluj DfBackup SW na produkcji i na stagingu.
- Wygeneruj wspólny sekret (długi losowy ciąg) i wpisz go po obu stronach.
- Po stronie produkcji włącz Replikację jako destynację i podaj adres URL stagingu.
Przy każdej kopii archiwum jest uploadowane porcjami po 8 MB podpisanymi HMAC-SHA-256 do dedykowanych endpointów na maszynie docelowej (chunk, commit, delete, ping), z ochroną anty-replay przez znacznik czasu o tolerancji 5 minut. Jeśli po stronie stagingu włączono opcję auto-restore, archiwum jest stosowane automatycznie: Twój staging odzwierciedla wczorajszą produkcję już następnego ranka.
W połączeniu z migracją domeny (patrz niżej) replikacja daje klon natychmiast dostępny pod własną domeną, bez rsync i bez sysadminowych skryptów crona.
Przywracanie jednym kliknięciem
Z listy kopii przycisk Przywróć otwiera okno modalne:
- Wybierz zakres: wszystko, sama baza lub same pliki.
- Aby potwierdzić, wpisz słowo
RESTORE: zabezpieczenie przed przypadkowymi operacjami. - Opcjonalnie włącz tryb migracji domeny i podaj nową domenę.
Przed każdym przywracaniem automatycznie tworzony jest chroniony snapshot bazy: jeśli przywracanie nie powiedzie się w połowie, wracasz do stanu wyjściowego w kilka minut. Tabele pluginu (df_backup*) nigdy nie są nadpisywane: historia kopii jest zachowana nawet przy przywracaniu wersji sprzed sześciu miesięcy.
Przywracanie nadpisuje bieżącą bazę i pliki. Sprawdź wybrany zakres i unikaj przywracania starej wersji na produkcję, która w międzyczasie rejestrowała zamówienia, chyba że to kontrolowana migracja.
Migracja domeny
W trybie migracji plugin przepisuje sales_channel_domain i wykonuje zamianę best-effort w kolumnach tekstowych tabel tłumaczeń (CMS, produkty, kategorie) oraz w seo_url, aby klon był natychmiast dostępny pod własną domeną.
Harmonogram, rotacja i tryb konserwacji
- Częstotliwości: daily (godzina docelowa), weekly (dzień + godzina), monthly (dzień miesiąca + godzina). Okno tolerancji 30 minut i deduplikacja 60 minut.
- Rotacja: po liczbie kopii do zachowania i po wieku w dniach. Kopie oznaczone jako chronione (w szczególności snapshoty sprzed przywracania) nigdy nie podlegają rotacji.
- Opcjonalny tryb konserwacji: przełącza sales channels w tryb konserwacji na czas dumpu bazy dla idealnej spójności transakcyjnej, przydatne w sklepach o bardzo dużym wolumenie zamówień.
Powiadomienia i audyt
- E-mail przez Symfony Mailer (sukces, błąd lub oba, do wyboru).
- Webhook z automatycznym wykrywaniem formatu: Slack, Discord, Microsoft Teams lub generyczny JSON.
- Alert w module, gdy brak udanej kopii od N dni.
- Dziennik audytu: każda wrażliwa akcja (uruchomienie, przywracanie, usunięcie, weryfikacja, pobranie) jest zapisywana z użytkownikiem admina, adresem IP i znacznikiem czasu.
FAQ i rozwiązywanie problemów
Czy plugin działa bez shell_exec? Tak. Żadnych wywołań shell_exec, exec, passthru ani mysqldump. Wszystko w czystym PHP (DBAL, ZipArchive, cURL, natywne funkcje ftp).
Moje kopie nie startują automatycznie. Sprawdź, czy działa worker Messengera (lub czy web-cron jest regularnie wywoływany) i czy ScheduledTask DfBackup jest aktywny w Shopware. Bez workera i bez web-crona harmonogram nie może się wykonać.
Dump wysypuje się na dużej tabeli. Paginacja keyset normalnie radzi sobie z dużymi tabelami; upewnij się, że istnieje całkowitoliczbowy klucz główny, i w razie potrzeby zwiększ pamięć workera (--memory-limit).
Archiwum ma status corrupted. SHA-256 się nie zgadza: upload lub zapis został ucięty. Uruchom kopię ponownie i sprawdź miejsce na dysku oraz limity zdalnego backendu.
Jak zweryfikować kopię bez jej przywracania? Przycisk Weryfikuj przelicza SHA-256, a dla zaszyfrowanych archiwów kontroluje HMAC, niczego nie przywracając.
Co dzieje się przy odinstalowaniu? Z opcją usunięcia danych cztery tabele df_backup* są usuwane, a konfiguracja czyszczona. Pliki w var/df-backup nie są usuwane automatycznie: pobierz swoje najnowsze kopie przed odinstalowaniem.