Acasă
» Cum să
»
Automatizați copiile de rezervă Nextcloud consistente cu Restic și Cron
Automatizați copiile de rezervă Nextcloud consistente cu Restic și Cron
Pentru o copie de rezervă Nextcloud fiabilă, întrerupeți activitatea utilizatorului, exportați baza de date și utilizați Restic pentru a captura exportul împreună cu directoarele de aplicații și date. Plasați jobul într-un script deținut de root și programați-l cu cron; verificați instantaneele și efectuați o restaurare de test înainte de a vă baza pe programare.
Acest exemplu presupune un server Debian sau Ubuntu, o instalare directă a Nextcloud la /var/www/nextcloud, un director de date separat la /srv/nextcloud-datași MariaDB. Înlocuiți aceste valori cu căile reale și numele bazei de date. Pașii au fost verificați în raport cu Manualul de administrare Nextcloud 35 și documentația Restic 0.19.1 din octombrie 2026.
O ilustrare în stil terminal a celor două acțiuni care inițiază o copie de rezervă consistentă: activarea modului de întreținere și exportarea bazei de date.
Ce trebuie să conțină o copie de rezervă Nextcloud?
Ghidul Nextcloud pentru backup listează configurația, datele, baza de date, tema și orice aplicații personalizate ca fiind părțile importante de păstrat. Copierea de rezervă a directorului complet al aplicației include de obicei configurația și aplicațiile incluse, dar verificați dacă aplicațiile personalizate, temele sau directorul de date se află în altă parte pe server. Includeți fiecare cale separată în comanda Restic.
Modul de întreținere blochează sesiunile existente și previne noi conectări în timp ce rulează backup-ul. Acest lucru face ca baza de date și fișierele să fie mai puțin susceptibile de a se modifica în momente diferite, dar face și ca Nextcloud să nu fie disponibil pe durata acestuia. Pentru un depozit de date mare, programați jobul într-o fereastră silențioasă. Dacă serverul dvs. are lucrători externi sau scripturi care scriu direct în directorul de date, puneți-i și pe aceștia în pauză.
Instalați Restic și clientul MariaDB folosind sursa de pachete de încredere a distribuției dvs. Alegeți un depozit pe un alt disc sau o altă țintă de backup la distanță. Un depozit stocat doar pe serverul Nextcloud nu protejează împotriva pierderii serverului respectiv sau a spațiului de stocare al acestuia. Nu plasați depozitul în interiorul niciunuia dintre directorele din care se face backup.
Restic criptează datele din depozit, dar aveți nevoie de parola depozitului pentru a le restaura. Creați un fișier cu parole și păstrați o copie protejată în afara serverului, cum ar fi într-un manager de parole aprobat. Dacă parola este pierdută, depozitul criptat nu poate fi citit. Evitați să introduceți parola direct într-o linie de comandă, crontab sau script.
Plasați în siguranță parola Restic aleasă în fișierul de parole. Introduceți locația repozitoriului și calea către fișierul de parole în fișierul de mediu:
Pentru un backend la distanță, utilizați adresa URL și acreditările documentate ale repozitoriului respectiv, stocate cu permisiuni restricționate. Configurarea repozitoriului de documente Restic și variabila de mediu acceptată pentru fișierele de parolă sunt prezentate în ghidul său de pregătire a repozitoriului . Inițializați un nou repozitoriu o singură dată, nu la fiecare rulare:
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Exemplu de setări pentru un depozit Restic criptat; parola în sine rămâne într-un fișier separat, protejat.
Și acreditările MariaDB necesită protecție. Configurați un fișier de opțiuni client care poate fi citit de root, cum ar fi /root/.my.cnfcu utilizatorul bazei de date, parola și gazda, apoi setați permisiunile sale la 600. Scriptul de mai jos transmite fișierul respectiv către mariadb-dump, astfel încât o parolă a bazei de date să nu apară în argumentele procesului.
Creați un script de rezervă care readuce Nextcloud în funcțiune
Salvați următoarele ca /usr/local/sbin/nextcloud-restic-backup. Ajustați NC_DATA_DIRși DB_NAMEpentru a se potrivi config/config.php. Scriptul activează modul de întreținere, exportă MariaDB, face copii de rezervă ale aplicației, datelor și dump-ului SQL temporar, apoi dezactivează modul de întreținere chiar dacă o comandă ulterioară eșuează.
#!/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
Setați proprietatea și permisiunile astfel încât doar utilizatorul root să poată edita sau rula scriptul, apoi testați-l manual în timpul unei ferestre de mentenanță. Verificarea mountpointprevine trimiterea silențioasă a unui depozit mare de către un disc de rezervă lipsă în sistemul de fișiere local al serverului. Dacă depozitul dvs. este la distanță, nu montat local, înlocuiți verificarea respectivă cu o verificare fiabilă pentru backend.
Verificați căile înainte de prima rulare. Dacă folderul de date se află deja înăuntru /var/www/nextcloud, nu presupuneți că exemplul de cale este corect; utilizați directorul de date real din configurația Nextcloud. De asemenea, confirmați că aplicațiile personalizate sau temele stocate în afara directorului de aplicații sunt incluse explicit.
Copia de rezervă Restic include aplicația, fișierele utilizatorului și dump-ul bazei de date creat pentru această rulare.
Programează cron și verifică rezultatul
După o rulare manuală reușită, adăugați o intrare crontab rădăcină cu sudo crontab -e. Acest exemplu pornește jobul zilnic la 2:30 dimineața folosind calea completă a scriptului și înregistrează ieșirea pentru depanare:
Cron oferă un mediu limitat, așa că scriptul setează un set explicit PATHși încarcă singur setările Restic. Verificați dacă cron este activat pe distribuția dvs. și că acest timp nu se suprapune cu runner-ul de joburi în fundal al Nextcloud sau cu o altă sarcină de mentenanță. Manualul crontab Linux descrie formatul programării și mediul furnizat de cron.
Confirmați că jobul a fost finalizat verificând /var/log/nextcloud-restic.logo ieșire reușită și listând instantaneele recente:
Funcția normală a Restic checkverifică structura depozitului. O citire completă a datelor durează mai mult și poate utiliza o lățime de bandă semnificativă pentru un depozit la distanță; programați restic check --read-dataperiodic sau utilizați pentru a verifica porțiuni în timp. Consultați documentația--read-data-subset Restic privind integritatea depozitului .
O listă de instantanee nu este un test de restaurare. Restaurați o instantanee recentă într-un director separat cu restic restore latest --target /tmp/nextcloud-restore-test, apoi confirmați că fișierele aplicației, directorul de date și dump-ul SQL sunt prezente. Nu restaurați peste o instalare live ca test. Pentru o recuperare reală, restaurați fișierele și baza de date ca un set potrivit; instrucțiunile de restaurare Nextcloud acoperă considerațiile privind recrearea bazei de date și sincronizarea clienților.
Această configurație oferă instantanee criptate repetabile, dar cron nu monitorizează propriile erori și Restic nu decide politica dvs. de retenție. Revizuiți jurnalul sau configurați alertele pentru rulările eșuate, păstrați o copie separată a acreditărilor depozitului și testați recuperarea la intervale regulate. Dacă fereastra de întreținere este prea lungă, utilizați instantanee coordonate ale sistemului de fișiere și un export consistent cu baza de date, conceput pentru platforma dvs. de stocare, în loc să faceți copii de rezervă live ale fișierelor modificate.
Programul invocă zilnic scriptul deținut de utilizatorul root; listarea instantaneelor este o verificare rapidă a faptului că rulările au fost înregistrate.