# DfBackup SW: kompletny przewodnik

> 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…

- Strona: <https://www.datafirefly.com/pl/documentation/dfbackup-sw/>
- Język: pl
- Zaktualizowano: 2026-07-29
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfbackup-sw/index.md), [en](https://www.datafirefly.com/en/documentation/dfbackup-sw/index.md), [es](https://www.datafirefly.com/es/documentation/dfbackup-sw/index.md), [de](https://www.datafirefly.com/de/documentation/dfbackup-sw/index.md), [it](https://www.datafirefly.com/it/documentation/dfbackup-sw/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfbackup-sw/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfbackup-sw/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

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.
