Zum Inhalt

Datensicherung für die Nextcloud mit BorgBackup

Bevor es los geht, nein der Name Borg hat nichts mit den Borg aus dem Star Trek Universum zu tun. Der Name leitet sich vom Entwickler Jonas Borgström ab.

Aber nun zum Backup-Tool.

BorgBackup ist ein Deduplikationsbackupprogramm. Ganz grob gesagt bas bedeutet, dass Daten, die mehrmals auf dem Quelllaufwerk vorhanden sind, nur einmal auf dem Backup-Laufwerk abgespeichert werden.
Das spart im ganzen Prozess Zeit für die Übertragungen der Daten und auch Platz auf dem Backup-Laufwerk. BorgBackup zerlegt zu diesem Zweck das Backup in kleinere Teile, um diese zu vergleichen. Sind die Daten bereits im Backup vorhanden, werden sie nicht noch einmal abgespeichert. Das spart vor allem bei sehr großen Dateien viel Zeit, wie bei Abbildern von virtuellen Maschinen.

BorgBackup bietet weitere nützliche Features an, wie z.B. eine komplette Verschlüsselung der Backup-Daten.

Bei mir verwende ich BorgBackup, um eine Datensicherung meiner Nextcloud-Instanz auf ein openmediavault zu erstellen. Dazu habe ich auf dem Nextcloud-Server ein kleines Shell-Skript angelegt, um die Datensicherung (fast) automatisch durchzuführen.

Auch openmediavault hat eine Erweiterung, die BorgBackup unterstützt. Die habe ich aber in diesem Fall bewusst nicht genommen, sondern ich wollte den gesamten Backup-Prozess vom Nextcloud-Server aus starten.

openmediavault

In openmediavault ist das NFS-Laufwerk einzurichten, damit ihr das bei eurem Nextcloud-Server einbinden könnt.

Eine Installationsanleitung für euer eigenes openmediavault-Nas findet ihr hier: 👉 openmediavault – NAS mit einem Raspberry Pi 4

openmediavault - NFS-Freigabe

Im Artikel 👉 openmediavault – NAS mit einem Raspberry Pi 4 findet ihr weitere Informationen zur Konfiguration von openmediavault.

Nextcloud

Das folgende Skript kann an die eigenen Bedürfnisse angepasst werden. Ich habe versucht Variablen zu verwenden, um die Konfiguration recht einfach zu gestalten.

Eine Installationsanleitung für eure eigene Nextcloud findet ihr hier: 👉 Nextcloud auf dem Raspberry Pi

Bei mir auf dem Nextcloud-Server habe ich zwei Skripte angelegt:

  • das erste Skript sichert die Nextcloud Configuration, z.B. borgbackup-nextcloud-config.sh
  • das zweite Skript sichert den kompletten Nextcloud-Daten, z.B. borgbackup-nextcloud-data.sh

Beide Skripte habe ich auf meinem Nextcloud-Server im Verzeichnis "/etc/skripte" abgespeichert.

Dieses Skript sichert das Verzeichnis /mnt/data, dass sämtliche Daten meiner Nextcloud enthält. Weiterführende Informationen dazu findet ihr in meinem Artikel 👉 Nextcloud auf dem Raspberry Pi

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Für die Anleitung nenne ich das Skript borgbackup-nextcloud-data.sh

#!/bin/bash

# Skript erstellt von strobelstefan.org
# Datensicherung für die Nextcloud mit BorgBackup
# https://strobelstefan.de/?p=8073

# Skriptvorlage BorgBackup
# https://wiki.ubuntuusers.de/BorgBackup/
# https://borgbackup.readthedocs.io/en/stable/


##############################
# BorgBackup Konfiguration
##############################

# Hier Pfad zum Sicherungsmedium angeben.
zielpfad="/mnt/openmediavault/Nextcloud-Backup/borgbackup"

# Hier Namen des Repositories angeben.
repository="nextcloud-data"

# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
sicherung="/mnt/data/"

# Hier die Art der Verschlüsselung angeben
# Bitte BorgBackup für weitere Informationen zur Verschlüsselung anschauen
# --> https://readthedocs.org/projects/borgbackup/downloads/
verschluesselung="repokey"

# Hier die Art der Kompression angeben
# Bitte BorgBackup für weitere Informationen zur Verschlüsselung anschauen
# --> https://readthedocs.org/projects/borgbackup/downloads/
kompression="lz4"

# Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll
# z.B. rootuser="ja" oder rootuser="nein"
rootuser="nein"

# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
# Die Vorgabe behält alle Sicherungen des aktuellen Tages. Zusätzlich das aktuellste Archiv der
# letzten 7 Sicherungstage, der letzten 4 Wochen sowie der letzten 12 Monate.
pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12"

##############################
# Nextcloud Konfiguration
##############################

#Name der Nextcloud
NEXTCLOUD="nextcloud"

# E-Mail Adress an die der Status gesendet werden soll
EMAIL="email@adresse.de"

##############################
#BorgBackup Passphrase
##############################
# Das Passwort wird benötigt, wenn BorgBackup automatisch über ein Script ausgeführt werden soll
# Zum Schutz sollte deshalb das BorgBackup-Skript noch besonders geschützt werden
# sudo chown root:root
# sudo chmod 0600
export BORG_PASSPHRASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


##############################
#Mount the NFS share where the backup should be saved to
##############################
# Der Pfad muss bereits manuell mit "sudo mkdir" angelegt worden sein
# In der /etc/fstab wurde der Mount Point nicht gesetzt, weshalb das Skript diesen beim ausfuehren automatisch einbindet
sudo mount 192.168.178.3:Nextcloud-Backup /mnt/openmediavault


###################################################################################################

repopfad="$zielpfad"/"$repository"

# check for root
if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then
  echo "Sicherung muss als Root-User ausgeführt werden."
  exit 1
fi

# Init borg-repo if absent
if [ ! -d $repopfad ]; then
  borg init --encryption=$verschluesselung $repopfad
  echo "Borg-Repository erzeugt unter $repopfad"
fi

# backup data
SECONDS=0
echo "Start der Sicherung $(date)."

borg create --compression $kompression --exclude-caches \
            --exclude '/mnt/data/*/cache' \
            --exclude '/mnt/data/*/files_trashbin' \
            --exclude '/mnt/data/*/upload' \
            --one-file-system -v --stats --progress \
            $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden" | mutt ${EMAIL} -s "BorgBackup completed for "${NEXTCLOUD}

# prune archives
borg prune -v --list $repopfad --prefix '{hostname}-' $pruning


##############################
# Unmounts the NFS share
##############################

sudo umount /mnt/openmediavault


###################################
# Sends E-Mail to Defined Address
###################################
# Sends LOGFILE and compressed rsync log file vie e-mail to defined address

#echo $(date +%Y-%m-%d_%H-%M-%S) " - BorgBackup completed for "${NEXTCLOUD} | mutt ${EMAIL} -a ${LOGFILE} -s "BorgBackup completed for "${NEXTCLOUD}

Das Einbinden des openmediavault-Laufwerks wird durch das Skript automatisch durchgeführt. Ihr müsst jedoch darauf achten, dass der hier angegebenen Ordner auf dem Nextcloud-Server bereits vorhanden ist! Den Ordner legt ihr sonst mit dem Befehlt an:

sudo mkdir /mnt/openmediavault

Das Skript enthält die BorgBackup-Passphrase die besonders zu schützen ist, damit unbefugte Dritte nicht auf die Datensicherung zugreifen können. Deshalb ist die Datei noch gesondert zu sichern.

cd /etc/skripte
sudo chown root:root
sudo chmod 0600

Das Skript kann anschließend manuell gestartet werden:

sudo ./borgbackup-nextcloud-data.sh

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source