Zum Inhalt

Nextcloud Recovery

Die Nextcloud ist entweder

  1. aus einem Klon der SD-Karte,
  2. den Verzeichnissen /var/www/html/nextcloud und data und einem Datenbank-Dump,
  3. oder aus einer kompletten Neuinstallation mit der Datei /var/www/html/nextcloud/config/config.php und dem data-Verzeichnis und einem MariaDB-Dump

wieder herzustellen.

Die Backups sollten nach Möglichkeit auf einem anderen physikalisch getrennten Medium abgespeichert werden.

Die Backups werden bei allen hier vorgestellten Optionen auf einem angeschlossenen USB-Stick gespeichert, können aber auch sehr einfach auf ein NAS, wie Synology oder openmediavault übertragen werden.


Wichtige Betriebssystemdateien

Neben den Nextcloud-Verzeichnissen sind noch weitere Dateien des Betriebssystems zu sichern, um die Wiederherstellung einfacher und schneller zu machen.

  • /etc/fstab
  • /etc/redis/redis.conf
  • Postfix, z.B. /etc/postfix/main.cfg
  • Crontabs
  • Logrotate Skripte
  • persönliche Skripte, z.B. /etc/scripts/custom
  • Tools, z.B. calcardbackup, pishrink, etc.
  • Let's Encrypt Einstellungen /etc/letsencrypt
  • ...

Einige der Dateien werden über mein Skript 👉 nextcloudbackup gesichert.

Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Option 1 - imagebackup

Diese Option ist mit Abstand die einfachste und schnellste Art der Wiederherstellung. Es wird das gesamte Betriebssystem gesichert, samt aller Einstellungen, Skripte und Tools.

Warning

Es wird ein kompletter Klon der SD-Karte erstellt.
Der Mount Point /mnt/data, der das Nextcloud-Daten- und Temp-Verzeichnis umfasst, wird nicht gesichert‼️
Für alle Ordner und Dateien auf dem externen Speichermedium ist eine separate Datensicherung anzulegen.
Tools, wie rsync, BorgBackup, können hilfreich sein.
Die Datensicherung kann damit auf eine Synology oder auf openmediavault übertragen werden.
👉 openmediavault und rsync


Option 2

Neuinstallation von Nextcloud

Nextcloud ist entsprechend der 👉 Anleitung zu installieren.

Nextcloud Erweiterungen

Alle Erweiterungen sind nach einer ersten Anmeldung an der neuen, leeren Nextcloud-Instanz zu installieren. Sie stehen damit nach dem Recovery sofort wieder bereit.

# Alle installierten Apps anzeigen
sudo -u www-data php /var/www/html/nextcloud/occ app:list

Die Apps können dann einzeln über die CLI installiert werden.

sudo -u www-data php /var/www/html/nextcloud/occ app:install bookmarks

Nextcloud-Config oder -Ordner aus Sicherung einspielen

Das Backupskript 👉 nextcloudbackup erstellt automatische Sicherungen des Nextcloud-Verzeichnisses, der config.php und der Datenbank.

Die Config-Datei oder der gesamte Nextcloud-Ordner lassen sich an den richtigen Ort zurückkopieren.

Wie kommen die Backups auf den neuen Raspberry Pi?

  1. Das Speichermedium, auf dem die Datensicherungen vorhanden sind, sind über die /etc/fstab bereits eingebunden. Dadurch erhält man einen Zugriff auf alle Backups der alten Nextcloud.

Die Dateien werden in das Home-Verzeichnis kopiert. Anschließend wird der Speicher wieder ausgeworfen.

sudo umount /mnt/nextcloud
  1. Die Backups werden mithilfe von rsync auf den Raspberry Pi übertragen.
rsync -avhbPz -e ssh ~/Nextcloud_Config_2024-10-23.tar.gz benutzer@192.168.2.100:/home/benutzer/Downloads/

Zur Wiederherstellungen werden die notwendigen Dateien in das Home-Verzeichnis des Benutzers kopiert.

sudo cp nextcloud-dump.bak /home/benutzer
sudo cp Nextcloud_Config_2024-10-23.tar.gz /home/benutzer
sudo cp Nextcloud_Folder_2024-10-23.tar.gz /home/benutzer

Das Speichermedium wird wieder ausgeworfen.

Die Backups im Home-Verzeichnis werden entpackt und an den richtigen Ort zu kopiert.

# Wartungsmodus AN
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on

# Apache2 stopp
sudo systemctl stop apache2.service

Das beiden tar.gz-Archive werden in einen neuen Ordner im Home-Verzeichnis entpackt:

# Nextcloud_Config
mkdir Nextcloud_Config && tar -zxvf Nextcloud_Config_2024-10-25.tar.gz -C Nextcloud_Config

# Nextcloud_Folder
mkdir Nextcloud_Folder && tar -zxvf Nextcloud_Folder_2024-10-25.tar.gz -C Nextcloud_Folder

Nur config.php kopieren

# Backup der Original Config.php erstellen
sudo cp /var/www/html/nextcloud/config/config.php ~/config.php-nextcloud-original

# config.php aus Backup kopieren
sudo cp ~/Nextcloud_Config_2024-10-23/config.php /var/www/html/nextcloud/config/

Gesamten Nextcloud Ordner kopieren

# Ordner aus Backup kopieren mit cp
sudo cp -a ~/Nextcloud_Folder/. /var/www/html/nextcloud/

# oder 

# Ordner aus Backup kopieren mit rsync
sudo rsync -av ~/Nextcloud_Folder/ /var/www/html/nextcloud/
  • a = Kopiert alle Dateien und Verzeichnisse rekursiv und behält die Berechtigungen und den Zeitstempel bei
  • . = Es werden alle Dateien, auch die versteckten, kopiert.
# Rechte der config.php prüfen

ls -lah /var/www/html/nextcloud/config

insgesamt 100K
drwxr-xr-x  2 www-data www-data 4,0K 23. Okt 09:37 .
drwxr-xr-x 16 nobody   nogroup  4,0K 21. Okt 16:27 ..
-rw-r-----  1 www-data www-data 2,3K 23. Okt 09:37 config.php
-rw-r-----  1 root     root     1,1K 23. Okt 09:37 config.php-original
-rw-r--r--  1 nobody   nogroup   80K 17. Okt 12:38 config.sample.php
-rw-r--r--  1 nobody   nogroup   665 17. Okt 12:38 .htaccess

Die Zugriffsrechte werden mit dem Befehl korrekt gesetzt:

sudo chown www-data:www-data /var/www/html/nextcloud/config/config.php

Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


MariaDB - Datenbank Dump erstellen

Der Wartungsmodus der Nextcloud ist zu aktivieren, damit keine Einträge mehr in die Datenbank geschrieben werden können.

# Wartungsmodus AN
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on

Eine Datenbanksicherung kann manuell erstellt werden.

mysqldump -u nextcloud -p nextcloud > nextcloud-dump.sql

Tip

Was ist der Unterschied zwischen > und <?

  • > = Datenbanksicherung erstellen
  • < = Datenbanksicherung einspielen

MariaDB - Datenbanksicherung einspielen

# Wartungsmodus AN
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on

# Apache2 stopp
sudo systemctl stop apache2.service

Datenbank aus Backup herstellen

  1. Bestehende Datenbank löschen
sudo mariadb

MariaDB [(none)]> SHOW DATABASES;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
+--------------------+
4 rows in set (0,002 sec)

MariaDB [(none)]> DROP DATABASE IF EXISTS nextcloud;

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0,001 sec)

MariaDB [(none)]> quit;
  1. Leere Datenbank nextcloud anlegen und Berechtigungen setzen
sudo mariadb

MariaDB [(none)]> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
+--------------------+
4 rows in set (0,001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost;

MariaDB [(none)]> FLUSH privileges;

MariaDB [(none)]> quit;
  1. Datenbank-Dump einspielen

Der Datenbank Dump wird einfach über die CLI eingespielt. Das Aufrufen der MariaDB-Administration ist nicht notwendig.

Der Datenbank-Dump ist auf den Raspberry Pi zu übertragen. Am einfachsten geht vom eigenen Client aus mit SSH und rsync.

Der Befehl zum Einspielen des Datenbank-Dumps:

mysql --user nextcloud --password --force --one-database nextcloud < nextcloud-dump.bak

Das Passwort der Nextcloud-Datenbank ist noch einzugeben.

Ein möglicher Fehler beim Einspielen des Dumps kann sein:

ERROR at line 1: Unknown command '\-'.

Das Problem lässt sich relativ leicht lösen.

  1. Den Dump mit dem Editor nano öffnen
  2. Die erste Zeile entfernen
  3. Die Datei wie gewohnt speichern

Dieser Fehler kann beim Einspielen auftauchen.

ERROR 2006 (HY000) at line 1632: Server has gone away

In die Konfigurationsdatei von MariaDB ist eine weitere Zeile einzufügen.

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf-original
sudo nano /etc/mysql/my.cnf

In der Datei ist am Ende die Zeile (EoF) einzufügen:

[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
max_allowed_packet = 500M

Note

Meine Datenbanksicherung war ~400 MB groß. Die angepassten Werte in der my.cnf haben bei mir zum Erfolg geführt und die ganze Datenbank konnte auf einmal importiert werden. Sollte das nicht möglich sein, ist die Datenbank in kleinere Stücke aufzuteilen und diese dann einzeln nacheinander zu importieren. Die Kopfzeile mit den Metadaten sollte dabei immer erhalten bleiben.

Die Werte können geprüft werden.

sudo mariadb

MariaDB [(none)]> SHOW VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]> SHOW VARIABLES LIKE 'interactive_timeout';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
+---------------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| max_allowed_packet | 524288000 |
+--------------------+-----------+
1 row in set (0.001 sec)

MariaDB [(none)]> quit;
# MariaDB neustarten
sudo systemctl restart mariadb
  1. Kontrolle

Die Tabellen, also der Inhalt, der gerade eingespielten Datenbank lassen sich anzeigen.

sudo mariadb

MariaDB [(none)]> SHOW TABLES IN nextcloud;

MariaDB [(none)]> quit;

Datenverzeichnis aus Backup herstellen

Das Datenverzeichnis ist, wie im Manual beschrieben, einzubinden.

Apache2 ist im Anschluss neu zu starten:

# Apache2 start
sudo systemctl start apache2.service

psudo systemctl status apache2.service

Note

Das Nextcloud-Datenverzeichnis muss eingebunden sein. In der /etc/fstab muss die Zeile vorhanden sein.

sudo mount /mnt/data

Es sind einige Nextcloud-Befehle nach der Wiederherstellung aus einem Backup auszuführen:

sudo -u www-data php /var/www/html/nextcloud/occ maintenance:data-fingerprint
sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-columns
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mimetype:update-db
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mimetype:update-js
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:repair
# Nextcloud Wartungsmodus AUS
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --off

Diese Befehle lassen sich erst starten, wenn der Wartungsmodus beendet wurde.

sudo -u www-data php /var/www/html/nextcloud/occ maintenance:data-fingerprint
sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices

# Nur wenn die Erweiterung Memories installiert ist
sudo -u www-data php /var/www/html/nextcloud/occ memories:index -f
sudo -u www-data php /var/www/html/nextcloud/occ memories:places-setup
sudo -u www-data php /var/www/html/nextcloud/occ preview:generate-all -vvv

Der Import der Places wird ggf. abgebrochen, dann den Befehl einfach nochmal durchlaufen lassen.

Let's Encrypt

Die Let's Encrypt Einstellungen samt den Zertifikaten können aus einem Backup wiederhergestellt werden.

Let's Encrypt - Backup erstellen

Die bestehenden Einstellungen und Zertifikate werden auf dem alten Server in ein tar.gz-Archiv kopiert und auf den eigenen Client oder den neuen Server übertragen.

# Ordner in das Home-Verzeichnis kopieren
sudo cp -r letsencrypt/ /home/benutzer

# tar-Archiv erstellen
sudo tar zpcvf letsencrypt.tar.gz letsencrypt/

# Auf den eigenen Client/Server übertragen
rsync -avhbPz -e ssh letsencrypt.tar.gz destroy@192.168.2.100:/home/benutzer/Downloads/

Let's Encrypt auf neuem Server einspielen

Das tar.gz-Archiv ist auf dem neuen Server angekommen und kann dort an den richtigen Ort kopiert werden.

# Entpacken nach /etc/
sudo tar zxvf /home/benutzer/Downloads/letsencrypt.tar.gz -C /etc

# Aufräumen
sudo rm /home/benutzer/Downloads/letsencrypt.tar.gz

# Die Berechtigungen sind bei Bedarf anzupassen
sudo chown -R root:root /etc/letsencrypt
sudo chmod -R 755 /etc/letsencrypt

sudo certbot renew --dry-run

Es ist darauf zu achten, dass die Einstellungen in der Datei /etc/apache2/sites-available/nextcloud.conf im Abschnitt korrekt sind und auf das richtige Zertifikat verweisen.


Spende

Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Follow Me


Changelog

  • 2025-05-04: Umzug von codeberg-Repository