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

Automatizza i backup coerenti di Nextcloud con Restic e Cron.

Automatizza i backup coerenti di Nextcloud con Restic e Cron.

Esegui il backup simultaneo dei file di Nextcloud e di MariaDB, pianifica snapshot crittografati di Restic tramite cron e verifica il ripristino senza mettere a rischio il server di produzione.

Metti ONLYOFFICE Docs dietro HAProxy senza interrompere la modifica

Metti ONLYOFFICE Docs dietro HAProxy senza interrompere la modifica

Configura HAProxy HTTPS, l'inoltro delle intestazioni, i timeout WebSocket e i controlli di integrità per ONLYOFFICE Docs, quindi verifica le modifiche e i salvataggi.

Aggiungere font al server di documenti ONLYOFFICE: Docker vs Linux

Aggiungere font al server di documenti ONLYOFFICE: Docker vs Linux

Installa i font personalizzati in ONLYOFFICE Document Server, confronta i mount Docker persistenti con le copie dirette, ricostruisci l'elenco dei font e verifica il risultato.

Debian 12 su un VPS con poca RAM: come ridurre i crash di MySQL dovuti a errori di memoria insufficiente (OOM).

Debian 12 su un VPS con poca RAM: come ridurre i crash di MySQL dovuti a errori di memoria insufficiente (OOM).

Diagnosticare i kill di MySQL OOM su Debian 12, verificare i limiti di memoria del VPS, configurare lo swap e ottimizzare la memoria e la concorrenza del database, senza promettere una soluzione universale.

Eseguire il backup e il ripristino di una casella di posta Zimbra CE utilizzando le esportazioni TGZ.

Eseguire il backup e il ripristino di una casella di posta Zimbra CE utilizzando le esportazioni TGZ.

Esporta una singola casella di posta Zimbra Community Edition, convalida il relativo backup TGZ e ripristina gli elementi mancanti senza sovrascrivere la posta esistente.

Consenti agli utenti autorizzati di creare stanze Jitsi con l'accesso tramite Keycloak.

Consenti agli utenti autorizzati di creare stanze Jitsi con l'accesso tramite Keycloak.

Consenti solo agli account approvati di avviare stanze Jitsi Meet utilizzando l'autenticazione tramite Keycloak e token, mantenendo al contempo la possibilità per gli ospiti di partecipare quando necessario.

Come configurare una VPN WireGuard Point-to-Site su Debian 12

Come configurare una VPN WireGuard Point-to-Site su Debian 12

Configura un server VPN WireGuard su Debian 12 per un client remoto. Configura le chiavi, l'inoltro IPv4, il NAT con nftables, l'accesso tramite firewall e i controlli di connessione.

Sincronizza gli utenti di Active Directory con ONLYOFFICE DocSpace tramite LDAP

Sincronizza gli utenti di Active Directory con ONLYOFFICE DocSpace tramite LDAP

Collega ONLYOFFICE DocSpace ad Active Directory o OpenLDAP, importa utenti e gruppi in modo sicuro, mappa i campi dell'account e pianifica una sincronizzazione affidabile.

Installazione e firma di moduli kernel personalizzati su Secure Boot SLES 15

Installazione e firma di moduli kernel personalizzati su Secure Boot SLES 15

Carica un modulo kernel SLES 15 personalizzato senza disabilitare Secure Boot. Fai corrispondere il kernel in esecuzione, firma il file .ko, registra una chiave MOK e verifica il caricamento.

Inoltro sicuro dei log Syslog SLES con rsyslog e TLS reciproco

Inoltro sicuro dei log Syslog SLES con rsyslog e TLS reciproco

Invio dei log di sistema SLES a un collettore rsyslog remoto tramite TLS autenticato, con verifica dei certificati, buffering in caso di interruzione del servizio e test di consegna.