Automatizza i backup coerenti di Nextcloud con Restic e Cron.

Per un backup affidabile di Nextcloud, metti in pausa l'attività degli utenti, esporta il database e usa Restic per acquisire l'esportazione insieme alle directory dell'applicazione e dei dati. Inserisci l'operazione in uno script con privilegi di root e pianificala con cron; verifica gli snapshot ed esegui un ripristino di prova prima di affidarti alla pianificazione.

Questo esempio presuppone un server Debian o Ubuntu, un'installazione diretta di Nextcloud in /var/www/nextcloud, una directory dati separata in /srv/nextcloud-datae MariaDB. Sostituisci questi valori con i percorsi e il nome del database effettivi. I passaggi sono stati verificati rispetto al Manuale di amministrazione di Nextcloud 35 e alla documentazione di Restic 0.19.1 nell'ottobre 2026.

Un'illustrazione scura del terminale mostra l'attivazione della modalità di manutenzione di Nextcloud prima di un'esportazione del database MariaDB.
Illustrazione in stile terminale delle due azioni che avviano un backup coerente: l'attivazione della modalità di manutenzione e l'esportazione del database.

Cosa deve contenere un backup di Nextcloud?

Le linee guida di Nextcloud per il backup elencano la configurazione, i dati, il database, il tema e le eventuali app personalizzate come le parti importanti da conservare. Il backup dell'intera directory dell'applicazione di solito include la configurazione e le app incluse, ma verifica se le app personalizzate, i temi o la directory dei dati si trovano altrove sul tuo server. Includi ogni singolo percorso nel comando Restic.

La modalità di manutenzione blocca le sessioni esistenti e impedisce nuovi accessi durante l'esecuzione del backup. In questo modo si riduce la probabilità che il database e i file vengano modificati in momenti diversi, ma Nextcloud non sarà disponibile per tutta la durata dell'operazione. Per un archivio dati di grandi dimensioni, è consigliabile pianificare l'operazione in un momento di minore attività del server. Se il server dispone di processi o script esterni che scrivono direttamente nella directory dei dati, è opportuno sospenderli.

Le istruzioni ufficiali di backup di Nextcloud illustrano i componenti e le opzioni di esportazione del database. Questa procedura utilizza MariaDB; per PostgreSQL, MySQL o SQLite, utilizzare i comandi di dump e ripristino corrispondenti nella sezione relativa al database del manuale .

Prepara Restic e proteggi le sue credenziali

Installa Restic e il client MariaDB utilizzando la fonte di pacchetti attendibile della tua distribuzione. Scegli un repository su un disco diverso o una destinazione di backup remota. Un repository archiviato solo sul server Nextcloud non protegge dalla perdita di tale server o del suo spazio di archiviazione. Non posizionare il repository all'interno di nessuna delle directory di cui si effettua il backup.

Restic crittografa i dati del repository, ma è necessaria la password del repository per ripristinarlo. Crea un file per la password e conservane una copia protetta al di fuori del server, ad esempio in un gestore di password approvato. Se la password viene persa, il repository crittografato non potrà essere letto. Evita di inserire la password direttamente nella riga di comando, in crontab o in uno script.

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

Inserisci in modo sicuro la password di Restic scelta nel file delle password. Inserisci il percorso del repository e il percorso del file delle password nel file di ambiente:

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

Per un backend remoto, utilizzare l'URL del repository e le credenziali documentate di tale backend, archiviate con autorizzazioni limitate. Restic documenta la configurazione del repository e la variabile d'ambiente supportata per il file delle password nella sua guida alla preparazione del repository . Inizializzare un nuovo repository una sola volta, non a ogni esecuzione:

set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Un'illustrazione da terminale mostra il percorso del repository di Restic, il percorso del file delle password e il comando di inizializzazione di Restic.
Esempio di impostazioni per un repository Restic crittografato; la password stessa rimane in un file protetto separato.

Anche le credenziali di MariaDB necessitano di protezione. Configura un file di opzioni client leggibile da root, ad esempio /root/.my.cnfcon l'utente del database, la password e l'host, quindi imposta i suoi permessi su 600. Lo script seguente passa quel file a mariadb-dump, in modo che la password del database non appaia negli argomenti del processo.

Crea uno script di backup che ripristini il servizio di Nextcloud

Salvare quanto segue come /usr/local/sbin/nextcloud-restic-backup. Modificare NC_DATA_DIRe DB_NAMEin modo che corrispondano a config/config.php. Lo script abilita la modalità di manutenzione, esporta MariaDB, esegue il backup dell'applicazione, dei dati e del dump SQL temporaneo, quindi disabilita la modalità di manutenzione anche se un comando successivo fallisce.

#!/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

Imposta la proprietà e i permessi in modo che solo l'utente root possa modificare o eseguire lo script, quindi testalo manualmente durante una finestra di manutenzione. Il mountpointcontrollo impedisce che un disco di backup mancante invii silenziosamente un repository di grandi dimensioni nel filesystem locale del server. Se il repository è remoto anziché montato localmente, sostituisci questo controllo con un controllo affidabile per il tuo backend.

Prima della prima esecuzione, rivedi i percorsi. Se la cartella dei dati è già presente /var/www/nextcloud, non dare per scontato che il percorso di esempio sia corretto; utilizza la directory dei dati effettiva configurata in Nextcloud. Verifica inoltre che le app o i temi personalizzati archiviati al di fuori della directory dell'applicazione siano inclusi esplicitamente.

Un'immagine del terminale mostra Restic mentre esegue il backup della directory dell'applicazione Nextcloud, di una directory dati separata e di una directory temporanea per il dump SQL.
Il backup di Restic include l'applicazione, i file utente e il dump del database creato per questa esecuzione.

Pianifica l'esecuzione di cron e verifica il risultato.

Dopo un'esecuzione manuale riuscita, aggiungi una voce crontab di root con sudo crontab -e. Questo esempio avvia il job ogni giorno alle 2:30 utilizzando il percorso completo dello script e registra l'output per la risoluzione dei problemi:

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

Cron fornisce un ambiente limitato, quindi lo script imposta un orario esplicito PATHe carica direttamente le impostazioni di Restic. Verifica che cron sia abilitato sulla tua distribuzione e che questo orario non si sovrapponga all'esecuzione dei processi in background di Nextcloud o ad altre attività di manutenzione. Il manuale di crontab per Linux descrive il formato della pianificazione e l'ambiente fornito da cron.

Conferma l'esecuzione del processo controllando /var/log/nextcloud-restic.logl'uscita avvenuta con successo e visualizzando gli screenshot recenti:

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'

La normale procedura di Restic checkverifica la struttura del repository. Una lettura completa dei dati richiede più tempo e potrebbe utilizzare una larghezza di banda significativa per un repository remoto; si consiglia di pianificarla restic check --read-dataperiodicamente o di utilizzarla --read-data-subsetper controllare porzioni di dati nel tempo. Consultare la documentazione di Restic sull'integrità del repository .

Un elenco di snapshot non è un test di ripristino. Ripristina uno snapshot recente in una directory temporanea separata , quindi verifica che i file dell'app, la directory dei dati e il dump SQL siano presenti. Non eseguire il ripristino su un'installazione attiva a scopo di test. Per un ripristino effettivo, ripristina i file e il database come un unico set corrispondente; le istruzioni di ripristinorestic restore latest --target /tmp/nextcloud-restore-test di Nextcloud includono considerazioni sulla ricreazione del database e sulla sincronizzazione del client.

Questa configurazione fornisce snapshot crittografati ripetibili, ma cron non monitora i propri errori e Restic non decide la tua politica di conservazione. Esamina il log o configura gli avvisi per le esecuzioni non riuscite, conserva una copia separata delle credenziali del repository e testa il ripristino a intervalli regolari. Se la finestra di manutenzione è troppo lunga, utilizza snapshot coordinati del filesystem e un'esportazione coerente con il database progettata per la tua piattaforma di archiviazione, anziché eseguire il backup dei file in tempo reale.

Un'illustrazione da terminale mostra una voce cron giornaliera per lo script Nextcloud Restic insieme al comando restic snapshots.
La pianificazione esegue quotidianamente lo script di proprietà di root; l'elenco degli snapshot è un rapido controllo per verificare che le esecuzioni siano state registrate.

Lascia un commento

Attivare l'esecuzione automatica di Nextcloud Cron con un timer Systemd

Controlla la modalità cron di Nextcloud, ripara il servizio systemd e il timer e verifica che i processi in background vengano eseguiti dopo l'avvio e ogni cinque minuti.

Rimuovi l'avviso di blocco dei file di Nextcloud con Redis

Abilita il blocco affidabile dei file in Nextcloud, scegli il backend Redis o Valkey più adatto e verifica che l'avviso scompaia senza rischiare modifiche simultanee ai file.

Cosa serve per ottenere una valutazione di sicurezza A+ da Nextcloud

Cosa serve per ottenere una valutazione di sicurezza A+ da Nextcloud

Risolvi i problemi più comuni riscontrati durante le scansioni di Nextcloud con gli aggiornamenti più recenti, HTTPS e HSTS, una configurazione precisa del proxy inverso e verifiche rispetto al server pubblico.

Abilita la crittografia lato server di Nextcloud con un impatto misurabile

Configura Nextcloud SSE per lo spazio di archiviazione che lo richiede, proteggi le chiavi di crittografia e misura l'impatto sul trasferimento dati e sulla CPU prima di crittografare i file esistenti.

Aggiungi la ricerca full-text di Elasticsearch a Nextcloud

Collega la ricerca file di Nextcloud a Elasticsearch, indicizza il contenuto dei documenti e scegli una configurazione adatta alle esigenze del tuo server e della tua sicurezza.

Imposta una politica di scadenza affidabile per i file eliminati da Nextcloud.

Imposta una politica di scadenza affidabile per i file eliminati da Nextcloud.

Configura Nextcloud per rimuovere i file eliminati dopo un periodo di conservazione definito, pianifica in modo affidabile le attività in background ed evita i comandi che svuotano il cestino di tutti gli utenti.

Risolvi l'avviso di Nextcloud relativo agli indici del database mancanti.

Risolvi l'avviso di Nextcloud relativo agli indici del database mancanti.

Esegui in modo sicuro la riparazione OCC di Nextcloud, visualizza in anteprima le modifiche al database e verifica il motivo per cui l'avviso potrebbe persistere.

Aumentare il limite di caricamento web di Nextcloud oltre i 2 GB

Aumentare il limite di caricamento web di Nextcloud oltre i 2 GB

Consenti il ​​caricamento di file di dimensioni maggiori nel browser Nextcloud allineando le impostazioni di PHP, Nginx o Apache, dello spazio di archiviazione temporaneo e del timeout, e verifica quale limite sta bloccando il file.

Rimuovi l'avviso di memoria PHP di Nextcloud sul server web

Imposta il limite di memoria PHP effettivamente utilizzato da Nextcloud, riavvia il servizio corretto e conferma l'impostazione di 512 MB nella Panoramica di amministrazione.

Collega un bucket compatibile con S3 allo storage esterno di Nextcloud.

Monta un bucket di object storage compatibile in Nextcloud utilizzando il suo backend S3, con l'endpoint, le credenziali, l'ambito di accesso e i passaggi di verifica corretti.