Home
» Come fare
»
Automatizza i backup coerenti di Nextcloud con Restic e Cron.
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.
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.
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.
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:
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
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.
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:
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:
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.
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.