Dla administratorów
← Wszystkie tematy

Kopia zapasowa i odtwarzanie

Co zabezpieczyć oprócz bazy danych, dlaczego MASTER_KEY jest równie ważny i jak przetestować odtwarzanie.

W instalacji na własnym serwerze wszystko, co ważne, jest w bazie danych: ustawienia, wytyczne, źródła wiedzy, wiadomości, szkice i zaszyfrowane sekrety. Kopię zapasową robisz więc z bazy danych – i z pliku .env z MASTER_KEY.

Co zabezpieczyć

  1. Bazę danych – regularnym zrzutem, skopiowanym poza serwer.
  2. .env, przede wszystkim MASTER_KEY – poza serwerem, w bezpiecznym miejscu. Bez niego nie odczytasz z bazy danych kluczy API, dostępu do skrzynek ani klientów logowania; kopia zapasowa byłaby bezużyteczna. My go nie mamy.

Zrzut bazy danych zawiera pocztę klientów. Chroń go tak jak samą skrzynkę.

Zrzuty przed aktualizacją to nie kopia zapasowa

Przed każdą aktualizacją draften zapisuje zrzut bazy danych do folderu backups/ w katalogu instalacji i przechowuje trzy ostatnie (liczbę ustala DRAFTEN_BACKUPS). Są jednak na tym samym dysku co baza danych – to siatka bezpieczeństwa dla aktualizacji, nie kopia zapasowa. Kopiuj je poza serwer razem z .env, tak jak inne kopie zapasowe.

Regularny zrzut bazy danych

Z katalogu instalacji:

docker compose exec -T db sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD" --single-transaction --databases draften' | gzip > draften-$(date +%F).sql.gz

Uruchamiaj to regularnie (na przykład codziennie z crona) i przechowuj zrzuty poza serwerem.

Odtwarzanie

Zatrzymaj workery, wczytaj zrzut i uruchom wersję, która działała, gdy zrzut powstał (przy zrzutach z backups/ jest w nazwie pliku):

docker compose stop worker
gunzip -c <dump>.sql.gz | docker compose exec -T db sh -c 'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD"'
./draften update <version> --no-backup

Na nowym serwerze najpierw zainstaluj draften i wpisz do .env MASTER_KEY z czasu, gdy powstał zrzut.

Wymiana klucza szyfrowania

MASTER_KEY można wymienić bez przerwy – w interfejsie (Instalacja → Instalacja → Klucz szyfrowania → Wymień klucz szyfrowania, wymaga updatera) albo poleceniem:

./draften rotate-key

Nowy klucz najpierw zapisuje się do .env, kontenery przejmują go jeden po drugim, a wszystko, co zapisano, zostaje nim zaszyfrowane od nowa. Stary klucz zostaje w .env jako MASTER_KEY_PREVIOUS, dopóki backups/ zawiera zrzuty sprzed wymiany – tylko on może je otworzyć. draften odmówi kolejnej wymiany, dopóki taki zrzut istnieje.

Po wymianie od razu skopiuj nowy .env poza serwer. Nowy klucz nigdy nie trafia do interfejsu; jest tylko w .env na serwerze.

Uwaga

Wersja tekstowa