Nextcloud Backups erstellen und wiederherstellen
Orginalquelle: https://decatec.de/home-server/nextcloud-backups-erstellen-und-wiederherstellen-manuell-oder-per-skript
Grundsätzliches Vorgehen[Bearbeiten]
Eine komplette Nextcloud-Instanz besteht immer aus drei Teilen: Alles muss gesichert werden.
Das Web-Verzeichnis von Nextcloud (z.B. /var/www/nextcloud) Das Daten-Verzeichnis (z.B. /var/nextcloud_data) Die Nextcloud-Datenbank
Fürs Backup benötigt man ein Datensicherungsziel - egal ob Manuell oder per Script
Das kann ein Sambashare, ein NFS Share oder auch eine lokale Festplatte sein.
Am besten automatisch per Eintrag in /etc/fstab unter /mnt einbinden. (z.B. /mnt/QNAP)
Um zu verhindern, dass beim nicht Vorhandensein des Backupziels (nicht gemountet)
alles in /mnt/QNAP geschrieben und das lokale Dateisystem volläuft wird am besten ein Symlink auf /mnt/QNAP erzeugt
und dieser in der Folge als Backupziel angeben
Ausnahme: Liegt die Nextcloud in einer DMZ - dann bleibt fast nur ein lokaler Datenträger übrig, es sei denn in der DMZ ist auch ein NAS verfügbar.
Backup und Restore Manuel[Bearbeiten]
Backup erstellen[Bearbeiten]
Um ein Backup zu erstellen, sollte die Nextcloud-Instanz zunächst in dem Maintenance-Mode versetzt werden. Das sorgt dafür, dass kein Benutzer aktiv auf der Cloud arbeiten kann.
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --on
Als nächstes müssen das Hauptverzeichnis von Nextcloud gesichert werden. Dies ist im Normalfall unter /var/www/nextcloud zu finden (bitte den Punkt am Ende der Zeile beachten):
tar -cpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_FileDir_`date +"%Y%m%d"`.tar.gz -C /var/www/nextcloud .
Neben dem Nextcloud-Verzeichnis muss auch das Datenverzeichnis von Nextcloud mit in das Backup einfließen. Dieses sollte idealerweise außerhalb des Web-Verzeichnisses liegen (z.B. unter /var/nextcloud_data). Auch hist wieder ein Punkt am Ende des Befehls:
tar -cpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_DataDir_`date +"%Y%m%d"`.tar.gz -C /var/nextcloud_data .
Nun muss nur noch die Datenbank der Nextcloud-Installation gesichert werden. Dies geschieht mit folgendem Befehl:
mysqldump --single-transaction -h localhost -u nextcloud_db_user -p nextcloud_db > /mnt/Share/Backups/Nextcloud/NextcloudBackup_DB_`date +"%Y%m%d"`.sql
Nun ist das Backup komplett, so dass Benutzer wieder mit der Cloud arbeiten können. Daher wird der Maintenance-Modus wieder beendet:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --off
Backup zurückspielen[Bearbeiten]
Ein Backup anzufertigen ist natürlich nur eine Seite der Medaille. Im Falle des Falles muss das Backup auch zurückgespielt werden können.
Vor der Wiederherstellung versetzen wir Nextcloud wie gewohnt in den Maintenance-Mode:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --on
Da wir hier ein komplettes Backup wieder einspielen, sollte der Webserver zunächst ein mal gestoppt werden:
service nginx stop (Falls Apache im Einsatz, dann den Apache stoppen "service apache2 stop")
Vor der Wiederherstellung der Dateien der Cloud werden als erstes die entsprechenden Verzeichnisse gelöscht und neu angelegt. Dies sorgt dafür, dass keine Dateien aus dem Zustand vor dem Backup übrigleiben:
rm -r /var/www/nextcloud/ rm -r /var/nextcloud_data/
mkdir -p /var/www/nextcloud/ mkdir -p /var/nextcloud_data/
Nun gilt es zunächst das Nextcloud-Verzeichnis aus dem Backup wiederherzustellen. Da das Datum als Zeitstempel für das Backup diente, muss bei den folgenden Befehlen immer das korrekte Datum verwendet werden: muss bei den folgenden Befehlen immer das korrekte Datum verwendet werden:
tar -xpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_FileDir_20170912.tar.gz -C /var/www/nextcloud/
Das gleiche wird mit dem Datenverzeichnis von Nextcloud durchgeführt:
tar -xpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_DataDir_20170912.tar.gz -C /var/nextcloud_data/
Anschließend werden die Verzeichnis-Berechtigungen noch einmal explizit gesetzt:
chown -R www-data:www-data /var/www/nextcloud chown -R www-data:www-data /var/nextcloud_data
Zum Schluss wird noch die Datenbank wiederhergestellt. Dazu wird zunächst die Datenbank entfernt und neu angelegt (für die Ausführung der Befehle muss das Passwort des Nextcloud-Datenbankusers angegeben werden):
mysql -h localhost -u nextcloud_db_user -p -e "DROP DATABASE nextcloud_db" mysql -h localhost -u nextcloud_db_user -p -e "CREATE DATABASE nextcloud_db"
Das Einspielen des Backups geschieht durch folgenden Befehl:
mysql -h localhost -u nextcloud_db_user -p nextcloud_db < /mnt/Share/Backups/Nextcloud/NextcloudBackup_DB_20170912.sql
Nun wird der Webserver wieder gestartet:
service nginx start oder service apache2 start
Nun wird Nextcloud wieder aus dem Maintenance-Mode geholt.
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --off
Zum Schluss muss noch ein Befehl abgesetzt werden, damit Nextcloud-Clients mitbekommen können, dass sich hier etwas durch das Wiederherstellen eines Backups verändert hat:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:data-fingerprint
Nach diesen Schritten wurde ein Backup von Nextcloud wiederhergestellt und es kann wieder mit der Cloud gearbeitet werden.
Backup/Restore mit Bash-Skript (bevorzugt)[Bearbeiten]
Backup einrichten[Bearbeiten]
Das Backupscript verwendet pigz zur Kommprimierung des Backups. Falls noch nicht installiert, dann nachinstallieren.
apt install pigz
Backup-Scripte beim Autor runterladen und Backup Konfigurieren
1. Klonen des Repositories: `git clone https://codeberg.org/DecaTec/Nextcloud-Backup-Restore.git` 2. Rechte setzen: - `chown -R root Nextcloud-Backup-Restore` - `cd Nextcloud-Backup-Restore` - `chmod 700 *.sh` 3. Aufrufen des interaktiven Scripts setup.sh Es fragt die wesenlichen Parameter ab und erzeugt das notwendige Konfigurationsfile automatisch `NextcloudBackupRestore.conf` 4. Wichtig: Check this configuration file if everything was set up correctly (see *TODO* in the configuration file comments)
Backup erstellen[Bearbeiten]
Kein weiterer Parameter notwendig
./NextcloudBackup.sh
Backup zurückspielen[Bearbeiten]
Als Parameter das genaue Backup angeben
./NextcloudRestore.sh 20170912_073953
Automatisches Backup per Cronjob[Bearbeiten]
crontab -e 0 2 * * * /path/to/scripts/Nextcloud-Backup-Restore/NextcloudBackup.sh > /path/to/logs/Nextcloud-Backup-$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1