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.

Ciemna ilustracja terminala przedstawia włączanie trybu konserwacji Nextcloud przed eksportem bazy danych MariaDB.
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ć.

Oficjalne instrukcje tworzenia kopii zapasowych Nextcloud wyjaśniają komponenty i opcje eksportu bazy danych. Ta procedura wykorzystuje bazę MariaDB; w przypadku PostgreSQL, MySQL lub SQLite należy użyć odpowiednich poleceń zrzutu (dump) i przywrócenia (restore) z sekcji dotyczącej bazy danych w tym podręczniku .

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.

sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env

Bezpiecznie umieść wybrane hasło Restic w pliku haseł. W pliku środowiskowym wpisz lokalizację repozytorium i ścieżkę dostępu do pliku haseł:

RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password

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
Ilustracja terminala pokazuje ścieżkę do repozytorium Restic, ścieżkę do pliku haseł i polecenie 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.

Ilustracja terminala przedstawia program Restic wykonujący kopię zapasową katalogu aplikacji Nextcloud, oddzielnego katalogu danych i katalogu tymczasowego dla zrzutu SQL.
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:

30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1

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:

sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'

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.

Ilustracja terminala przedstawia codzienny wpis cron dla skryptu Nextcloud Restic obok polecenia restic snapshots.
Harmonogram codziennie wywołuje skrypt należący do użytkownika root; lista migawek to szybki sposób sprawdzenia, czy uruchomienia zostały zarejestrowane.

Zostaw komentarz

Ustaw publiczny adres URL NextCloud, aby mógł się do siebie dodzwonić

Napraw ostrzeżenie Nextcloud o brakującym adresie wychodzącym, ustawiając jego kanoniczny adres URL i sprawdzając routing DNS, HTTPS i odwrotnego serwera proxy na samym serwerze.

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Skonfiguruj APCu i Redis przez lokalne gniazdo Unix na potrzeby buforowania i blokowania plików w usłudze Nextcloud, wraz z instrukcjami dla bieżących i starszych wersji usługi Nextcloud.

Uruchom automatycznie Nextcloud Cron za pomocą timera Systemd

Sprawdź tryb cron Nextcloud, napraw usługę systemd i timer oraz zweryfikuj, czy zadania w tle są uruchamiane po uruchomieniu i co pięć minut.

Usuń ostrzeżenie o blokowaniu plików w NextCloud za pomocą Redis

Włącz niezawodne blokowanie plików Nextcloud, wybierz odpowiedni serwer Redis lub Valkey i sprawdź, czy ostrzeżenie zostanie usunięte bez ryzyka równoczesnych zmian w plikach.

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Napraw typowe błędy skanowania Nextcloud dzięki bieżącym aktualizacjom, protokołom HTTPS i HSTS, precyzyjnemu zaufaniu do odwrotnego serwera proxy i sprawdzeniu względem serwera publicznego.

Włącz szyfrowanie po stronie serwera Nextcloud z mierzalnym wpływem

Skonfiguruj Nextcloud SSE dla pamięci masowej, która tego wymaga, chroń klucze szyfrujące i zmierz wpływ transferu i procesora przed zaszyfrowaniem istniejących plików.

Dodaj wyszukiwanie pełnotekstowe Elasticsearch do NextCloud

Połącz wyszukiwarkę plików Nextcloud z Elasticsearch, zindeksuj zawartość dokumentów i wybierz konfigurację odpowiadającą Twoim potrzebom w zakresie serwera i bezpieczeństwa.

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Skonfiguruj Nextcloud tak, aby usuwał usunięte pliki po upływie określonego czasu przechowywania, niezawodnie planował zadania w tle i unikał poleceń, które usuwają śmieci każdego użytkownika.

Ostrzeżenie o braku indeksów bazy danych NextCloud

Ostrzeżenie o braku indeksów bazy danych NextCloud

Wykonaj bezpieczną naprawę OCC w Nextcloud, przejrzyj zmiany w bazie danych i sprawdź, dlaczego ostrzeżenie może nadal się pojawiać.

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zezwól na przesyłanie większych plików przez przeglądarkę Nextcloud, dostosowując ustawienia PHP, Nginx lub Apache, tymczasowego miejsca przechowywania i limitu czasu — i sprawdź, który limit blokuje plik.