Geteilte Ordner in Nextcloud – ein Methodenvergleich

Letztens hatte ich Probleme mit Ordnern in Nextcloud, die ich für mehrere Benutzer teile. Deswegen hier eine kleine Zusammenfassung von meinem Problem, den möglichen Lösungen und die Lösung für die ich mich schlussendlich entschieden habe.

Problemstellung

Mehrere Nutzer sollen in der Nextcloud auf einen gemeinsamen Ordner zugreifen können – mit Lese- und Schreibrechten sowie der Möglichkeit, diesen Ordner per Nextcloud-Client lokal zu synchronisieren.

Mögliche Lösungsansätze

Bei diesen Lösungsansätzen sind auch welche dabei, die nicht sonderlich sinnvoll sind. Ich liste sie jedoch trotzdem auf, um zu zeigen, was alles möglich ist.

Lösungsansatz 1 (nicht zielführend)

Eine simple aber speicheraufwändige Lösung wäre es jedem Benutzer einen Ordner zu geben, der gleich heißt und die Dateien zwischen den Ordnern zu synchronisieren. Falls also Benutzer 1 in seinem Ordner eine Datei hinzufügt, wird diese in den Ordner aller anderen Benutzer kopiert.

Nachteile:

  • Wenn mehrere Benutzer gleichzeitig an einer Datei arbeiten ist es schwer zu entscheiden, welche Version der Datei übernommen werden soll

  • Es muss dauerhaft ein Script überprüfen, ob Dateien hinzugefügt/gelöscht oder verändert wurden

Lösungsansatz 2 (meine erste Lösung)

Die Benutzerdaten liegen in einem ZFS-storage auf dem Proxmox host. Wie diese ZFS-Struktur aussieht habe ich hier beschrieben. Jeder Benutzer hat einen Ordner in diesem ZFS, in dem die Daten liegen.

TEXT
/datapool
└── user_data
    ├── Benutzer1
    │   ├── Privater Ordner
    │   ├── ...
    │   └── Geteilter_Ordner1
    ├── Benutzer2
    │   ├── Privater Ordner
    │   ├── ...
    │   └── Geteilter_Ordner1
    ├── Benutzer3
    │   ├── Privater Ordner
    │   ├── ...
    │   └── Geteilter_Ordner1
    └── Geteilter Ordner
        └── Geteilter_Ordner1

Die geteilten Ordner liegen in einem getrennten Ordner in dem ZFS.

Jetzt wird dieser Geteilter_Ordner1 bei jedem Nutzer per Bind-Mount unter /datapool/user_data/Benutzerx/Geteilter_Ordner1 eingehängt. Dadurch haben alle Benutzer immer die gleichen Daten in ihrem Ordner.

Das Problem daran: Die Nextcloud hat das kleine Problem, dass sie ihre Verzeichnisse nicht automatisch auf neue Dateien scannt. Wenn jeder Nutzer seine eingenen Ordner hat ist das auch nicht schlimm. Die Nextcloud erkennt, wenn ein Benutzer einen neuen Ordner/eine neue Datei bei sich anlegt.

Wenn jetzt jedoch ein Benutzer in den Geteilten Ordner eine Datei anlegt, sehen es die anderen Benutzer nicht, weil die Nextcloud bei diesen den geteilten Ordner nicht auf Veränderungen prüft.

Die Nextcloud hat da das Schema: Wenn ein Benutzer keine Änderungen an seinen Dateien vornimmt, gibt es an diesen auch keine Veränderungen!

Lösung: Es gibt einen Befehl mit dem man das Dateisystem in der Nextcloud auf neue Files scannen kann:

BASH
sudo -u www-data php /var/www/nextcloud/occ files:scan --all

Auch wenn nur die geteilten Ordner auf Veränderungen gescannt werden, dauert dies bei großen Ordnern und vielen Benutzern so lange, dass automatische Scanns in kurzen Zeitabschnitten unmöglich werden und so die Benutzer lange auf die geteilten Dateien warten müssen.

Lösungsansatz 3: (wird schon besser!)

Es ist möglich External Storage in die Nextcloud einzubinden. Wenn sich in diesen etwas ändert, bekommt die Nextcloud das sofort mit. Es muss auch nichtmehr, wie in Lösungsansatz 2, bei jedem Benutzer die geteilten Ordner einzeln in die Filesysteme eingehängt werden. Dieser Externe Speicher wird über die Administratoreneinstellungen eingebunden und für beliebige Benutzer verfügbar gemacht. Konfigurationsseite in den Administrationseinstellungen

Nachteil: Der große Nachteil dabei ist, dass der Nextcloud-Client das Synchronisieren von Externen Speichern nicht ermöglicht. Wenn also dieser auch lokal auf dem Benutzergerät synchronisiert werden soll, ist diese Lösung auch nicht die beste.

Lösungsansatz 4: (meine momentane Lösung)

Es gibt eine in die Nextcloud integrierte Lösung für dieses Problem: die App Group Folders. Mit dieser App kann man auch Ordner erstellen und diese mit verschiedenen Nutzern teilen. Auch diese Ordner erkennen, wie External Storage auch, Änderungen verschiedener Benutzer und zeigt diese Änderungen allen andern Benutzern an. Wie External Storage auch konfiguriert man diese Ordner auch in den Administratoreinstellungen der Nextcloud. Konfigurationsseite in den Administrationseinstellungen

Anders als bei Lösungsansatz 3 kann man bei Group Folders für jeden Benutzer, jede Gruppe die Berechtigungen auch voneinander getrennt einstellen. Berechtigungen der Gruppe family

Auch die Ordnerstruktur in der Nextcloud direkt ist ziemlich simpel. Die Daten in diesen Ordnern werden unter \data\__groupfolders gespeichert. Das ermöglicht einen simplen bind in den groupfolder Ordner. Der einzige Nachteil ist, dass die Gruppenordner als aufsteigend nummerierte Unterordner in __groupfolders gespeichert werden, was bei vielen Ordnern die Übersichtlichkeit erschwert.

Fazit

Abschließend würde ich sagen, dass die einzigen zwei sinnvollen Lösungsansätze Nummer 3 und 4 sind. Weil beide Lösungen ungefähr gleich aufwändig sind in der Konfiguration würde ich Lösungsansatz 4 empfehlen, weil dieser alle Vorteile von Lösungsansatz 3 hat, aber die Berechtigungen der Benutzer besser einstellbar sind und es beim Synchronisieren der Daten per Nextcloud client zu keinen Problemen kommt.