Come eseguire il backup di Nextcloud con Restic e Cron

Scenario esemplificativo (ipotetico): Jordan amministra un piccolo server Nextcloud su Ubuntu. I file dell'applicazione si trovano in /var/www/nextcloud, i file utente in /srv/nextcloud-data, MariaDB memorizza il database di Nextcloud e un host Linux remoto è accessibile tramite SSH. Jordan desidera un backup notturno che possa essere ispezionato e ripristinato, non semplicemente una voce cron che venga eseguita senza errori.

Questo esempio fornisce a Jordan un flusso di lavoro ripetibile basato su Restic e cron. Percorsi, account di servizio, nomi di database e pianificazione sono solo esempi; sostituiteli con i valori della vostra installazione. I comandi non implicano che questa configurazione sia stata eseguita o testata su un server reale.

Cosa deve contenere un backup Nextcloud utilizzabile

Una semplice copia di una cartella potrebbe omettere le informazioni necessarie a Nextcloud per riconnettere file, utenti, condivisioni e impostazioni. Il manuale di amministrazione di Nextcloud 35 elenca cinque elementi da conservare: la directory di configurazione, le app personalizzate (se presenti), la directory dei dati, la directory dei temi e il database. La guida al ripristino afferma che il database, la directory dei dati e i file di configurazione sono essenziali. Prima di adattare l'esempio, consultare il manuale corrispondente alla versione di Nextcloud installata.

Jordan sceglie di eseguire il backup dell'intera directory dell'applicazione, che include configurazione, app e temi, oltre alla directory dati separata e a un dump del database. È inoltre necessaria una copia separata di ogni posizione di archiviazione esterna se Nextcloud memorizza i contenuti utente all'esterno /srv/nextcloud-data. Restic può proteggere solo i percorsi che il processo di backup può leggere.

Le istruzioni ufficiali di Nextcloud per il backup descrivono la modalità di manutenzione e i backup del database. Le istruzioni per il ripristino spiegano perché il database e la struttura delle cartelle devono provenire da un punto di ripristino compatibile.

1. Preparare Restic e le relative credenziali

Installa Restic dalla fonte di pacchetti di cui ti fidi e verifica che sia disponibile per l'account che eseguirà il job. L'esempio presuppone che il job venga eseguito come root in modo da poter leggere i file di Nextcloud e il dump del database. Utilizza un repository SFTP remoto in modo che un eventuale errore del server applicativo di Jordan non cancelli anche l'unica copia di backup.

restic version

install -d -m 700 /root/.config/restic
install -d -m 700 /root/.config/nextcloud

Crea una password complessa per il repository Restic e salvala /root/.config/restic/nextcloud-passwordcon permessi di solo root. Conserva una copia di ripristino sicura di tale password in un luogo separato dal server e dal repository. Restic crittografa i dati del repository, ma la perdita della password può rendere inutilizzabili i backup crittografati. Non inserire la password direttamente nello script o nella riga di cron.

Configura l'accesso SSH non interattivo per l'account di backup sull'host remoto e verifica la sua chiave host tramite un canale attendibile. Imposta il percorso del repository di seguito su una directory in cui l'account dispone dei permessi di scrittura:

export RESTIC_REPOSITORY='sftp:backup@vault.example.net:/srv/restic/nextcloud'
export RESTIC_PASSWORD_FILE='/root/.config/restic/nextcloud-password'
restic init

Inizializza un repository una sola volta. La guida alla preparazione del repository di Restic documenta i backend di archiviazione supportati e la procedura di inizializzazione. Tratta il file delle password e la chiave SSH come credenziali sensibili e limita l'accesso ad essi.

2. Mantenere il database e i file in un punto compatibile

Nextcloud consiglia la modalità di manutenzione per i backup perché blocca i nuovi accessi e le sessioni esistenti per prevenire incoerenze nei dati. Il comando deve essere eseguito come utente HTTP; in una tipica configurazione di pacchetti Ubuntu, tale utente è www-data. La finestra di manutenzione di Jordan dura fino al dump del database e al backup di Restic, quindi gli utenti non possono lavorare in Nextcloud durante tale periodo.

Per MariaDB, il manuale di Nextcloud utilizza mariadb-dump --single-transaction. Archivia le credenziali del database in un file di impostazioni predefinite del client protetto, ad esempio /root/.config/nextcloud/mariadb.cnf, invece di incorporare una password nel comando:

[client]
user=nextcloud_backup
password=REPLACE_WITH_A_SECRET
host=localhost

Limita il file con chmod 600 /root/.config/nextcloud/mariadb.cnf. Crea un account di database con solo i privilegi richiesti dal tuo server e dalla procedura di dump. Se Nextcloud utilizza PostgreSQL o SQLite, sostituiscilo con il metodo di backup documentato; non eseguire il comando MariaDB senza modifiche.

3. Creare uno script di backup protetto

Jordan salva il seguente file /usr/local/sbin/nextcloud-restic-backupe lo rende eseguibile. Utilizza un blocco per evitare esecuzioni sovrapposte, attiva la modalità di manutenzione prima di creare il dump, esegue il backup del dump con le directory dell'applicazione e dei dati e tenta di disattivare la modalità di manutenzione anche se un comando successivo fallisce.

#!/usr/bin/env bash
set -Eeuo pipefail
umask 077
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

export RESTIC_REPOSITORY='sftp:backup@vault.example.net:/srv/restic/nextcloud'
export RESTIC_PASSWORD_FILE='/root/.config/restic/nextcloud-password'

NC_DIR='/var/www/nextcloud'
DATA_DIR='/srv/nextcloud-data'
DB_NAME='nextcloud'
DB_CNF='/root/.config/nextcloud/mariadb.cnf'
DUMP_DIR='/var/backups/nextcloud'
LOCK_FILE='/run/lock/nextcloud-restic-backup.lock'
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
DUMP_FILE="$DUMP_DIR/nextcloud-$STAMP.sql"
maintenance_started=0

mkdir -p "$DUMP_DIR"
exec 9>"$LOCK_FILE"
flock -n 9 || { echo 'A Nextcloud backup is already running.' >&2; exit 1; }

finish() {
  result=$?
  trap - EXIT
  if [[ "$maintenance_started" == 1 ]]; then
    sudo -u www-data -- php "$NC_DIR/occ" maintenance:mode --off || result=1
  fi
  rm -f -- "$DUMP_FILE" || result=1
  exit "$result"
}
trap finish EXIT

sudo -u www-data -- php "$NC_DIR/occ" maintenance:mode --on
maintenance_started=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction \
  --default-character-set=utf8mb4 --databases "$DB_NAME" > "$DUMP_FILE"
restic backup --tag nextcloud "$NC_DIR" "$DATA_DIR" "$DUMP_FILE"

Dopo aver esaminato i percorsi, creare l'eseguibile con proprietà e modalità root 700. Lo script presuppone che l'installazione utilizzi www-data, MariaDB e i percorsi elencati; verificare config/config.phpprima questi con la configurazione del server web. Presuppone inoltre che nessun altro amministratore abbia già abilitato la modalità di manutenzione. Se il comando, il dump o il caricamento di Restic falliscono, la shell termina con un errore e il trap tenta di ripristinare il servizio; controllare i log per confermare che ciò sia avvenuto. Il dump viene memorizzato con permessi restrittivi e rimosso dopo l'esecuzione.

Questo semplice schema rende il sito non disponibile per l'intera durata della scansione e del caricamento di Restic. Per una directory di dati di grandi dimensioni, questo tempo può essere eccessivo. Utilizza un dump coordinato del database e uno snapshot dello storage, oppure un altro schema di backup coerente con l'applicazione, se il tuo file system o la piattaforma di storage lo supportano. Assicurati che lo snapshot del database e dei file rappresenti un punto nel tempo compatibile; copiare separatamente un database attivo e una directory di dati in continua evoluzione può produrre un backup difficile da ripristinare.

4. Pianifica il lavoro con cron

Una volta completata con successo un'esecuzione manuale, Jordan installa lo script e lo pianifica per un periodo di inattività. Come root, modifica il crontab di root con sudo crontab -ee aggiungi:

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

Questo esempio inizia alle 2:15 del mattino, secondo il fuso orario di cron del server; scegli un orario in cui la finestra di manutenzione sia accettabile. Cron ha un ambiente più piccolo rispetto a una shell interattiva, quindi lo script imposta PATHesplicitamente e utilizza percorsi assoluti. Crea il file di log con permessi restrittivi e configura la rotazione dei log, oppure invia l'output al servizio di logging standard del tuo sistema. La pianificazione di cron avvia solo il processo: non conferma che il backup sia terminato o che un ripristino funzioni.

5. Imposta la ritenzione e verifica il risultato

Dopo un backup riuscito, Jordan verifica che sia presente un'istantanea:

restic snapshots --tag nextcloud
restic check

restic checkVerifica la struttura del repository. Un controllo periodico restic check --read-datalegge anche i dati archiviati e può utilizzare una quantità considerevole di tempo di rete e disco, quindi pianificalo in base alle dimensioni del repository e alle esigenze di ripristino. La guida alla conservazione degli snapshot di Restic spiega che la rimozione degli snapshot e l'eliminazione dei dati non referenziati sono operazioni separate e che l'eliminazione blocca il repository. Inizia con una simulazione e una policy che corrisponda ai tuoi requisiti di conservazione:

restic forget --tag nextcloud --keep-daily 7 --keep-weekly 5 \
  --keep-monthly 12 --dry-run

Esamina le istantanee che il sistema propone di rimuovere. Una volta soddisfatto, rimuovile --dry-rune aggiungile --prune; esegui la pulizia quando non entrerà in conflitto con il backup notturno. Questi conteggi di conservazione sono un esempio, non una politica universale. Considera i requisiti di conservazione previsti dalla legge, lo spazio di archiviazione disponibile e fino a che punto potresti dover tornare indietro per il ripristino.

Il test significativo è una simulazione di ripristino. Ripristina uno snapshot recente in una directory temporanea su un sistema separato, non sui percorsi Nextcloud attivi di Jordan:

restic restore latest --tag nextcloud --target /tmp/nextcloud-restore-check

Verificate che la struttura ad albero ripristinata contenga la configurazione, i dati e il dump del database previsti e controllate i file rappresentativi. Per una procedura di ripristino completa, seguite il manuale di ripristino di Nextcloud in un ambiente isolato e verificate l'accesso, l'accesso ai file e le condivisioni previste prima di affidarvi alla procedura. La documentazione di ripristino di Restic descrive la selezione degli snapshot e delle destinazioni di ripristino.

Come capire quando è necessario cambiare questo approccio

Il cron job di Jordan è adatto solo se la finestra di manutenzione è compatibile con la durata del backup e se tutti i percorsi dati necessari sono locali e leggibili. Modificare il progetto quando si presenta uno qualsiasi di questi segnali:

  • Il sito rimane in modalità di manutenzione più a lungo di quanto gli utenti possano tollerare: pianificare snapshot coordinati o un altro metodo coerente con l'applicazione.
  • I log mostrano percorsi mancanti, errori di autorizzazione, un dump del database non riuscito o un'uscita Restic diversa da zero: correggi questi problemi prima di considerare lo snapshot completo.
  • I dati risiedono in una memoria esterna o su un altro server: includere un backup costante di tale memoria nel piano di ripristino.
  • Un ripristino di prova non include i file, la configurazione, lo stato del database o il codice dell'app/tema necessario: aggiorna i dati di backup e ripeti la procedura.
  • La password di Restic o le credenziali SSH esistono solo sul server di cui si sta eseguendo il backup: archiviare le credenziali di ripristino separatamente e verificare che un amministratore autorizzato possa accedervi.

Per Jordan, il successo è tangibile: il log di cron mostra un'esecuzione completata, restic snapshotselenca uno snapshot recente con tag, i controlli del repository non segnalano errori e una procedura di ripristino recupera un'istanza Nextcloud coerente. Un comando pianificato è l'inizio di una routine di backup; solo un set completo e ripristinabile di dati di database, configurazione, applicazione e utente fornisce un percorso di ripristino efficace.

Riferimenti ufficiali

Lascia un commento

Correggere l'avviso relativo all'intestazione Strict-Transport-Security (HSTS) mancante di Nextcloud.

Correggere l'avviso relativo all'intestazione Strict-Transport-Security (HSTS) mancante di Nextcloud.

Risolvi l'avviso di Nextcloud relativo alla mancanza di HSTS configurando il server web HTTPS o il proxy inverso, quindi verifica in modo sicuro l'intestazione Strict-Transport-Security.

Risolvere l'errore "CSync Unknown Error" del client desktop ownCloud durante la sincronizzazione.

Risolvere l'errore "CSync Unknown Error" del client desktop ownCloud durante la sincronizzazione.

Risolvi l'errore "CSync Unknown Error" del client ownCloud Desktop ricostruendo il database di sincronizzazione nascosto, quindi verifica la connettività, le autorizzazioni, i nomi dei file, lo spazio su disco e i log.

Come configurare Matrix Sliding Sync per un caricamento più veloce su dispositivi mobili (senza il proxy legacy)

Come configurare Matrix Sliding Sync per un caricamento più veloce su dispositivi mobili (senza il proxy legacy)

Il proxy Matrix Sliding Sync è stato archiviato e sostituito. Abilitare la sincronizzazione Simplified Sliding Sync nativa in Synapse, verificare il supporto del client, aggiornare il routing del proxy e testare la sincronizzazione mobile in modo sicuro.

Risolvi i problemi di latenza e di accesso lento alle stanze in Matrix Synapse Federation.

Risolvi i problemi di latenza e di accesso lento alle stanze in Matrix Synapse Federation.

Diagnostica i rallentamenti nella federazione Matrix Synapse e nell'adesione alle stanze verificando la connettività, lo stato dei tentativi del server remoto, le metriche, il carico del database e i limiti di frequenza di adesione.

Come svuotare automaticamente il cestino dei file eliminati di Nextcloud

Come svuotare automaticamente il cestino dei file eliminati di Nextcloud

Configura la conservazione del cestino e le attività in background di Nextcloud per rimuovere automaticamente i file eliminati, verificare l'avvenuta pulizia ed evitare comandi di eliminazione sicura per tutti gli utenti.

Risolvere i problemi di eco e ritardo audio del microfono di BigBlueButton in WebRTC

Risolvere i problemi di eco e ritardo audio del microfono di BigBlueButton in WebRTC

Diagnostica l'eco di BigBlueButton e il ritardo audio di WebRTC separando il feedback del microfono dal ritardo di rete, verificando il test dell'eco, i dispositivi del browser, la connettività UDP e il carico del server.

Come eseguire il backup di Nextcloud con Restic e Cron

Come eseguire il backup di Nextcloud con Restic e Cron

Configura un repository Restic crittografato e un'attività pianificata (cron job) per Nextcloud, includendo la modalità di manutenzione, un dump di MariaDB, la conservazione dei dati, i log e i controlli di ripristino.

Come risolvere il problema del blocco del caricamento file di ownCloud al 99%: guida pratica alla risoluzione dei problemi

Come risolvere il problema del blocco del caricamento file di ownCloud al 99%: guida pratica alla risoluzione dei problemi

Risolvi i problemi di caricamento su ownCloud bloccati al 99% controllando i log, lo spazio di archiviazione temporaneo, lo spazio dei chunk, i limiti PHP, le sessioni, i proxy e il blocco dei file nell'ordine corretto.

Come configurare l'autenticazione a due fattori (2FA) nella console di amministrazione di Zimbra.

Come configurare l'autenticazione a due fattori (2FA) nella console di amministrazione di Zimbra.

Abilita e applica correttamente l'autenticazione a due fattori (2FA) di Zimbra, registra un account amministratore, scegli la verifica tramite TOTP o e-mail e testa l'accesso alla Console di amministrazione.

Come configurare la moderazione della stanza Matrix con il bot Mjolnir

Come configurare la moderazione della stanza Matrix con il bot Mjolnir

Configura Mjolnir per la moderazione di Matrix: crea un account bot dedicato, configura la sua sala di controllo, proteggi le stanze, gestisci le liste di ban e verifica le autorizzazioni in modo sicuro.