Import Nextcloud-Daten von anderem Server

Guten Morgen,
ich habe vor einigen Tagen UCS u.a. mit Nextcloud aufgesetzt und nach einigem Hin und her läuft soweit alles rund.

Nun stehe ich vor dem Problem, dass ich meinen bisherigen NextCloud-Server (vorkonfigurierte VM mit Ubuntu 18.04 LTS von techandme.se) auf den in UCS migrieren möchte.

Was mir hierzu aber fehlt, ist eine ausagekräftige Anleitung für den Import:
Nextcloud beschreibt zwar auf den Supportseiten sehr ausführlich, wie man Backup und Restore durchführt, sicher ist auch die Beschreibung des Restore weitgehend nutzbar, nur läuft auf dem UCS-System Nextcloud im Docker, was unterschiedliche Verzeichnis- und Konfigurationseinstellungen zur Folge hat. .

Im Zuge meiner Recherchen kamen nun einige Fragen auf:

1.
In welches Verzeichnis musst ich denn die gesicherten Daten importieren? - Reicht es, sie einfach mit rsync/scp nach
/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/
bzw.
/var/lib/univention-appcenter/apps/nextcloud/data/nextcloud-data
zu verschieben?

2.
Welche Angaben muss ich aus der bisherigen config.php aus das UCS-System anpassen?
Beispiel:
php.ini auf UCS:

  'datadirectory' => '/var/lib/univention-appcenter/apps/nextcloud/data/nextcloud-data',
  'dbtype' => 'pgsql',
  'version' => '15.0.7.0',
  'overwrite.cli.url' => 'https:/meinserver.de/nextcloud',
  'dbname' => 'nextcloud',
  'dbhost' => '172.17.42.1',
  'dbport' => '5432',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nextcloud',
  'dbpassword' => 'mein passwort auf UCS'

die php.ini auf dem alten System:

  'datadirectory' => '/mnt/ncdata',
  'overwrite.cli.url' => 'https://nextcloud.kmvw-io.de/',
  'dbtype' => 'pgsql',
  'version' => '15.0.7.0',
  'dbname' => 'nextcloud_db',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'ncadmin',
  'dbpassword' => 'mein Passwort auf altem System',

Welches Passwort wird zum Beispiel zum und nach dem Import verwendet?
Was ist mit dem ‘passwordsalt’ und "secret’ ganz oben in der config.ini?
Weiter habe ich die php.ini’s nicht auf “Ungereimtheiten” untersucht, aber das dürften nicht alle sein.

3.
Auf dem alten System heißen die vom System vergebenen Benutzer anders, als auf dem neuen (“ncadmin” vs “nc_admin” und “administrator”) - wie sorge ich dafür, dass es da keine Probleme mit dem LDAP gibt?

4.
Ist es denn überhaupt noch möglich, die Daten und Einstellungen verlustfrei von einem Stand-Alone-System in UCS zu importieren?

5. Edit konnte ich inzwischen herausfinden (siehe unten)
Wie gehe ich mit der Netxcloud-Administration auf der Kommandozeile um?
Auf der Ubuntu-Installation war es einfach:

sudo -u www-data php occ maintenance:mode --on

unter UCS muss das wohl anders gehandhabt werden (nur habe ich keine Doku hierzu gefunden), denn:

root@ucs:/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html# sudo -u www-data php occ maintenance:mode --on
PHP Warning:  require_once(/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/console.php): failed to open stream: Permission denied in /var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/occ on line 11
PHP Fatal error:  require_once(): Failed opening required '/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/console.php' (include_path=':/usr/share/kopano/php') in /var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/occ on line 11sudo -u www-data php occ maintenance:mode --on
PHP Warning:  require_once(/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/console.php): failed to open stream: Permission denied in /var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/occ on line 11
PHP Fatal error:  require_once(): Failed opening required '/var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/console.php' (include_path=':/usr/share/kopano/php') in /var/lib/docker/overlay/28673f7577b01ef365f389210f8f3e14e50d85b649bbb06cbc46b1f3e1d71d78/merged/var/www/html/occ on line 11

Punkt 5 konnte ich inzwischen lösen, nachdem ich im Wiki unter UCS 4.0 die benötigten Befehle durch Zufall gefunden habe:
In der Bash von UCS eingeben:

root@ucs:/# docker ps
CONTAINER ID        IMAGE                                              COMMAND                  CREATED             STATUS              PORTS                   NAMES
2eacf5e3d1a2        docker.software-univention.de/nextcloud:15.0.7-0   "/bin/sh -c /usr/s..."   13 days ago         Up 3 days           0.0.0.0:40000->80/tcp   fervent_jennings

Die Container-ID benötigen wir für den nächsten Befehl:

docker exec -it 2eacf5e3d1a2 /bin/bash

und schon gelangen wir in die Bash des NextCloud-Containers:

root@nextc-29272196:/# cd var/www/html/
root@nextc-29272196:/var/www/html# sudo -u www-data php occ maintenance:mode --on
Maintenance mode enabled
root@nextc-29272196:/var/www/html#

6.
Wie greife ich auf die Nextcloud-Datenbank zu?
Es fehlen die Befehle, um z.B. die Nextcloud-Datenbank zu importieren.

“pg_dump” und “psql” zum Beispiel fehlen offenbar im Nextcloud-Container.
Wie installiere ich die fehlenden Module? - Über apt-get oder UCS Paketverwaltung? - Ist überhaupt im Nextcloud-Container eine Datenbank vorhanden oder liegt sie in UCS?
Oder ist es keine Postgres-DB? MariaDB scheint auch nicht im Nextcloud-Container installiert zu sein und sqlite3 auch nicht.
NextCloud schreibt, dass sie vor einiger Zeit auf Postgres umgestellt hatten.

Leider scheint jedwede Dokumentation zu fehlen, die auf Besonderheiten und systembedingte Abweichungen der Nextcloud - Installation im Docker hinweist.


Es geht hier zwar nur um zwei User auf dem System, aber die Nextcloud-Daten werden mit über 10 Endgeräten (Laptops, Smartphone, Tablets) synchronisiert, wobei zahlreiche Synchronisationen (teilweise nur einmalig) nur in eine Richtung möglich sind, wie Kamerabilder auf Smartphones. - Darum verbietet sich eine “Migration durch Synchronisieren der Endgeräte am neuen Server”, zumal hier tausende an Doubletten xxxx.conflict entstehen würden.

Anmerkung zum Wiki:
Leider wird in oben verlinkten Wiki-Artikel keine eindeutige Sprache verwendet. Die “Container-ID” aus dem “docker ps” - Befehl wird zum Beispiel im “docker exec”-Befehl als “member” erwähnt. - So ist das Wiki keine große Hilfe.

Hier eine Beschreibung, wie die Migration bei mir geklappt hat
Ich übernehme jedoch keine Garantie, dass es in allen Fällen so funktioniert

Mit der Anleitung von Nextcloud hat es nicht funktioniert. Alleine schon die Tatsache, dass unterschiedliche Adminkonten (“ncadmin” vs “administrator” und “nc_admin” haute nicht hin. Mangels Anleitung wusste ich auch nicht, an welchen Stellen die config.php zu ändern war und das Erzeugen einer neuen Nextcloud-Datenbank - wie in den Anleitungen im Netz (Beispiel und bei Nextcloud) zu lesen war - ging mangels ausreichender Kenntnisse und fehlenden Hinweisen auf Benutzerkonto und Passwort kläglich in die Hose.

Mir war das ganze dann zu dumm und ich habe die UCS - VM wieder auf den Zustand vor dem Migrationsversuch zurück gesetzt.
Anschließend war erst einmal das obligatorische Backup aller betroffenen Rechner (Server, Clients) fällig. Besonders der Arbeitsplatzrechner sollte ein Komplett-backup erfahren, damit im Falle des Fehlschlagens ein Zurück auf den alten Nextcloud-Rechner ohne Datenverlust möglich ist!)

Danach bin ich wie folgt vorgegangen und habe nur die Dateien übertragen:

  • auf UCS-Server den Dienst sshd gestartet
  • auf Nextcloud (alt) mit sudo -i als root angemeldet
  • in das Verzeichnis /mnt/ncdata gewechselt (dort liegen bei meiner Installation die Benutzerdaten)
  • Kopieren aller Benutzerdateien pro Benutzer
    scp -rp <benutzerverzeichnis>/* root@<IP-Adresse des UCS-Servers>://var/lib/univention-appcenter/apps/nextcloud/data/nextcloud-data/<benutzerverzeichnis>
    (-r = rekursiv, -p=preserve date/time)
  • auf UCS-server (neu) in das Nextcloud-Datenverzeichnis wechseln:
    cd /var/lib/univention-appcenter/apps/nextcloud/data/nextcloud-data
    chown -R www-data.www-data *
  • Als nächstes die Nextcloud-Datenbank neu füllen durch Einlesen der Dateien. Hierzu stehen zwei Varianten zur Auswahl:

Variante 1:
Um in den Nextcloud-Docker zu gelangen, führt man den Befehl
docker ps
aus. Als Ausgabe erhält man z.B.:

CONTAINER ID        IMAGE                                              COMMAND                  CREATED             STATUS              PORTS                   NAMES
c7dc0142c037        docker.software-univention.de/nextcloud:15.0.8-0   "/bin/sh -c /usr/s..."   14 hours ago        Up 14 hours         0.0.0.0:40000->80/tcp   angry_sammet
  • Die Container-ID benötigen wir im nächsten Schritt:
    root@ucs:/# docker exec -it c7dc0142c037 /bin/bash
  • Anschließend in das Nextcloud “Programmverzeichnis” wechseln:
    root@nextc-29272196:/# cd /var/www/html/
  • Mit dem Tool “occ” füllen wir die Datenbank mit den Dateieinträgen (ich habe es pro Benutzer durchgeführt):
    sudo -u www-data php occ files:scan --path <benutzerverzeichnisname> (ohne Pfadangabe)
    Bei 18GB dauerte es in meiner VM knapp 1,5 Minuten.
  • Sicherheitshalber habe ich die Indizes neu erstellen lassen:
    sudo -u www-data php occ db:add-missing-indices

Variante 2:
(danke an Moritz_Bunkus - siehe nächsten Beitrag)

  • univention-app shell nextcloud sudo -u www-data php /var/www/html/occ files:scan --path <benutzerverzeichnisname>
    gefolgt von:
  • univention-app shell nextcloud sudo -u www-data php /var/www/html/occ db:add-missing-indices

Danach geht es für beide Varianten ab hier weiter:

  • Anschließend über die Univention-Oberfläche Nextcloud aufrufen und als erst als Administrator anmelden.

  • Unter “Einstellungen”-“Grundeinstellungen” -“Dateibehandlung” die “Maximale Upload-Größe” heraufsetzen. Der Wert muss größer sein, als der größte importierte Ordner mit Inhalten.
    Nach den Initial-Synchronisationen aller Endgeräte kann man den Wert wieder herabsetzen.

  • In Nextcloud abmelden und als Benutzer anmelden.
    Unter “Dateien” sollten hier jetzt alle importierten Dateien und Ordner sichtbar sein.

  • Probehalber in verschiedene Unterordner wechseln und dabei beachten, dass nicht unter dem blauen Menübalken kurz “Sie haben keine Berechtigungen, Dateien hochzuladen” eingeblendet wird.
    In diesem Fall noch einmal die Zugriffsrechte im Benutzerordner kontrollieren.
    Dateien müssen die Berechtigung:
    -rw-r--r-- 1 www-data www-data
    und Ordner
    drwxr-xr-x 4 www-data www-data
    haben.

Passt alles, wird es jetzt spannend. Ich hatte mein Notebook mit Windows 10 das letzte Mal drei Tage vor der Migration (nur Dateien, keine Kalender und Kontakte) abgeglichen.
Jetzt wird das Notebook (in meinem Fall mit Windows 10) vom alten Nextcloud-Server auf Nextcloud auf den UCS-Server umgestellt.

  • Hierzu auf dem Arbeitsplatzrechner Nextcloud beenden.
    In den Ordner C:\Benutzer<konto>\AppData\Roaming\Nextcloud wechseln (auf älteren Systemen kann es auch C:\Benutzer<konto>\AppData\Local\Nextcloud sein)
    (Ordner “AppData” ist standardmäßig unsichtbar)
    Die Datei Nextcloud.cfg mit dem Editor öffnen

    • Im Abschnitt “[General]” auf folgende Einstellung ändern:
      useNewBigFolderSizeLimit=false
    • Im Abschnitt “[Accounts]” muss geändert werden:
      0\url=https://nextcloud.alt.de
      auf:
      0\url=https://ucs.neue.domain/nextcloud
      Muss auch ein Port angegeben werden, dann z.B.:
      0\url=https://ucs.neue.domain:8443/nextcloud
    • Darauf achten, dass
      0\serverVersion=xx.y.z
      mit den tatsächlichen Gegebenheiten übereinstimmt.
  • Nextcloud.cfg speichern und Nexcloud auf dem Arbeitsplatzrechner starten.

  • Nach einer erforderlichen Neuanmeldung wurde die Synchronisation sofort gestartet.
    Eventuell wird man gefragt, ob man die Dateien behalten oder löschen will - ich wählte “Dateien behalten” und daraufhin wurde die Synchronisierung nach Vergleichen der Dateien mit dem grünen Haken in der Anzeige erfolgreich beendet. Da der Datenbestand auf dem Arbeitsplatzrechner drei Tage alt war, wurden die Änderungen problemlos synchronisiert.

Auf meinem Laptop hat die Umstellung auf Anhieb geklappt.

Spannend wird es noch mit meinem Smartphone. Dort dürfte es vielleicht nicht so geschmeidig ablaufen.

Edit: Ging entspannter, als befürchtet.
Einfach in der Smartphone Nextxloud-App ein zweites Profil mit Login-Daten auf die UCS-Nextcloud-Instanz erzeugen und unter “Automatisches Hochladen” die gleichen Einstellungen vornehmen, wie im alten Profil.

Lediglich bei Kontakten und Kalendereinträgen - soweit sie in Nextcloud gespeichert sind - ist eine neue Zuweisung auf die neue Nextcloud-Installation vorzunehmen (Kontakte) bzw. die Kalendereinträge in den neuen Nexcloud-Kalender zu kopieren.
Dabei auch darauf achten, dass in der Smartphone-App der Synchronisationszeitraum von 90 Tage (default) auf einen längeren Zeitraum ändert, um alle benötigten Termine zu synchronisieren.

Auch die Migration weiterer Benutzer klappte in der o.a. Methode einwandfrei.

Noch ein Tipp:
sollte beim Hochladen neuer Dateien ein “HTTP-ERROR 403 … Forbidden (Sabre\DAV\Exception\Forbidden)” auftreten, erst überprüfen, ob die Dateiberechtigungen der Ordner auf “www-data.www-data” stehen. Ist dies der Fall, schafft ein erneuter Aufruf der Nextcloud-Instanz im docker und der Befehl

sudo -u www-data php occ files:scan --path <benutzerverzeichnisname>

(ohne Pfadangabe)
bzw.
univention-app shell nextcloud sudo -u www-data php /var/www/html/occ files:scan --path <benutzerverzeichnisname>
Abhilfe.

3 Likes

Für die Zukunft: für den Schritt, eine Shell in einem Docker-Container einer App zu starten, gibt es glücklicherweise einen Shortcut: univention-app shell <appname> [command], also univention-app shell nextcloud zum Starten einer Shell oder z.B. univention-app shell nextcloud sudo -u www-data php /var/www/html/occ files:scan --path … zum einmaligen Ausführen eines Befehls im Container.

Danke für den Tipp, ich habe Deinen Hinweis in meinem Beitrag ergänzt.

Hallo Zusammen

Gibt es hierzu ev. eine Anleitung wie die Migration noch einfacher funktioniert, wenn ich nur von einem Univention Corporate Server der gleichen Domäne auf einen neuen Univention-Memberserver migrieren will?