Strona główna
» Jak
»
Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron
Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron
Aby utworzyć niezawodną kopię zapasową w Nextcloud, wstrzymaj aktywność użytkownika, wyeksportuj bazę danych i użyj Restic do przechwycenia tego eksportu wraz z katalogami aplikacji i danych. Umieść zadanie w skrypcie należącym do użytkownika root i zaplanuj je za pomocą crona; zweryfikuj migawki i wykonaj testowe przywracanie, zanim zaczniesz korzystać z harmonogramu.
W tym przykładzie założono serwer Debian lub Ubuntu, bezpośrednią instalację Nextcloud w [brakuje nazwy użytkownika] /var/www/nextcloud, oddzielny katalog danych w /srv/nextcloud-data[brakuje nazwy użytkownika] oraz MariaDB. Zastąp te wartości rzeczywistymi ścieżkami i nazwą bazy danych. Kroki zostały sprawdzone pod kątem zgodności z dokumentacją Nextcloud 35 Administration Manual oraz Restic 0.19.1 w październiku 2026 roku.
Ilustracja w stylu terminala przedstawiająca dwie czynności rozpoczynające tworzenie spójnej kopii zapasowej: włączenie trybu konserwacji i eksportowanie bazy danych.
Co musi zawierać kopia zapasowa Nextcloud?
Wskazówki dotyczące tworzenia kopii zapasowych Nextcloud wymieniają konfigurację, dane, bazę danych, motyw i wszelkie niestandardowe aplikacje jako ważne elementy, które należy zachować. Kopia zapasowa pełnego katalogu aplikacji zazwyczaj obejmuje konfigurację i dołączone aplikacje, ale sprawdź, czy aplikacje niestandardowe, motywy lub katalog danych znajdują się gdzie indziej na serwerze. Uwzględnij każdą oddzielną ścieżkę w poleceniu Restic.
Tryb konserwacji blokuje istniejące sesje i uniemożliwia nowe logowania podczas tworzenia kopii zapasowej. Dzięki temu baza danych i pliki są mniej podatne na zmiany w różnych momentach, ale jednocześnie usługa NextCloud jest niedostępna przez cały czas. W przypadku dużego magazynu danych zaplanuj zadanie w cichym oknie. Jeśli serwer ma zewnętrzne procesy robocze lub skrypty, które zapisują dane bezpośrednio w katalogu danych, należy je również wstrzymać.
Przygotuj Restic i chroń jego dane uwierzytelniające
Zainstaluj Restic i klienta MariaDB, korzystając z zaufanego źródła pakietów swojej dystrybucji. Wybierz repozytorium na innym dysku lub zdalnym miejscu docelowym kopii zapasowej. Repozytorium przechowywane wyłącznie na serwerze Nextcloud nie chroni przed utratą tego serwera ani jego pamięci masowej. Nie umieszczaj repozytorium w żadnym z katalogów objętych kopią zapasową.
Restic szyfruje dane repozytorium, ale do ich przywrócenia potrzebne jest hasło repozytorium. Utwórz plik haseł i przechowuj jego zabezpieczoną kopię poza serwerem, na przykład w zatwierdzonym menedżerze haseł. W przypadku utraty hasła, zaszyfrowane repozytorium nie będzie mogło zostać odczytane. Unikaj umieszczania hasła bezpośrednio w wierszu poleceń, pliku crontab lub skrypcie.
W przypadku zdalnego zaplecza należy użyć udokumentowanego adresu URL repozytorium i danych uwierzytelniających tego zaplecza, przechowywanych z ograniczonymi uprawnieniami. Dokumenty Restic dotyczące konfiguracji repozytorium i obsługiwanej zmiennej środowiskowej pliku haseł znajdują się w podręczniku przygotowania repozytorium . Nowe repozytorium należy zainicjować raz, a nie przy każdym uruchomieniu:
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Przykładowe ustawienia dla szyfrowanego repozytorium Restic; samo hasło jest przechowywane w osobnym chronionym pliku.
Dane uwierzytelniające MariaDB również wymagają ochrony. Skonfiguruj plik opcji klienta, który może odczytać użytkownik root, na przykład /root/.my.cnfz nazwą użytkownika bazy danych, hasłem i hostem, a następnie ustaw jego uprawnienia na 600. Poniższy skrypt przekazuje ten plik do mariadb-dump, aby hasło bazy danych nie pojawiało się w argumentach procesu.
Utwórz skrypt kopii zapasowej, który przywróci NextCloud do usługi
Zapisz poniższe jako /usr/local/sbin/nextcloud-restic-backup. Dostosuj NC_DATA_DIRi DB_NAMEdopasuj config/config.php. Skrypt włącza tryb konserwacji, eksportuje MariaDB, tworzy kopię zapasową aplikacji, danych i tymczasowego zrzutu SQL, a następnie wyłącza tryb konserwacji, nawet jeśli późniejsze polecenie się nie powiedzie.
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
Ustaw właściciela i uprawnienia tak, aby tylko użytkownik root mógł edytować lub uruchamiać skrypt, a następnie przetestuj go ręcznie podczas przerwy konserwacyjnej. To mountpointsprawdzenie zapobiega sytuacji, w której brakujący dysk kopii zapasowej automatycznie wysyła duże repozytorium do lokalnego systemu plików serwera. Jeśli repozytorium jest zdalne, a nie zamontowane lokalnie, zastąp to sprawdzenie niezawodnym sprawdzeniem zaplecza.
Sprawdź ścieżki przed pierwszym uruchomieniem. Jeśli folder danych znajduje się już w katalogu /var/www/nextcloud, nie zakładaj, że przykładowa ścieżka jest poprawna; użyj rzeczywistego katalogu danych z konfiguracji NextCloud. Sprawdź również, czy niestandardowe aplikacje lub motywy przechowywane poza katalogiem aplikacji są wyraźnie uwzględnione.
Kopia zapasowa Restic obejmuje aplikację, pliki użytkownika i zrzut bazy danych utworzony na potrzeby tego uruchomienia.
Zaplanuj cron i sprawdź wynik
Po pomyślnym uruchomieniu ręcznym dodaj wpis crontab roota za pomocą sudo crontab -e. Ten przykład uruchamia zadanie codziennie o 2:30 w nocy, używając pełnej ścieżki skryptu i rejestrując dane wyjściowe w celu rozwiązywania problemów:
Cron zapewnia ograniczone środowisko, więc skrypt ustawia wartość jawną PATHi sam wczytuje ustawienia Restic. Sprawdź, czy cron jest włączony w Twojej dystrybucji i czy ten czas nie pokrywa się z czasem uruchomienia zadania w tle w NextCloud lub innym zadaniem konserwacyjnym. Podręcznik crontab dla systemu Linux opisuje format harmonogramu i środowisko udostępniane przez cron.
Potwierdź, że zadanie zadziałało, sprawdzając /var/log/nextcloud-restic.log, czy wyjście zostało pomyślnie zakończone i wyświetlając listę ostatnich migawek:
Standardowa weryfikacja struktury repozytorium Restic check. Pełny odczyt danych trwa dłużej i może wymagać znacznej przepustowości dla zdalnego repozytorium. Zaplanuj to restic check --read-dataokresowo lub użyj do sprawdzania fragmentów w czasie. Zobacz dokumentację integralności repozytorium--read-data-subset Restic .
Lista migawek nie jest testem przywracania. Przywróć ostatnią migawkę do osobnego katalogu roboczego za pomocą , a następnie sprawdź, czy pliki aplikacji, katalog danych i zrzut SQL są obecne. Nie przywracaj na żywo w ramach testu. W celu faktycznego odzyskania, przywróć pliki i bazę danych jako jeden dopasowany zestaw; instrukcje przywracaniarestic restore latest --target /tmp/nextcloud-restore-test Nextcloud obejmują kwestie związane z odtworzeniem bazy danych i synchronizacją klienta.
Ta konfiguracja zapewnia powtarzalne, szyfrowane migawki, ale cron nie monitoruje własnych awarii, a Restic nie decyduje o polityce przechowywania. Przejrzyj dziennik lub skonfiguruj alerty dotyczące nieudanych uruchomień, zachowaj osobną kopię danych uwierzytelniających repozytorium i regularnie testuj odzyskiwanie. Jeśli okno konserwacji jest zbyt długie, użyj skoordynowanych migawek systemu plików i eksportu spójnego z bazą danych, zaprojektowanego dla Twojej platformy pamięci masowej, zamiast tworzyć kopie zapasowe zmieniających się plików na żywo.
Harmonogram codziennie wywołuje skrypt należący do użytkownika root; lista migawek to szybki sposób sprawdzenia, czy uruchomienia zostały zarejestrowane.