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

Jak skonfigurować sieć VPN typu punkt-lokacja WireGuard w systemie Debian 12

Jak skonfigurować sieć VPN typu punkt-lokacja WireGuard w systemie Debian 12

Skonfiguruj serwer VPN WireGuard z systemem Debian 12 dla jednego zdalnego klienta. Skonfiguruj klucze, przekierowanie IPv4, NAT w NFTables, dostęp do zapory sieciowej i sprawdzanie połączeń.

Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron

Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron

Twórz kopie zapasowe plików Nextcloud i MariaDB, planuj zaszyfrowane migawki Restic za pomocą cron i weryfikuj odzyskiwanie bez narażania serwera na ryzyko.

Tworzenie kopii zapasowej i przywracanie skrzynki pocztowej Zimbra CE za pomocą eksportów TGZ

Tworzenie kopii zapasowej i przywracanie skrzynki pocztowej Zimbra CE za pomocą eksportów TGZ

Eksportuj pojedynczą skrzynkę pocztową Zimbra Community Edition, sprawdzaj poprawność kopii zapasowej TGZ i przywracaj brakujące elementy bez nadpisywania istniejącej poczty.

Umożliw zatwierdzonym użytkownikom tworzenie pokoi Jitsi z logowaniem przez Keycloak

Umożliw zatwierdzonym użytkownikom tworzenie pokoi Jitsi z logowaniem przez Keycloak

Zezwalaj tylko zatwierdzonym kontom na otwieranie pokoi Jitsi Meet przy użyciu Keycloak i uwierzytelniania tokenem, jednocześnie zapewniając możliwość dołączania gościom, gdy będzie to potrzebne.

Synchronizuj użytkowników usługi Active Directory z usługą ONLYOFFICE DocSpace za pośrednictwem protokołu LDAP

Synchronizuj użytkowników usługi Active Directory z usługą ONLYOFFICE DocSpace za pośrednictwem protokołu LDAP

Połącz ONLYOFFICE DocSpace z usługą Active Directory lub OpenLDAP, bezpiecznie importuj użytkowników i grupy, mapuj pola kont i planuj niezawodną synchronizację.

Dodawanie czcionek do serwera dokumentów ONLYOFFICE: Docker kontra Linux

Dodawanie czcionek do serwera dokumentów ONLYOFFICE: Docker kontra Linux

Zainstaluj niestandardowe czcionki w serwerze dokumentów ONLYOFFICE, porównaj trwałe instalacje Docker z kopiami bezpośrednimi, utwórz ponownie listę czcionek i zweryfikuj wynik.

Debian 12 na serwerze VPS z małą ilością pamięci RAM: Jak ograniczyć awarie MySQL spowodowane brakiem pamięci (OOM)

Debian 12 na serwerze VPS z małą ilością pamięci RAM: Jak ograniczyć awarie MySQL spowodowane brakiem pamięci (OOM)

Diagnozuj błędy OOM MySQL w systemie Debian 12, sprawdzaj limity pamięci VPS, konfiguruj wymianę oraz dostosowuj pamięć i współbieżność bazy danych, nie obiecując przy tym uniwersalnego rozwiązania.

Umieść dokumenty ONLYOFFICE w HAProxy bez przerywania edycji

Umieść dokumenty ONLYOFFICE w HAProxy bez przerywania edycji

Skonfiguruj protokół HAProxy HTTPS, przekazywanie nagłówków, limity czasu WebSocket i kontrole kondycji dla dokumentów ONLYOFFICE, a następnie zweryfikuj edycję i zapisy.

Instalacja i podpisywanie niestandardowych modułów jądra w bezpiecznym rozruchu SLES 15

Instalacja i podpisywanie niestandardowych modułów jądra w bezpiecznym rozruchu SLES 15

Załaduj niestandardowy moduł jądra SLES 15 bez wyłączania funkcji Secure Boot. Dopasuj uruchomiony moduł jądra, podpisz plik .ko, zarejestruj klucz MOK i zweryfikuj ładowanie.

Bezpieczne przekazywanie dziennika systemowego SLES za pomocą rsyslog i wzajemnego protokołu TLS

Bezpieczne przekazywanie dziennika systemowego SLES za pomocą rsyslog i wzajemnego protokołu TLS

Wysyłaj logi systemu SLES do zdalnego kolektora rsyslog za pośrednictwem uwierzytelnionego protokołu TLS, z kontrolą certyfikatów, buforowaniem przerw i testami dostarczania.