Home
» Hoe
»
Automatiseer consistente Nextcloud-backups met Restic en Cron.
Automatiseer consistente Nextcloud-backups met Restic en Cron.
Voor een betrouwbare Nextcloud-back-up pauzeert u de gebruikersactiviteit, exporteert u de database en gebruikt u Restic om die export samen met de applicatie- en datadirectory's vast te leggen. Plaats de taak in een script met root-rechten en plan deze in met cron; controleer de snapshots en voer een testherstel uit voordat u op de planning vertrouwt.
Dit voorbeeld gaat uit van een Debian- of Ubuntu-server, een directe Nextcloud-installatie op /var/www/nextcloud, een aparte data-directory op /srv/nextcloud-data, en MariaDB. Vervang deze waarden door uw daadwerkelijke paden en databasenaam. De stappen zijn gecontroleerd aan de hand van de Nextcloud 35-beheerhandleiding en de Restic 0.19.1-documentatie in oktober 2026.
Een illustratie in terminalstijl van de twee acties die nodig zijn om een consistente back-up te starten: het inschakelen van de onderhoudsmodus en het exporteren van de database.
Wat moet een Nextcloud-back-up bevatten?
De back-uprichtlijnen van Nextcloud vermelden de configuratie, data, database, thema en eventuele aangepaste apps als de belangrijkste onderdelen om te behouden. Het maken van een back-up van de volledige applicatiemap omvat meestal de configuratie en de meegeleverde apps, maar controleer of aangepaste apps, thema's of de datamap zich elders op uw server bevinden. Voeg elk afzonderlijk pad toe aan de Restic-opdracht.
De onderhoudsmodus vergrendelt bestaande sessies en voorkomt nieuwe aanmeldingen terwijl de back-up wordt uitgevoerd. Hierdoor is de kans kleiner dat de database en bestanden op verschillende momenten wijzigen, maar Nextcloud is gedurende deze tijd ook niet beschikbaar. Plan de taak voor een grote dataopslag in een rustig tijdsvenster. Als uw server externe processen of scripts heeft die rechtstreeks naar de datamap schrijven, pauzeer deze dan ook.
De officiële back-upinstructies van Nextcloud leggen de componenten en de exportopties voor de database uit. Deze procedure maakt gebruik van MariaDB; voor PostgreSQL, MySQL of SQLite gebruikt u de bijbehorende dump- en restore-opdrachten in het databasegedeelte van die handleiding .
Bereid Restic voor en bescherm de inloggegevens.
Installeer Restic en de MariaDB-client via de vertrouwde pakketbron van uw distributie. Kies een repository op een andere schijf of een externe back-uplocatie. Een repository die alleen op de Nextcloud-server is opgeslagen, biedt geen bescherming tegen verlies van die server of de bijbehorende opslag. Plaats de repository niet in een van de mappen waarvan een back-up wordt gemaakt.
Restic versleutelt de gegevens in de repository, maar u hebt het wachtwoord van de repository nodig om deze te herstellen. Maak een wachtwoordbestand aan en bewaar een beveiligde kopie buiten de server, bijvoorbeeld in een goedgekeurd wachtwoordbeheerprogramma. Als het wachtwoord verloren gaat, kan de versleutelde repository niet worden gelezen. Vermijd het rechtstreeks invoeren van het wachtwoord in een opdrachtregel, crontab of script.
Bewaar het gekozen Restic-wachtwoord veilig in het wachtwoordbestand. Voeg de locatie van de repository en het pad naar het wachtwoordbestand toe aan het omgevingsbestand:
Gebruik voor een externe backend de gedocumenteerde repository-URL en inloggegevens van die backend, opgeslagen met beperkte machtigingen. Restic beschrijft de configuratie van de repository en de ondersteunde omgevingsvariabele voor wachtwoordbestanden in de handleiding voor repositoryvoorbereiding . Initialiseer een nieuwe repository eenmalig, niet bij elke uitvoering:
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Voorbeeldinstellingen voor een versleutelde Restic-repository; het wachtwoord zelf blijft in een apart, beveiligd bestand.
Ook MariaDB-referenties moeten worden beschermd. Configureer een clientoptiebestand dat door root kan worden gelezen, bijvoorbeeld /root/.my.cnfmet de databasegebruiker, het wachtwoord en de host, en stel de machtigingen in op 600. Het onderstaande script geeft dat bestand door aan mariadb-dump, zodat een databasewachtwoord niet in de procesargumenten verschijnt.
Maak een back-upscript dat Nextcloud weer in gebruik neemt.
Sla het volgende op als /usr/local/sbin/nextcloud-restic-backup. Pas NC_DATA_DIRen DB_NAMEaan zodat ze overeenkomen met config/config.php. Het script schakelt de onderhoudsmodus in, exporteert MariaDB, maakt een back-up van de applicatie, de gegevens en een tijdelijke SQL-dump, en schakelt vervolgens de onderhoudsmodus weer uit, zelfs als een latere opdracht mislukt.
#!/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
Stel eigenaarschap en machtigingen zo in dat alleen root het script kan bewerken of uitvoeren, en test het vervolgens handmatig tijdens een onderhoudsvenster. Deze mountpointcontrole voorkomt dat een ontbrekende back-upschijf stilletjes een grote repository naar het lokale bestandssysteem van de server stuurt. Als uw repository zich op afstand bevindt in plaats van lokaal te zijn gekoppeld, vervang deze controle dan door een betrouwbare controle voor uw backend.
Controleer je paden vóór de eerste keer opstarten. Als de datafolder zich al in de map bevindt /var/www/nextcloud, ga er dan niet vanuit dat het voorbeeldpad correct is; gebruik de daadwerkelijke datafolder uit de Nextcloud-configuratie. Controleer ook of aangepaste apps of thema's die buiten de applicatiemap zijn opgeslagen, expliciet zijn opgenomen.
De Restic-back-up bevat de applicatie, gebruikersbestanden en de database-dump die voor deze back-upsessie is gemaakt.
Plan de cron-taak in en controleer het resultaat.
Voeg na een succesvolle handmatige uitvoering een crontab-item toe aan de rootmap met sudo crontab -e. Dit voorbeeld start de taak dagelijks om 2:30 uur 's nachts met het volledige pad naar het script en registreert de uitvoer voor het oplossen van problemen:
Cron biedt een beperkte omgeving, dus het script stelt een expliciete tijd in PATHen laadt zelf de Restic-instellingen. Controleer of cron is ingeschakeld op uw distributie en of deze tijd niet overlapt met de achtergrondtaak van Nextcloud of een andere onderhoudstaak. De Linux crontab-handleiding beschrijft de indeling van het schema en de omgeving die cron biedt.
Controleer of de taak /var/log/nextcloud-restic.logsuccesvol is afgerond door te kijken of de taak is voltooid en door recente momentopnamen weer te geven:
Restic checkcontroleert standaard de structuur van de repository. Het volledig uitlezen van de gegevens duurt langer en kan aanzienlijke bandbreedte in beslag nemen voor een externe repository; plan dit restic check --read-dataperiodiek in of gebruik het --read-data-subsetom gedeeltes over een bepaalde periode te controleren. Zie de documentatie van Restic over de integriteit van repositories .
Een overzicht van snapshots is geen hersteltest. Herstel een recente snapshot naar een aparte tijdelijke map met de opdracht `npm install` restic restore latest --target /tmp/nextcloud-restore-testen controleer vervolgens of de app-bestanden, de gegevensmap en de SQL-dump aanwezig zijn. Herstel niet over een actieve installatie als test. Voor een daadwerkelijk herstel moet u de bestanden en de database als één geheel herstellen; de herstelinstructies van Nextcloud behandelen het opnieuw aanmaken van de database en de synchronisatie met de client.
Deze configuratie biedt herhaalbare, versleutelde snapshots, maar cron controleert zijn eigen fouten niet en Restic bepaalt uw bewaarbeleid niet. Controleer het logboek of configureer waarschuwingen voor mislukte uitvoeringen, bewaar een aparte kopie van de repository-referenties en test het herstel regelmatig. Als het onderhoudsvenster te lang is, gebruik dan gecoördineerde bestandssysteemsnapshots en een databaseconsistente export die is ontworpen voor uw opslagplatform in plaats van live back-ups te maken van veranderende bestanden.
Het schema voert het door root beheerde script dagelijks uit; de momentopname toont een snelle controle of de uitgevoerde scripts zijn geregistreerd.