MailCow (dockerized) Backup & Synchronisation mit Nextcloud

MailCow ist eine komplett dockerisierte Groupware für Mail, Kalender, Aufgaben und Kontakte. In Fachchinesisch: SMTP, IMAP, POP, CalDAV, CardDAV, etc. Das alles in einem OpenSource-Paket mit mächtigen Werkzeugen, sehr guter Dokumentation und einer tollen Community.

Wer das System auf einem ausgelagerten Server (Cloud, vServer, dedicated, etc.) betreibt und dem Hoster nicht unbedingt extra Geld für Backup-Speicher bezahlen will oder aber einfach ein zusätzliches Backup ablegen möchte (eigener Cloudserver, Dropbox, Google – you name it), kann dies mit „Bordmitteln“ bewerkstelligen. Dafür kann man u.a. das Open Source Tool rClone verwenden, welches nicht nur für Linux erhältlich ist.

Zutaten

Vorgehensweise

rClone installieren & konfigurieren (Debian/Ubuntu)

Per SSH auf dem Server einloggen und zunächst rClone installieren:

				
					curl https://rclone.org/install.sh | sudo bash
				
			

In diesem Beispiel wird ein eigener Nextcloud-Server verwendet. Dieser muss zunächst als „Remote“ definiert werden:

				
					rclone config
				
			

Im Auswahlmenü „n“ drücken für ein neues Ziel:

				
					e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
				
			

Den Namen (frei wählbar) definieren (bspw. nextcloud):

				
					e/n/d/r/c/s/q> n
name> nextcloud
				
			

Es öffnet sich eine lange Auswahlliste, für Systeme wie Nextcloud/OwnCloud verwendet man WebDAV (40):

				
					
39 / Uptobox
   \ "uptobox"
40 / Webdav
   \ "webdav"
41 / Yandex Disk
   \ "yandex"
				
			

Nun trägt man die URL für den WebDAV-Zugang ein. Dieser setzt sich bei Nextcloud wie folgt zusammen:

				
					https://<url.der.nextcloud>/remote.php/dav/files/<username>
				
			

Diese sähe nun so aus:

				
					Storage> 40
Option url.
URL of http host to connect to.
E.g. https://example.com.
Enter a string value. Press Enter for the default ("").
url> https://nextcloud.meinedomain.de/remote.php/dav/files/meinusername
				
			

Als „Vendor“ geben wir nun Nextcloud an (1):

				
					Option vendor.
Name of the Webdav site/service/software you are using.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value.
 1 / Nextcloud
   \ "nextcloud"
 2 / Owncloud
   \ "owncloud"
 3 / Sharepoint Online, authenticated by Microsoft account
   \ "sharepoint"
 4 / Sharepoint with NTLM authentication, usually self-hosted or on-premises
   \ "sharepoint-ntlm"
 5 / Other site/service or software
   \ "other"
vendor>
				
			

Gefolgt vom Benutzernamen:

				
					vendor> 1
Option user.
User name.
In case NTLM authentication is used, the username should be in the format 'Domain\User'.
Enter a string value. Press Enter for the default ("").
user> meinusername
				
			

sowie dem Passwort, welches via „y“ (eigenes vorhandenes Passwort) eingegeben wird.

Hinweis: sollte die 2FA aktiviert sein, empfiehlt sich der Einsatz eines „App“-Passworts, welches nach dem Login in Nextcloud über die Einstellungen -> Sicherheit generiert werden kann.

				
					Option pass.
Password.
Choose an alternative below. Press Enter for the default (n).
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank (default)
y/g/n> y
Enter the password:
password:
Confirm the password:
password:
				
			

Anstatt eines Passworts kann auch ein Token verwendet werden. Ist dies nicht der Fall, den nächsten Schritt mit ENTER überspringen, ebenso die Advanced Config (n):

				
					Option bearer_token.
Bearer token instead of user/pass (e.g. a Macaroon).
Enter a string value. Press Enter for the default ("").
bearer_token> 
Edit advanced config?
y) Yes
n) No (default)
y/n> n
				
			

Zum Abschluss die Konfiguration mit „y“ bestätigen:

				
					[nextcloud]
type = webdav
url = https://nextcloud.meinedomain.de/remote.php/dav/files/meinusername
vendor = nextcloud
user = meinusername
pass = *** ENCRYPTED ***
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>
				
			

Backup-Verzeichnis für MailCow einrichten

Damit MailCow seine Backups zunächst lokal ablegen kann, muss ein Verzeichnis erstellt werden bzw. vorhanden sein:

				
					mkdir -p /mnt/backups
				
			

MailCow Backup Script

Die Syntax des helper-scripts (in /opt/mailcow-dockerized) sieht wie folgt aus:

				
					./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)

				
			

Man kann nun einzelne „Komponenten“ wie vMail, den Redis Cache Server, Postfix, etc. sichern, oder man nimmt gleich alles mit in die Sicherung auf (empfohlen). In diesem Beispiel werden wir:

  1. Jeden Tag per cron um 04:05 Uhr alle Komponenten sichern und alle Backups > 30 Tage löschen
  2. Täglich um 04:55 Uhr ebenfalls per cron und rclone das Verzeichnis /mnt/backups mit unserer Nextcloud synchronisieren

Zunächst definieren wir den cronjob für das MailCow Backup via:

				
					sudo crontab -e
				
			

Sollte crontab das erste Mal aufgerufen werden, kann die 1. Option (nano) gewählt werden. Wir tragen den cronjob ein (unterhalb der mit # auskommentierten Zeilen):

				
					5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 30
				
			

Verzeichnis in Nextcloud erstellen und cronjob für rClone einrichten

Damit die Backups via cronjob und rClone nich direkt im Root-Verzeichnis des Nextcloudspeichers landen, sollte man ein eigenes Verzeichnis in Nextcloud erstellen, bspw. „Mailcow-Backup“. rClone erstellt aber auch im Sicherungsziel die entsprechenden Ordner, wenn diese nicht vorhanden sind. Ist dies definiert, kann man direkt einen Testlauf durchführen:

				
					rclone sync --dry-run /mnt/backups nextcloud:/Mailcow-Backup
				
			

War die Verbindung erfolgreich, legt man den cronjob für rClone an:

				
					sudo crontab -e
				
			

und fügen diese zusätzliche Zeile unterhalb des MailCow Eintrags ein:

				
					5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 30
55 4 * * * rclone sync /mnt/backups nextcloud:/Mailcow-Backup
				
			

Via STRG+X und Y speichern und schliessen.

Anmerkungen

Abhängig vom Datenvolumen des Backups sowie der Netzanbindung sollte man für beide cronjobs genügend Zeit einplanen. Wem die purge time des MailCow Backups zu klein oder groß ist, sollte diese entsprechend anpassen (Zeitangabe in Tagen).

Scroll to Top