Derzeit sichere ich meine Nextcloud-Instanz mit einem dateibasierten Backup-Tool, sowie einem Dump der Datenbank. Letztens hatte ich in meinem Umfeld jemanden, der ein paar Kontakte aus Versehen gelöscht hat. Nun können die vermissten Kontakte zwar aus dem Dump der Datenbank herausgepfriemelt werden, schön ist das aber nicht.
Nach etwas Recherche bin ich auf einen recht simplen curl
-Befehl gestoßen, der eine .ics
bzw .vcf
-Datei heraus exportiert.
Dies ist dann doch aus meiner Sicht etwas einfacher. Sofern z.B. alle Kontakte gelöscht worden sind, reicht dann sogar ein Doppelklick auf die Datei und alle Kontakte werden wieder importiert. Dies sollte wesentlich stressfreier sein.
Als Familien-Admin möchte ich den Export für alle Nutzenden der Instanz regelmäßig machen; daher habe ich mir eine Ansible-Rolle dafür gestrickt.
Das Grundprinzip und die Konfiguration der Rolle möchte ich in diesem Artikel beschreiben.
Auf die Bedienung und Verwendung von Ansible möchte ich hier nicht eingehen, da setze ich entsprechendes Wissen voraus.
Zum Zeitpunkt des Artikel ist die Nextcloud-Version 31 aktuell. Die Pfade, die in der Ansible-Rolle verwendet werden, orientieren sich an diesem Stand. Sollten sich die Subpfade der URLs ändern, müsste die Rolle angepasst werden.
Überblick
Um die Rolle zu verstehen, ist es womöglich am einfachsten, sich das Vorgehen zu verdeutlichen, wenn ein manuelles Backup angefertigt werden soll. Dies soll hier in den nächsten Abschnitten beschrieben werden, um dann im nächsten Schritt zur Automatisierung zu kommen.
Händisches Backup
Melde dich als ersten Schritt in Deiner Nextcloud an.
Kontakte
- Wähle den Reiter
Kontakte
. - Gehe nach unten auf der linken Seite und klicke da auf
Kontakte-Einstellungen
.
- Navigiere jetzt zu den
Allgemeinen Einstellungen
. - Beim gewünschten Adressbuch auf die drei Punkte klicken (1)
- und auf
Herunterladen
klicken (2).
- Voilà! Es wird eine
.vcf
-Datei mit einem aktuellen Datumsstempel zum Download angeboten.
Kalender
- Wähle den Reiter
Kontakte
. - Wähle Deinen Kalender aus, den du exportieren möchtest.
- Fahre Deine Maus etwas nach rechts bis das Stift-Icon erscheint (1) und klicke auf diesen.
- Im nächsten Dialog
Kalender bearbeiten
gibt es dann eine Schaltfläche mit der BeschriftungExportieren
.
- Voilà! Es wird eine
.ics
-Datei mit einem aktuellen Datumsstempel zum Download angeboten.
Automatisierung
Jetzt wollen wir das ganze automatisieren; dafür gibt es meine Ansible-Rolle export_nextcloud
. Die Rolle findet Du auf meinem Gitlab-Account.
Die Rolle solltest Du auf einem Linux-Host deployen, dem Du vertraust und der Zugriff auf die Nextcloud hat.
Minimale Angaben
Variable export_nextcloud_url
Zunächst benötigt die Rolle die URL, worunter die Nextcloud-Instanz erreichbar ist.
Dazu hinterlegst Du diese in der Variable export_nextcloud_url
als Hostvariable, wo das Export-Script später laufen soll.
Beispiel:
1export_nextcloud_url: "https://meine.nextcloud.instanz"
Variable export_nextcloud_user
Jetzt brauchst Du eine Liste mit einem oder mehreren Usernamen, die du sichern möchtest. Zusätzlich ein Passwort und einen Zeitpunkt, wann das Export-Script laufen soll.
Empfehlung
Statt des regulären Passwortes für Deinen User, empfehle ich die Generierung eines Personal Access Token kurz “
PAT
”.
Die Einrichtung eines PAT
beschreibe ich in einem anderem Blog-Artikel.
Als dritten Parameter wird noch der Zeitstempel benötigt, wo der Export laufen soll. Mit dieser Angabe wird später eine SystemD-Timer-Unit erstellt.
Die Syntax dieses Attributes folgt dem Parameter on_calendar
von systemd.unit(5).
Aus jeden username
wird eine extra SystemD-Timer-Units erstellt, nach folgendem Muster:
export_nextcloud-user1.timer
export_nextcloud-user2.timer
Die Konfiguration sieht am Ende zum Beispiel so aus:
1export_nextcloud_user:
2 - username: "user1"
3 password: "password1"
4 on_calendar: '*-*-* 03:00'
5 - username: "user2"
6 password: "password2"
7 on_calendar: '*-*-* 03:01'
Optionale Angaben
Variable export_nextcloud_script_path
Die nächste Variable bestimmt, wohin das Script kopiert werden soll. Der Standardpfad lautet /opt/export_nextcloud
.
Variable export_nextcloud_backup_path
Über diese Variable kann bestimmt werden, wohin die exportierten Kalender- und Kontakte-Dateien hingeschrieben werden sollen.
/backup/nextcloud_export
lautet hier der Standardpfad.
Hier entsteht pro Username eine Kalender- und eine Kontakte-Datei mit dem Username nach folgendem Muster:
kalender-${username}.ics
kontakte-${username}.vcf
Und ja, ich war zu faul, noch ein extra Aufräum-Mechanismus zu schreiben. Für die Versionierung ist bei mir mein Backup-Programm zuständig ;-) . Das kann mein Sicherungsprogramm viel effizienter als ich. Wenn ich an ältere Versionen herankommen möchte, muss ich die Sicherung bemühen; ich spare mir dadurch zusätzliche Fehlerquellen und Abhängigkeiten.
Variable export_nextcloud_prometheus_path
Diese Variable legt den Pfad fest, wo die Prometheus-Statistiken hingeschrieben werden.
Ansible Playbook
Jetzt kannst Du die Rolle in ein Ansible-Playbook einbinden.
Ein minimales Beispiel wäre:
1---
2
3- name: Setup export_nextcloud
4 hosts: export_nextcloud
5 roles:
6 - export_nextcloud
Backup
Im Nachgang bzw. nach dem Ausführen der jeweiligen SystemD-Timer-Unit, empfehle ich noch ein Backup des Verzeichnisses wo die exportierten Dateien liegen.
Das Verzeichnis kannst zum Beispiel dateibasiert mittels deiner präferierten Wunsch-Backup-Software gesichert werden.
Ich selbst habe dazu die Pfade in meinem Sicherungsscript aufgenommen; hier verwende ich restic
seit längerem erfolgreich.
Fertig.
Im Grunde war es das auch schon. Viel Spaß beim Benutzen. Der Source-Code der Rolle liegt in meinem Gitlab-Account.