Nextcloud - Automatische Datensicherung von Kalendern und Adressbüchern
Nextcloud bietet eine sehr gute Kalenderfunktion an, die umfangreiche Möglichkeiten für die Benutzer bietet. Es kann eine beliebige Anzahl von Kalendern anlegt und mit anderen Nextcloud-Benutzern geteilt werden. Die Synchronisation der Kalender ist auf jedes Endgerät, Windows, Linux, Android, MacOS, iOS, etc. dank der Nutzung von CalDAV und CardDAV problemlos möglich.
In diesem Beitrag geht es darum, die Adressbücher und die Kalender der Benutzer mithilfe eines Cron Jobs zu sicheren. Die Adressbücher werden dabei im vcf- und die Kalender im ics-Format exportiert.
Mit dieser Möglichkeit der Datensicherung habt ihr die Kalender sofort verfügbar und könnt sich im Fall der Fälle auch gleich in ein anderes Adress- und Kalendertool importieren oder so auch in eine andere Nextcloud-Instanz übertragen. Das in diesem Beitrag verwendete Tool calcardbackup
von "BernieO" exportiert die Adressbücher und Kalender auf ein Speichermedium, z.B. SD-Karte, externe Festplatte, USB-Stick, etc. an eurer Nextcloud.
Ich habe das Ganze ein wenig erweitert, damit der Export in einen tar.gz-Archiv per E-Mail an eine von euch definierte E-Mail-Adresse gesendet wird.
In diesem Beitrag wird ein funktionierender E-Mail-Versand vorausgesetzt. Habt ihr das noch nicht eingerichtet auf eurem Raspberry Pi, schaut euch meinen Beitrag 👉 E-Mail-Versand für den Raspberry Pi konfigurieren an. Dort beschreibe ich die Installation und Konfiguration von Postfix ausführlich.
Da seitdem einige Zeit vergangen ist, habe ich meine Sicherungsstrategie ein wenig angepasst.
Nextcloud - Kalender-App installieren
Bevor es an die Konfiguration des Backups geht, muss die App Calendar
in Nextcloud installiert werden.
Die Erweiterung ist eine offiziell unterstützte App und läuft ohne Probleme. 👉 Calendar
Eine weitere hilfreiche App ist Notifications for calendar event updates
. Es handelt sich um keine offizielle Erweiterung. 👉 Notifications for calendar event updates
Für die Verwaltung von Adressbücher in Nextcloud wird die offizielle App "Contacts" verwendet. 👉 Contacts
Kalenderbackup konfigurieren
calcardbackup
Auf codeberg.org wird das calcardbackup
-Projekt von BernieO. 👉 https://codeberg.org/BernieO/calcardbackup verwaltet.
Ihr benötigt eigentlich nur die Datei calcardbackup
. Die anderen Dateien sind nicht erforderlich und werden für den Sicherungsprozess nicht benötigt.
Ich habe die Datei in das Verzeichnis /etc/scripts/calcardbackup
gelegt, wo ich all meine Bash-Skripte ablege.
Die Rechte sind zu ändern. Damit wird das Skript mit ROOT-Rechten ausgeführt und erstellt von jedem Benutzer eine Sicherung des Kalenders und der Adressbücher.
sudo chown root:root calcardbackup
sudo chmod 0600 calcardbackup
sudo chmod +x calcardbackup
Änderungen an der Datei calcardbackup
habe ich nicht durchgeführt.
calendarbackup.sh
Das Skript calendarbackup.sh
habe ich erstellt, um mehr Einstellungsmöglichkeiten über das Backup-Verzeichnis, den Versand von Statusmeldungen und der Backups zu erhalten.
Durch die Maßnahmen wird das Skript allgemein übersichtlicher und läuft der Datensicherungsprozess läuft stabiler, da das Mounten eines Netzwerklaufwerks entfällt.
Codeberg
Die aktuellste Version ist auf codeberg.org zu finden 👉 codeberg.org/sst/kalenderbackup
#!/bin/bash
# by strobelstefan.de
# 2020-11-27
# Version: 2.0
# Nextcloud - Datensicherung von Kalendern und Adressbücher automatisch erstellen
# # https://strobelstefan.de/2020/12/01/nextcloud-datensicherung-von-kalendern-und-adressbuechern-automatisch-erstellen/
#
# This script uses the project calcardbackup (https://codeberg.org/BernieO/calcardbackup) to export calendar and address books
# from Nextcloud and sends it via e-mail to a defined e-mail address
###################################
# Define Variables
###################################
# Storage device as defined in you /etc/fstab.
# Thumb drive attached to the Raspberry Pi
mountpoint='/mnt/usbbackup'
# Location of your Nextcloud
NEXTCLOUD='/var/www/html/nextcloud'
# Location of your log file
LOGFILE="/var/log/calendarbackup.log"
# Location backup path
# Location where the backup copies of calendars and address books are located
IMAGE='/mnt/usbbackup/nextcloud/calendar/'
# Location of the calcardbackup script
CALCARDBACKUP='/etc/scripts/calcardbackup/calcardbackup'
# E-mail address where the export should be sent to
EMAILBACKUP="e-mail@mail.de"
# E-mail where the log file should be sent to
EMAIL="e-mail@mail.de"
# Location of the backup script
BACKUPSCRIPT="/etc/scripts/calendarbackup.sh"
###################################
# This removes your old log file
###################################
#rm -f ${LOGFILE}
#echo $(date +%Y-%m-%d_%H-%M-%S) " - Deleted Old Log File ${LOGFILE}" >> ${LOGFILE}
###################################
# Calls the calcardbackup script
# For more information please refer to
# https://codeberg.org/BernieO/calcardbackup
###################################
sudo -u www-data ${CALCARDBACKUP} "${NEXTCLOUD}" -o ${IMAGE} -i -r 90
echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully Exported Calendar And Address Books To Local Storage" #>> ${LOGFILE}
###################################
# Send Export via E-Mail
###################################
# Will look for the newest file in the defined path ${IMAGE}
# and send the file as an attachement via e-mail to the defined address ${EMAILBACKUP}
newest=$(ls -rt ${IMAGE}*.tar.gz | tail -n1)
echo $(date +%Y-%m-%d_%H-%M-%S) " - Please find attached the actual export of calendars and address books of your Nextcloud instance." | mutt ${EMAILBACKUP} -a $newest -s "NEXTCLOUD Pi - Calender & Address Book successfully exported"
echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully sent export via E-Mail to ${EMAILBACKUP}" #>> ${LOGFILE}
###################################
# Send Backup Script
###################################
# This sends the log file to ${EMAIL}
echo $(date +%Y-%m-%d_%H-%M-%S) " - Calendar & Address book backup script sent to ${EMAIL}" | mutt ${EMAIL} -a ${BACKUPSCRIPT} -s "NEXTCLOUD Pi - Calendar & Address book backup script" #>> ${LOGFILE}
echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully sent Backup Image Script to ${EMAIL}" #>> ${LOGFILE}
###################################
# Send Log File
###################################
# This sends the log file to ${EMAIL}
#echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully sent export of address book and Calendars to ${EMAILBACKUP}" >> ${LOGFILE}
#echo $(date +%Y-%m-%d_%H-%M-%S) " - Kalender & Adressbuch gesichert" | mail -s "NEXTCLOUD Pi - Calender & Address Book successfully exported" ${EMAIL} < ${LOGFILE}
Mounten des angeschlossenen USB-Sticks
Im Skript calendarbackup.sh
wird vorausgesetzt, dass der USB-Stick in das Verzeichnis "/mnt/usbbackup" beim Starten des Raspberry Pis automatisch eingebunden wird. Damit das auch funktioniert, sind zwei Punkte zwingend erforderlich:
- Verzeichnis anlegen
- "/etc/fstab-Eintrag erstellen."
Verzeichnis anlegen
Das Verzeichnis wird einfach mit dem Befehl angelegt.
sudo mkdir /mnt/usbbackup
/etc/fstab-Eintrag erstellen
Damit der USB-Stick auch jedes Mal korrekt eingebunden wird, ist die UUID des Datenträgers erforderlich. Das ist eine eindeutige Nummer, mit die jede Partition und jeder angeschlossene Datenträger in einem Linux-System erhält.
Schließt den USB-Stick am Raspberry Pi an und gebt den Befehl ein:
sudo blkid
In der Liste tauchen nun alle Partitionen auf. Sucht nach dem USB-Stick und kopiert euch die UUID. In der Auflistung seht ihr auch die jeweilige Formatierung, z.B. vfat, ext4, ntfs, etc.
Verwendet euer USB-Stick die NTFS-Formatierung müsst ihr noch das folgende Paket installieren, damit der Raspberry Pi schreibend auf den Datenträger zugreifen kann.
sudo apt install ntfs-3g
Die "/etc/fstab" editiert ihr am einfachsten mit dem Editor nano.
sudo nano /etc/fstab
In der Datei geht ihr bis ans Ende und tragt dort folgendes ein (ACHTUNG! Verwendet die UUID eures USB-Sticks):
# Storage for Calendar & Address book backups
# Script located in /etc/scripts
UUID=123456789 /mnt/usbbackup ntfs defaults,auto,umask=000,users,rw 0 0
Cron Job anlegen
Damit die Datensicherung automatisch abläuft, ist ein Eintrag in der crontab zu erstellen.
sudo crontab -e
Scrollt an das Ende der Datei und tragt dort ein:
# Calender & Address book backup
00 20 * * * /bin/bash /etc/scripts/kalenderbackup.sh
Das Skript wird jeden Tag um 20:00 automatisch ausgeführt.
E-Mail-Versand konfigurieren
Zum Schluss ist noch die Installation des E-Mail-Servers notwendig, damit der Raspberry Pi die Dateien an die definierten E-Mail-Adressen versendet.
Testen
Die Datensicherung lässt sich sehr leicht konfigurieren, indem das Skript calendarbackup.sh
von euch ausgeführt wird.
cd /etc/scripts
sudo ./calendarbackup.sh
Backups in regelmäßigen Abständen automatisch löschen
Das Skript speichert die Datensicherungen aktuell noch solange auf den externen Speicher, bis dieser komplett voll ist. Anschließend funktioniert das Backup nicht mehr. Um hier Abhilfe zu schaffen, gibt es eine einfache Lösung, eine automatisierte Löschung von alten Backups, die nicht mehr gebraucht werden.
Ich habe dazu bereits eine kleine Anleitung geschrieben. 👉 Nextcloud – Backups in regelmäßigen automatisch Abständen löschen
Ändert den Pfad in dem Skript auf den Pfad, in den die Backups gespeichert werden. In diesem Beispiel ist das im Skript in der Variablen mountpoint='/mnt/usbbackup
definiert.
Danach passt ihr den Cron Job noch an. Bei mir läuft die automatische Löschung alter Dateien einmal am Tag.
Meine verwendete Hardware für das Backup
An meinem Raspberry Pi habe ich für die Datensicherung von Kalender und Adressbuch den USB-Stick angeschlossen.
Die Größe des Sticks ist rein für die Speicherung der Adressbücher und Kalender ein wenig überdimensioniert.
Ihr könnt dort z.B. auch eine vollständige Sicherung der internen SD-Karte ablegen, also der gesamten Nextcloud-Instanz (ohne Daten).
Codeberg
Dein Weg zur eigenen Nextcloud
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Follow Me❗️