Jak zrobić backup Drupala? Przegląd modułu Backup and Migrate
Podczas tworzenia witryn internetowych niejednokrotnie zachodzi potrzeba szybkiego tworzenia kopii zapasowych z danymi, które nie znajdują się w repozytorium kodu. W przypadku Drupala istnieje możliwość wygenerowania kopii za pośrednictwem modułu “Backup and Migrate”.
Moduł ten oferuje opcje zarówno dla początkujących, jak i zaawansowanych użytkowników. W niniejszym artykulę przedstawię szczegółowo jego funkcjonalności.
Daty
Moduł zadebiutował pod koniec 2007 roku dla Drupala 5. Od tej pory był intensywnie aktualizowany. Gałąź 8.x-3.x pojawiła się w 2015 roku, wraz z Drupalem 8, jednakże nie doczekała się stabilnego wydania. Dopiero trzy lata później światło dzienne ujrzała stabilna wersja 8.x-4.0.
Popularność modułu
O popularności modułu świadczy liczba jego instalacji - według oficjalnych statystyk wykorzystuje go ponad 220 tys. stron, w tym ok. 40 tys. opartych o Drupal 8.
Autorzy modułu
Za utrzymanie modułu odpowiada czterech developerów:
- Damien McKenna z firmy Mediacurrent
- Alexandru Andrascu z firmy Intellix
- Ronan Dowling z firmy Pantheon
- Drew Gorton z firmy Pantheon
W repozytorium kodu znajdują się 822 commity, stworzone przez ponad 70 osób.
Do czego służy moduł
Backup and Migrate to zaawansowane narzędzie do tworzenia kopii zapasowych. Operuje zarówno na bazie danych, jak i na plikach publicznych oraz prywatnych. Integruje się z drupalowym CRON zapewniając tym samym możliwość regularnego zapisywania kopii do różnych destynacji.
Unboxing
Moduł znajduje się na stronie https://www.drupal.org/project/backup_migrate. Możesz zainstalować go z pliku.zip lub wywołać w konsoli komendę composer require drupal/backup_migrate.
Panel do administracji ustawieniami znajdziesz w menu Configuration → Development → Backup and Migrate.
Użycie modułu
Moduł zaprojektowany jest zarówno dla użytkowników początkujących, jak i zaawansowanych. Ci pierwsi nie muszą zagłębiać się w konfigurację eksportowania danych, wystarczy, że skorzystają z opcji szybkiej kopii:
Kliknięcie na “Backup now” spowoduje ściągnięcie bazy danych (lub publicznych/prywatnych plików, zgodnie z wyborem dokonanym w polu “Backup Source”). Co więcej, kopia baza będzie pozbawiona cache i wpisów dziennika, dzięki czemu zajmie zdecydowanie mniej miejsca.
Nieco więcej ustawień znajduje się w zakładce “Advanced”. Opiszę ją w dalszej części artykułu.
Źródła kopii
Klikając na Settings → Sources znajdziesz się na liście dostępnych źródeł kopii zapasowej.
Domyślnie źródłami mogą być:
- baza danych,
- pliki publiczne,
- pliki prywatne,
- cały kod stroną wraz z bazą danych.
Zestaw ten można nieco rozszerzyć o zewnętrzne bazy MySQL oraz dowolne katalogi na serwerze. Służy do tego opcja “Add Backup Source”.
Istnieje możliwość definiowania własnych źródeł za pośrednictwem API modułu Backup and Migrate.
Miejsca docelowe kopii
Celem kopii zapasowej nazywamy miejsce, w którym ma być ona umieszczona. Może to być np. katalog serwera lub pobieranie w przeglądarce internetowej. Dostępne cele znajdują się na liście Settings → Destinations.
Podobnie, jak w przypadku źródeł, własne cele możesz zdefiniować za pośrednictwem przycisku “Add Backup Destination” i odpowiedniego hooka. Pamiętaj, że dywersyfikując miejsce zapisu kopii, zwiększasz bezpieczeństwo swoich danych. Na końcu artykułu przedstawiłem kilka modułów dodających cele takie, jak serwer SFTP lub chmura S3.
Szyfrowanie
Pamiętaj, że kopie zapasowe zawierają wrażliwe dane i dostęp do nich powinien być ściśle ograniczony. Drupal jest jednym z najbezpieczniejszych dostępnych CMS, warto więc skorzystać z jego prywatnego systemu plików. Dodatkowo z pomocą przychodzi możliwość szyfrowania plików z kopiami. Aby z niej skorzystać, należy dodać do projektu bibliotekę Defuse za pomocą polecenia:
composer require defuse/php-encryption
Po wyczyszczeniu pamięci podręcznej w panelu konfiguracyjnym modułu pojawi się opcja “Encrypt File” z polem do wpisania hasła. Posłuży ono do szyfrowania generowanych archiwów.
Zaawansowana kopia zapasowa
Omówiłem już sposób na stworzenie szybkiej kopii zapasowej. Pora na jej nieco bardziej zaawansowaną wersję, którą znajdziesz w zakładce “Backup” → “Advanced Backup”.
Oto krótki przegląd dostępnych opcji:
- Source - służy do wybrania zdefiniowanego wcześniej źródła.
- Backup file - umożliwia skonfigurowanie nazwy i formatu pliku z kopią.
- Backup encryption - włącza szyfrowanie archiwów.
- Take site offline - wyłącza stronę na czas tworzenia kopii.
- Exclude database tables - pozwala na wyłączenie z kopii wybranych tabel w bazie danych (lub tylko ich zawartości).
- Exclude files - służy do ignorowania wybranych plików przy tworzeniu kopii katalogu.
- Destination - umożliwia wybór celu kopii.
Jeśli zależy Ci na zapisaniu takiego zestawu zaawansowanych opcji na przyszłość, zainteresuj się profilami w zakładce “Settings” → “Settings profiles”.
Lista kopii
Wszystkie kopie zapasowe zapisane na serwerze znajdują się na liście “Saved Backups”.
Co ciekawe, lista ta działa również w przypadku zapisu kopii na zewnętrznych serwerach typu SFTP i S3.
Przywracanie kopii
Rzadziej potrzebną, lecz mimo to niezwykle ciekawą opcją jest przywracanie strony z kopii zapasowej. Możesz do tego celu użyć zarówno jednej z kopii z przedstawionej przed chwilą listy, jak i wgrać dowolny plik przez formularz.
Harmonogram
Ostatnią ważną funkcjonalnością modułu Backup and Migrate jest możliwość tworzenia harmonogramów kopii zapasowej.
Mamy tu wszystko, czego trzeba do zbudowania sprawnie działającego mechanizmu backupu. Działania te wykonywane są za pośrednictwem drupalowych funkcjonalności CRON. Niepotrzebna jest więc dodatkowa konfiguracja serwera.
Hooki i integracje
Backup and Migrate udostępnia jeden bazowy hook hook_backup_migrate_service_object_alter(), pozwalający na zmianę praktycznie całego silnika modułu. To tutaj definiowane są dodatkowe pluginy i filtry. Możesz zdefiniować następujące elementy:
- Źródła kopii zapasowych - domyślnie jest to baza danych, pliki publiczne/prywatne i cała strona wraz z kodem źródłowym.
- Destynacje kopii zapasowych - jak chociażby przechowywanie w chmurze bądź w lokalnym katalogu.
- Filtry modyfikujące generowane archiwa - jak np. szyfrowanie.
Na bazie powyższego mechanizmu stworzono wiele modułów pomocniczych oferujących integrację z zewnętrznymi dostawcami przestrzeni dyskowej. Niestety w większości działają one wyłącznie pod kontrolą Drupal 7. Są to m.in.:
- Backup and Migrate AWS S3 - dodaje obsługę serwerów Amazon S3.
- Backup and Migrate Flysystem - dodaje obsługę Flysystem.
- Backup and Migrate Yandex Disk - dodaje obsługę darmowego Yandex Disk.
- Backup and Migrate Prune (tylko Drupal 7) - usuwa stare kopie zapasowe według określonych przez użytkownika reguł.
- Backup and Migrate SFTP (tylko Drupal 7) - umożliwia zapisywanie plików kopii zapasowej na serwerze SFTP.
- Backup and Migrate Dropbox (tylko Drupal 7) - dodaje obsługę Dropboxa.
- Backup and Migrate OpenCloud (tylko Drupal 7) - dodaje obsługę OpenCloud.
- HPCloud (tylko Drupal 7) - dodaje obsługę HP Cloud.
Podsumowanie
W obliczu nowych technologii moduł Backup and Migrate jest czasem uznawany za zbędny. Muszę jednak przyznać, że w naszej agencji drupalowej z niego korzystamy. Umożliwia on bowiem najprostszy sposób na pobranie bazy danych i plików ze strony opartej właśnie o Drupala. Jest łatwy w konfiguracji i działa praktycznie “od ręki”.
W przypadku mniejszych stron moduł może być przydatny jako uzupełnienie standardowego backupu. Zwłaszcza, gdy kod znajduje się na współdzielonym serwerze, na którym nie masz pełnej kontroli nad systemem.