SW Shopware 6 Średnio zaawansowany

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.

Zaktualizowano Wersja modułu 1.0.0

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

  1. Pobierz archiwum DfBackup-SW-1.0.0.zip ze swojego konta DataFirefly.
  2. Skopiuj rozpakowany katalog DfBackup do custom/plugins/ swojego Shopware albo zainstaluj ZIP przez Administracja → Rozszerzenia → Moje rozszerzenia → Prześlij rozszerzenie.
  3. Uruchom instalację i aktywację:
    bin/console plugin:refresh
    bin/console plugin:install --activate DfBackup
    bin/console cache:clear
  4. 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 verified lub corrupted w 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_session dla 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.

  1. Zainstaluj DfBackup SW na produkcji i na stagingu.
  2. Wygeneruj wspólny sekret (długi losowy ciąg) i wpisz go po obu stronach.
  3. 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:

  1. Wybierz zakres: wszystko, sama baza lub same pliki.
  2. Aby potwierdzić, wpisz słowo RESTORE: zabezpieczenie przed przypadkowymi operacjami.
  3. 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.

Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia