Nextcloud auf anderen Rechner umziehen

Nextcloud Logo

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:

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

Links

16 Kommentare zu „Nextcloud auf anderen Rechner umziehen“

  1. 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

    1. 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

  2. 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

    1. 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

      1. 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?

        1. 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

  3. 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

    1. 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

  4. 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.

    1. 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

  5. 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

    1. 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

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert