In diesem Tutorial soll es um den Umzug einer Nextcloud-Instanz auf einen anderen Rechner gehen. Dies kann beispielsweise notwendig sein, wenn man die eigene Cloud zunächst einmal auf einem Raspberry Pi (Affiliate Link) betrieben hat und nach einiger Zeit eine etwas performantere Lösung – z.B. einen Intel NUC (Affiliate Link) – bevorzugen würde.
Das wichtigste bei diesem Vorhaben sollte sein, dass es beim Umzug zu keinem Datenverlust kommt, d.h. dass alle Daten aus der alten Cloud verlustfrei in die neue Installation übernommen werden. Für die Nutzer der Cloud ist nichts ärgerlicher, als ein Datenverlust auf Grund von administrativen Tätigkeiten!
Daher sollte ein Umzug vom Admin sorgfältig geplant und ausgeführt werden.
Vorbereitung
Um einen Umzug vornehmen zu können, sind natürlich erst einmal zwei Rechner (oder auch virtuelle Maschinen) notwendig. Um eine mögliche Fehlerquelle ausschließen zu können, sollten beide Maschinen auch möglichst identisch konfiguriert werden.
Neben der eigentlichen Cloud-Anwendung müssen hier meistens auch weitere Programme bzw. Konfigurationen umgezogen werden. Beispiele hierfür sind:
- Webserver (bzw. die virtuellen Hosts)
- Evtl. vorhandene SSL-Zertifikate (z.B. Let’s Encrypt)
- Redis-Server (für das Transactional File Locking)
- fail2ban
- Evtl. weitere Webanwendungen, die neben Nextcloud ausgeführt werden
Über diese „Seiteneffekte“ des Umzugs sollte man sich am besten bereits vorher Gedanken machen. An dieser Stelle soll es aber nur um den Umzug von Nextcloud gehen. Eine vollständige Beschreibung für alle Programme/Konfigurationen würde den Rahmen des Artikels sprengen.
Zum einfachen Datenaustausch zwischen den verschiedenen Rechnern bietet sich ein Netzlaufwerk (z.B. auf einem NAS) an. Diese wird dann einfach auf beiden PCs gemountet und wird zum „Zwischenlagern“ der Dateien verwendet. In dieser Anleitung ist dieses Netzlaufwerk beispielhaft unter /mnt/Share gemountet (sowohl am Ausgangs-, als auch am Ziel-Rechner).
Der Umzug
Der eigentliche Umzug unterteilt sich in verschiedene Schritte. Bevor man beginnt, sollte man auf jeden Fall ein Backup der laufenden Nextcloud-Instanz anfertigen. Damit ist man immer auf der sicheren Seite, falls etwas schiefgehen sollte.
Ausgangs-Rechner
Folgende Schritte sind auf dem Rechner auszuführen, auf dem die Cloud bisher betrieben wurde.
Maintenance-Modus/Webserver stoppen
Zunächst wird Nextcloud in den sog. Maintenance-Mode versetzt:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode –-on
Dies sorgt dafür, dass keine Verbindungen mehr zu Nextcloud möglich sind. Falls die Cloud von vielen Usern genutzt wird, sollte man erst ein paar Minuten warten, damit sichergestellt ist, das kein aktiver Benutzer mehr an der Cloud angemeldet ist.
Anschließend wird der Webserver gestoppt:
service nginx stop
Sichern der Nextcloud-Dateien
Nun müssen alle Daten gesichert werden, die für den Betrieb von Nextcloud benötigt werden. Dazu gehören immer:
- Die Konfiguration von Nextcloud (config.php), bzw. das komplette Cloud-Webverzeichnis (/var/www/nextcloud)
- Das Datenverzeichnis der Cloud (/var/nextcloud_data)
- Die Nextcloud-Datenbank
Am einfachsten wird das komplette Nextcloud-Verzeichnis umgezogen, dann spart man sich auf dem Ziel-Rechner die manuelle Installation von Nextcloud. Dazu wird das ganze Verzeichnis auf das Netzlaufwerk kopiert:
cd /var/www/ cp -rv nextcloud /mnt/Share/nextcloud
Das gleiche wird mit dem Datenverzeichnis gemacht:
cd /var cp -rv nextcloud_data /mnt/Share/nextcloud_data
Anschließend wird ein kompletter Dump der Datenbank gezogen:
cd /mnt/Share mysqldump --single-transaction -h localhost -u nextcloud_db_user -p nextcloud_db > nextcloud_db_backup.bak
Nun haben wir alle benötigten Daten der alten Cloud-Instanz gesichert und können auf den anderen Rechner wechseln.
Die Maschine, auf der Nextcloud bisher lief, kann nun heruntergefahren werden.
Ziel-Rechner
Nun geht es auf dem Ziel-Rechner weiter, d.h. dem PC, auf dem die Cloud in Zukunft betrieben werden soll.
Achtung: Bevor nicht alle Schritte durchgeführt wurden, sollte nicht versucht werden, auf die Cloud zuzugreifen, da es ansonsten zu Fehlern kommen kann.
Webserver stoppen
Auch auf dem Ziel-Rechner sollte zunächst einmal der Webserver getoppt werden, um einen unbeabsichtigten Zugriff auf die Cloud auszuschließen:
service nginx stop
Wiederherstellen der Nextcloud-Dateien
Dann wird die gesicherte Nextcloud-Installation auf dem Ziel-Rechner wiederhergestellt. Da wir zuvor das komplette Nextcloud-Verzeichnis gesichert haben, kann einfach der komplette Dateibestand auf den Ziel-Rechner kopiert werden:
mkdir -p /var/www cd /var/www/ cp -rv /mnt/Share/nextcloud nextcloud
Um einen komplett sauberen Stand zu erhalten, kann man auch eine „frische“ Nextcloud-Installation vornehmen – analog zum Vorgehen im entsprechenden Tutorial (Abschnitt Einrichtung ownCloud). In diesem Fall muss anschließend nur die Konfigurations-Datei (config.php) aus der alten Cloud-Installation übernommen werden (wichtig!).
Das Datenverzeichnis wird mit folgendem Befehl kopiert:
cd /var cp -rv /mnt/Share/nextcloud_data nextcloud_data
Die Datenbank muss auf dem Ziel-Rechner zunächst neu erstellt werden. Dies geschieht über die MariaDB-Kommandozeile:
mysql -u root -p
Anschließend wird eine leere Datenbank wie gewohnt angelegt. Wichtig an dieser Stelle ist, dass der DB-User und das Passwort die gleichen wie auch dem Ausgangs-Rechner sind.
create database nextcloud_db; create user nextcloud_db_user@localhost identified by 'MeInPasSw0rT'; grant all privileges on nextcloud_db.* to nextcloud_db_user@localhost; flush privileges; exit;
Der letzte Schritt an dieser Stelle ist das Zurückspielen des Datenbank-Dumps in die neu angelegte Datenbank:
cd /mnt/Share mysql -h localhost -u nextcloud_db_user -p nextcloud_db < nextcloud_db_backup.bak
Vor dem „Scharfschalten“ der neuen Cloud sollten die Rechte der entsprechenden Verzeichnisse wieder wie gewohnt gesetzt werden:
find /var/www/nextcloud/ -type f -print0 | xargs -0 chmod 0640 find /var/www/nextcloud/ -type d -print0 | xargs -0 chmod 0750 chown -R root:www-data /var/www/nextcloud/ chown -R www-data:www-data /var/www/nextcloud/apps/ chown -R www-data:www-data /var/www/nextcloud/config/ chown -R www-data:www-data /var/www/nextcloud/themes/ chown -R www-data:www-data /var/nextcloud_data/ chown root:www-data /var/www/nextcloud/.htaccess chown root:www-data /var/nextcloud_data/.htaccess chmod 0644 /var/www/nextcloud/.htaccess chmod 0644 /var/nextcloud_data/.htaccess
Aktivieren der neuen Nextcloud-Instanz
Nun ist es an der Zeit, die neue Cloud in Betrieb zu nehmen.
Erst einmal wird der Webserver gestartet:
service nginx start
Anschließend kann der Wartungsmodus deaktiviert werden:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode –-off
Ein Einloggen mit dem Admin-Account sollte nun problemlos möglich sein. Hier sollte man nochmals kontrollieren, ob alle Daten, Plugins und Einstellungen wie gewünscht übernommen wurden und keine Warnungen in der Administrator-Oberfläche erscheinen. Falls doch, fehlt vermutlich ein Programm, welches auf dem alten Rechner installiert war und auf der neuen Maschine noch fehlt (z.B. bestimmte PHP-Pakete oder auch Redis). Hier sollte es helfen, die fehlenden Programme bzw. Konfigurationen auf dem neuen Rechner nach zu installieren.
Abschlussarbeiten
In einigen Fällen könnten noch Abschlussarbeiten notwendig sein, damit die neue Cloud-Instanz genau so läuft wie die alte Nextcloud-Installation. Dazu gehören beispielsweise:
- Cronjob für Nextcloud einrichten (siehe Tutorial – Abschnitt ownCloud Conjob einrichten)
- Cronjob für Erneuerung der Let’s Encrypt Zertifikate einrichten (siehe Let’s Encrypt Zertifikate per Cron automatisch erneuern)
Die neue Cloud ist fertig
Nach diesen Schritten kann die neue Cloud-Instanz wieder wie gewohnt genutzt werden. Durch den Komplett-Umzug sollten alle Dateien und Daten (Kontakte, Kalender, etc.) übernommen worden sein. Für die Nutzer der Cloud sollte der Umzug (bis auf eine kleine Downtime) vollkommen unbemerkt vonstattengegangen sein.
Weiterführende Artikel
- ownCloud 9 auf Ubuntu Server 16.04 LTS mit nginx, MariaDB, PHP 7 und Let’s Encrypt
- Let’s Encrypt Zertifikate per Cron automatisch erneuern
Hallo Jan,
wie immer klasse.
Wenn man einiges zudem beachtet.
Vielen Dank
Gruß Hans
Eine sehr gute Anleitung. Der Part mit dem Erstellen und Einspielen in MariDB hat mich heute beim Umzug meiner NC gerettet. Gestern bin ich noch verzweifelt. 😉
Hi Jan,
du hast beim setzen der Rechte einen Tippfehler:
chown -R www-data:www-data /var/nex____r____tcloud_data/
Gruß Hendrik
Hi Hendrik,
danke für den Hinweis, habe ich gleich ausgebessert.
Gruß,
Jan
Moin,
ich habe die Anleitung Schritt für Schritt befolgt, jedoch erhalte ich danach lediglich eine leere Seite, wenn ich Nextcloud aufrufen möchte.
Die Konfiguration ist sowohl bei dem Ausgangs- als auch bei dem Zielserver identisch, deswegen kann es daran eigentlich nicht liegen.
Ich verwende Debian 9.3 mit Apache 2.4.25, php 7 und mariadb 10.1.26.
Sofern ich den Maintenance Mode mittels folgendem Befehl ausschalten möchte, erhalte ich diesen Fehler.
Befehl: su -s /bin/sh www-data -c ‚php /var/www/nextcloud/occ maintenance:mode –off‘
Fehler: An unhandled exception has been thrown:
Doctrine\DBAL\DBALException: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user ‚oc_Marcel’@’localhost‘ (using password: YES) in /var/www/nextcloud/lib/private/DB/Connection.php:61
Leider habe ich dazu noch keine passende Lösung gefunden.
Warum Nextcloud hier streikt kann ich nicht verstehen. Ich habe sowohl den gleichen Nutzer für die Datenbank erstellt, als auch die gleichen Rechte verteilt, wie zuvor.
Vielen Dank im voraus
LG Marcel
Hi Marcel,
die Fehlermeldung sagt nur aus, dass er keine Verbindung zur DB aufbauen kann. Normalerweise liegt das dann an einem falschen Passwort. Gibt es hier noch einen erweiterten Output im Nextcloud-Log (z.B. mal mit nano öffnen). Gibt es Logs für den Webserver, in den noch etwas hilfreiches drin steht?
Eine alternative Methode, um den Maintenance zu beenden, ist der entsprechende Eintrag in der config.php. Diesen einfach auf ‚false‘ setzen. Evtl. den Webserver nochmals neu starten und nochmal probieren.
Warum verwendest du eigentlich „su“ und nicht „sudo -u“? Du willst ja nur den einen Befehl als User www-data ausführen. Den User-Context zu wechseln ist da doch etwas viel Overhead, oder?
Gruß,
Jan
Hallo Jan
vielen Dank für die die tollen Anleitungen zum Thema Nextcloud. Ich habe mittels deiner Anleitung meine NC auf einen neuen Server umgezogen und erhalte jetzt 403-Forbidden, wenn ich die Cloud im Browser aufrufe. Irgendwelche Ideen,
Gruß,
Monokular
Hi,
hier hilft nur ein Blick in das error.log von nginx. Hier zeigt er dir an, wo er nach Dateien sucht und diese nicht finden kann.
Das hilft meistens, um die notwendigen Änderungen an den vHosts zu finden.
Gruß,
Jan
ich denke ich habe den Fehler gefunden. ich muss NC über meinedomain.de/nextcloud aufrufen. Bisher konnte ich das mit apache direkt über meinedomain.de
Kann ich das mit dem nginx auch einrichten?
Hi,
ja, hier ist aber eine etwas andere Konfiguration des Webservers notwendig. Ich arbeite gerade an einem Artikel über Nextcloud auf Ubuntu 20.04. Dort wird Nextcloud dann direkt im Webroot von nginx installiert. Wird aber noch ein paar Tage dauern.
Gruß,
Jan
Hallo Jan,
Du setzt am Ende Deiner Anleitung die Rechte für .htaccess Dateien, die aber in keiner Deiner Anleitungen vorkommen.
Kannst Du dazu was sagen?
Viele Grüße
Thomas
Hi Thomas,
ganz Recht: .htaccess ist nur für Apache relevant. Daher spielt da beim Einsatz von nginx keine Rolle.
Die entsprechenden Zeilen sind nur der Vollständigkeit halber mit aufgeführt.
Gruß,
Jan
Mein Server verfugt uber 2 Festplatten. Auf der ersten 250 GB gro?en HDD ist System und eben Nextcloud installiert, die zweite mit einer Kapazitat von 1 TB dient als Datenspeicher. Es ware doch nur folgerichtig, wenn die Daten von Nextcloud ebenfalls auf dem Datengrab gespeichert wurden. Bisher scheute ich diesen Schritt zu gehen, denn bisher bestand keine Notwendigkeit dafur und ich war mir nicht sicher, ob das ohne Komplikationen vor sich gehen wurde. Den rein kosmetischen Grund (Abweichung vom Standard der Installation) lasse ich einmal unberucksichtigt.
Hi,
das kommt immer darauf an, wie viele Daten in der Cloud gespeichert werden sollen. Wenn hier die 250GB knapp werden könnten, dann wäre eine Auslagerung auf die 1 TB Platte durchaus sinnvoll.
Gruß,
Jan
Hallo, vielen Dank für die wunderbare Anleitung. Eine Frage zur MySQL-Datenbank. Muss man hier grundsätzlich ein Dump erstellen oder kann man auch bei gestoppter DB den datadir-Inhalt /var/lib/mysql auf die neue Maschine kopieren? Oder kommt man um das Neuanlegen der DB nicht herum?
Ist ja keine große Sache, aber interessiert mich prinzipiell… Danke und Gruß, Christian
Hi Christian,
du könntest vermutlich auch das Daten-Verzeichnis vom MySQL/MariaDB auf das neue System umziehen. Allerdings ist der Dump hier die sauberere Variante, daher würde ich den Dump immer vorziehen. Damit gehst du sicher, dass du keine „Altlasten“ vom alten System mitnimmst.
Gruß,
Jan