Backup Nextcloud auf Ubuntu mit Hyper-V

Hallo zusammen,

ich habe mir jetzt Nextcloud 14 auf einem Ubuntu Server 18 in einer Windows 10 Hyper-V Maschine eingerichtet. Zusätzlich zur Nextcloud habe ich alle Daten über Samba freigegeben. Ich habe im weiteren ein QNAP NAS (das leider Nextcloud 14 nicht unterstützt-> 1GB RAM) welches nun jeden Tag ein Backup machen sollte.

Wie gehe ich da am besten vor ?
-Einfach die komplette Virtuelle Maschine sichern ? Muss ich da dann jeden Tag die kompletten Daten kopieren und habe somit keine Verisonsverwaltung oder ?
-Mit Rsync oder dergleichen jeweils das Datenverzeichniss und die Datenbank sichern ? Hier ist eine Versionsverwaltung möglich, jedoch müsste ich Nextcloud bei einem Festplattenausfall wieder umständlich einrichten ?
-Einfach die Daten per Samba/Webdav auf das NAS kopieren ? Dies scheint mir die einfachste Lösung… aber was ist mit den Kalendern und Kontakten ?

Bin hier leider kein Profi, hab die Einrichtung mit Ach und Krach hinbekommen…

Vielen Dank,

Andi

Hi,

genau für solche Anforderungen gibt’s ein Skript: Nextcloud-Backup-Restore.

Hier sind nur ein paar wenige Anpassungen an die konkrete Umgebung erforderlich. Anschließend erhält man Komplett-Backups (Nextcloud-Dateien, Datenbank und Datenverzeichnis) in gepackter Form (tar.gz).
Diese Archive kannst du dann beipeilsweise auch auf einem NAS speichern.

Bei Bedarf gibt es dann auch noch ein Restore-Skript, mit dem du ein Backup mit nur einem Befehl zurückspielen kannst.

Automatisieren könntest du das Ganze z.B. mit einem Cronjob, der täglich nachts läuft.

Hallo,

ok das sieht ja schonmal gut aus. Aber: Wenn ich z.B. 500 GB in der Cloud habe, brauch ich nochmal 500 um ein Backup zu speichern ? Wenn ich jetzt das erste Backup gemacht habe, dann z.b. nochmal 10gb hinzufüge, wie groß ist dann das nächste backup ? Nur die geänderten 10 GB oder ?

Ich habe jetzt mal ein Script erstellt und ausgeführt. Diese Anleitung hier war sehr hilfreich (stammt vermutlich auch von dir, vielen Dank dafür.

Hier mal die Zeilen, wie ich sie geändert habe:

backupMainDir="/mnt/NextcloudBackups/"

backupdir="${backupMainDir}/${currentDate}/"

nextcloudFileDir="/var/www/nextcloud"

nextcloudDataDir="/mnt/ncdata"

webserverServiceName=“Apache”

nextcloudDatabase=“nextcloud_db”

dbUser=“ncadmin”

dbPassword=“MeinPasswort”

webserverUser=“www-data”

maxNrOfBackups=0

Leider hab ich keine Code einfügen Funktion gefunden. Ich habe die Hyper V Standartinstallation mit diesem Script hier ausgeführt.

Ich bekomme folgende Fehler:

Failed to stop Apache.service: Unit Apache.service not loaded.

./NextcloudBackup.sh: Zeile 104: mysqldump: Befehl nicht gefunden

Failed to start Apache.service: Unit Apache.service not found.

Vermutlich habe ich einfach nicht den richtigen Dienst beschrieben. Kannst du mir sagen was hier Richtig ist anhander der Beschreibung ? Oder sagen wie ich rausfinde was ich eintragen muss ?

Der Service für den Webserver sollte “apache2” lauten: service apache2 start/stop
Das Installations-Skript aus deinem Link installiert auch SQLite und kein Mariadb/MySQL. Hiermit habe ich leider keine Erfahrungen, vielleicht ist hier dieser Link hilfreich.

Falls du es hinbekommen solltest, dann melde dich einfach nochmal, evtl. kann ich die Befehle für Apache/SQLite noch in das Wiki des GitHub-Repos eintragen.

Hallo DecaTec,

vielen Dank für deine Hilfe. Dieses Installationsscript verwendet postgreSQL als Datenbank.
Folgender Befehl erstellt ein Backup:

sudo -u ncadmin pg_dump --user ncadmin -b -F c nextcloud_db --file /mnt/NextcloudBackups/testbackup2.sql

Allerdings glaube ich nicht das das im Script mit sudo -u funktioniert ?

pg_dump --host=localhost --user=ncadmin -b -F c nextcloud_db --file  /mnt/NextcloudBackups/testbackup2.sql 

Damit sollte es grundsätzlich auch funktionieren. Nur kommt dann ein Fenster zur Eingabe des Passworts. Das muss dann vermutlich das Passwort des Datenbankbenutzers sein. Ich glaube da ist aber gar keines vergeben oder ? Zumindest passt das was ich für diesen Unix Benutzer verwendet habe nicht…

Hat jemand hierzu eine Idee ?

Wenn du das Skript mit Root-Rechten ausführst (sudo -s), kann dann der DB-Dump nicht gezogen werden?

Kann ich das Script einfach mit root rechten ausführen ? Ich habe gedacht das macht man nicht, das ist böse…
Muss ich dann den Befehl genau so in das Script einfügen wie ich Ihn als 1. Beschrieben habe ?

Klar, für das Skript werden Root-Rechte benötigt, da für einige Sachen einfach Root-Rechte benötigt werden. Das Skript prüft aber auch vor der Ausführung des ersten Befehls, ob Root-Rechte vorhanden sind.

Der Befehl sollte (mit Root-Rechten) dann einfach so aussehen:
pg_dump --host=localhost --user=ncadmin -b -F c nextcloud_db --file /mnt/NextcloudBackups/testbackup2.sql

Und du hast Recht: Unbekannte Skripte solte man in der Tat nicht einfach mit Root-Rechten ausführen - da kann ja prinzipiell alles ausgeführt werden. Aber das Skript ist ja als Open Source verfügbar, daher siehst du genau, was da abläuft und dass da nichts Böses passiert.

edit: hatte das falsche Datenbankpasswort. Der richtige Befehl lautet:

PGPASSWORD="${dbPassword}" pg_dump "${nextcloudDatabase}" -h localhost -U "${dbUser}" -f "${backupdir}${fileNameBackupDb}"

Hätte man auch hier asuführlich für jeden Datenbanktyp gefunden: https://docs.nextcloud.com/server/12/admin_manual/maintenance/backup.html

So läufts jetzt und macht ein ganz anständiges Backup.

Eine Problem:
Ich habe die Backups die das Script erstellt jetzt mal mit rsync auf ein anderes NAS gespeichert per SSH. Ich möchte später jeden Tag ein Backup haben. Die täglichen Backups sollten je 30 Tage aufgehoben werden. Dann monatlich je eines. So hatte ich es vorher mit meiner Qnap NAS mit Snapshots gemacht.

Ich werde später ca 500-1000GB Daten in der Nextcloud haben. Soweit ich das sehe werden bei jedem Backup alle Dateien gesichert. Am nächsten Tag wieder. Außerdem wird das Backup erstmal lokal gespeichert. Da habe ich aber eigtl. gar keinen Platz

  1. Was kann ich machen das ich mehrere Backups habe aber nicht immer den gesamten Datenstand speichern muss ?

2.Kann ich das Backup auch direkt per SSH woanders erstellen lassen ?

Vielen Dank für deine Unterstützung !

Das Skript geht erst einmal vom einfachsten Fall aus, damit es für möglichst viele Anwendungsfälle passt.

Du müsstest dir das Skript eben auf deine Bedürfnisse anpassen:

  • Dass nicht nur X Backup-Sätze behalten werden, sondern zeitgesteuert.
  • Bei so vielen Daten würde ich das Datenverzeichnis nicht immer zippen, da hier immer alle Daten gesichert werden. Den Befehl würde ich vermutlich durch einen Aufruf von rsync ersetzen, der dann auch nur neue und geänderte Dateien sichert.
  • Bedenke auch, dass das Skript nur das loakle Nextcloud-Datenverzeichnis sichert. Evtl. in Nextcloud eingebundene externe Speicher werden dabei nicht mitgesichert.
  • Das Ziel-Verzeichnis der Backups kannst du selbst festlegen. Ich würde mir dazu mal sshfs ansehen, damit kannst du entfernte Verzeichnisse per SSH ins lokale Dateisystem mounten.

Hierfür habe ich was gefunden: rsnapshot
Damit könnte ich die Dateien sicher und nur noch die Datenbank wie im Script.

Da stellt sich mir noch eine Frage: Was spricht eigentlich das ich direkt in Hyper-V einfach jeden Tag einen Snapshot mache, und den dann Auslagere ? Dann habe ich alle Fliegen mit einer Klappe geschlagen ?

Das geht natürlich auch. Auf einem Windows Server sogar im laufenden Betrieb der VM (Stichwort: Server-Sicherung).
Wo liegen denn deine 500-1000GB an Daten? Auch auf der VM? Dann werden diese auch jeden Tag gesichert, was wiederum seht viel Speicherplatz kosten würde.

Ich lagere die Snapshots aus dieser Konstellation direkt auf die ans System angeschlossene Sicherungsplatte aus oder auf eine Datenpartition, die regelmäßig gesichert wird. Zudem konsolidiere ich die Snapshots mind. einmal im Monat. Über die Sicherungen habe ich dann ja noch eine Versionierung.