DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Nextcloud: Direkter Zugriff auf Dateien über das Dateisystem

Nextcloud Logo

Heute gibt es einen praktischen Tipp für Nextcloud: Der Artikel zeigt, wie man einen direkten Zugriff auf Cloud-Dateien direkt über das Dateisystem realisieren kann, ohne den Umweg über die Weboberfläche von Nextcloud oder WebDAV nehmen zu müssen.

Das Datenverzeichnis von Nextcloud

Bei der Installation von Nextcloud wird während des Setups das Datenverzeichnis der Cloud angegeben. Das ist ein lokales Verzeichnis, in dem u.a. die Daten gespeichert werden, die die Benutzer in die Cloud hochladen.

Der Zugriff die diese Dateien erfolgt dann üblicherweise über die Weboberfläche von Nextcloud. Alternativ kann auch per WebDAV auf die Cloud-Dateien zugegriffen werden, indem z.B. ein WebDAV-Netzlaufwerk unter Windows eingebunden wird.

Eine Anforderung könnte nun sein, dass ein direkter Zugriff auf die Nextcloud-Daten über das Dateisystem möglich sein soll. Auch wenn man nicht direkt Dateien auf dem Server kopieren/verschieben wird, ist diese Szenario durchaus relevant: Eine Freigabe per Samba oder FTP ist relativ schnell eingerichtet, da könnte man auf die Idee kommen, einfach das Nextcloud-Datenverzeichnis auf diese Art zugänglich zu machen. Anschließend könnte man nun Daten z.B. per Netzwerkfreigabe oder FTP ins Datenverzeichnis von Nextcloud transferieren. Diese sollten dann auch automatisch in der Weboberfläche von Nextcloud auftauchen, oder?

Leider ist die Sache nicht ganz so einfach. Wenn man versucht, Dateien auf diese Art Nextcloud „unterzujubeln“, dann wird man diese in der Weboberfläche nicht zu sehen bekommen. Die Begründung dafür ist recht einfach: Jede Datei und jedes Verzeichnis besteht nicht nur aus einem Eintrag im Dateisystem, sondern auch aus einem Eintrag in der Datenbank von Nextcloud. Ist die Datei nun auf dem Dateisystem vorhanden, aber es existiert kein Eintrag in der Datenbank, dann ist diese Datei für Nextcloud quasi nicht vorhanden.

Da dies nicht automatisch funktioniert, muss man nun Nextcloud veranlassen, das ganze Datenverzeichnis nach neuen und geänderten Dateien zu durchsuchen. Dazu bemühen wir einfach occ:

Je nach Umfang der Cloud kann dieser Befehl einige Zeit in Anspruch nehmen, aber nach dem Scan sind nun auch Dateien sichtbar, die man einfach manuell über das Dateisystem zum Datenverzeichnis hinzugefügt hat.

Für die Praxis ist dies leider keine gute Lösung, da man nun den Scan-Vorgang immer wieder anwerfen muss, wenn Dateien „hinten rum“ in das Datenverzeichnis kopiert wurden.

Die bessere Lösung: Verwendung von externem lokalem Speicher

Nextcloud überwacht sein Datenverzeichnis als nicht von selbst auf geänderte Dateien. Diese Option ist allerdings bei externem Speicher verfügbar. Hier kann man Nextcloud anweisen, bei jedem aktiven Zugriff auf neue und geänderte Dateien zu achten. Genau diese Option machen wir uns nun zu Nutze, damit man Dateien auch direkt über das Dateisystem der eigenen Cloud hinzufügen kann.

Lokalen externen Speicher einbinden

Zum Einbinden von lokalem externen Speicher benötigen wir erst einmal ein Verzeichnis auf dem lokalen Dateisystem, auf das Nextcloud (d.h. der Webserver-Benutzer) zugreifen kann:

Auch PHP braucht natürlich Zugriff auf dieses Verzeichnis, so dass wir noch die Variable open_basedir anpassen müssen.

Für PHP FPM muss dazu der virtuelle Host für Nextcloud (siehe hier) modifiziert werden. Das soeben angelegte Verzeichnis wird bei fastcgi_param PHP_VALUE einfach bei open_basedir hinzugefügt. Der komplette Block kann dann z.B. so aussehen.

Damit auch der Cronjob von Nextcloud Zugriff auf das Verzeichnis hat, wird dieses ebenfalls in der entsprechenden php.ini Datei unter open_basedir hinzugefügt:

Der Eintrag kann hier z.B. dann so aussehen:

In den Einstellungen von Nextcloud kann dieses Verzeichnis nun als externer lokaler Speicher eingebunden werden. Dies kann jedoch nur in den Admin-Einstellungen erfolgen, da Benutzer nicht selbst externen lokalen Speicher einbinden können.

Nextcloud: Lokalen externen Speicher einbinden

Nextcloud: Lokalen externen Speicher einbinden

Folgende Optionen sind hier wichtig:

  • Ordnername: Kann beliebig vergeben werden. In der Dateiübersicht von Nextcloud erscheint der externe Speicher dann unter diesem Namen.
  • Konfiguration: Hier ist der Order auf dem lokalen Dateisystem anzugeben. In diesem Beispiel also /var/nextcloud_external_data.
  • Verfügbar für: Hier werden die Benutzer/Gruppen hinterlegt, für die der externe Speicher zugänglich sein soll.
  • Auf Änderungen prüfen: Diese Einstellung verbirgt sich in den erweiterten Optionen (Menü mit drei Punkten). Wichtig ist hier die Angabe Einmal bei jedem Direktzugriff.

Nach dem Speichern der Einstellungen sollte der externe Speicher erfolgreich eingebunden worden sein.

Hinzufügen von Dateien direkt über das Dateisystem

Durch die Option, dass Nextcloud den soeben eingebundenen externen Speicher bei jedem Zugriff auf Änderungen durchsuchen soll, können nun einfach Dateien über das Dateisystem hinzugefügt werden. Für einen schnellen Test legen wir einfach eine einfache Textdatei an:

Der Inhalt spielt für den Funktionstest keine Rolle, daher einfach irgendwas eingeben und die Datei speichern.

Wenn man nun wieder über die Nextcloud-Oberfläche im Browser das Verzeichnis des externen Speichers öffnet, wird die neu erzeugte Datei von Nextcloud erkannt und kann auch direkt bearbeitet werden.

Der nächste Schritt würde nun darin bestehen, einen „Direktzugriff“ auf das Verzeichnis des externen Speichers zu legen, beispielsweise per Samba-Freigabe oder auch per FTP.

Anschließend hat man einen direkten Zugriff auf die Dateien von Nextcloud (zumindest auf jene, die auf dem externen lokalen Speicher liegen).

Aus der Praxis – OCR von gescannten Dokumenten

Nun fragt sich der eine oder andere sicher: „Was bringt mir das?“

In der Praxis hat sich bei mir das gezeigte Vorgehen bei der Verwaltung von (gescannten) Dokumenten bewährt.

Dazu habe ich zwei lokale externe Speicher eingebunden: Scan Eingang und Dokumente Eingang. In das Verzeichnis Scan Eingang werden nun Dokumente oder Bilder gespeichert, die vom Scanner erfasst wurden (z.B. als PDF). Diese Dokumente besitzen noch keinen Text-Layer (OCR).

Um diesen Text-Layer hinzuzufügen nutze ich nun das Script OCRmyFiles. Details zu diesem Script habe ich bereits im Artikel Linux: OCR-Texterkennung für PDF-Dateien und Bilder beschrieben. Dieses Script wird nun regelmäßig per Cronjob aufgerufen (z.B. alle 30 Minuten). Das Script ist so konfiguriert, dass es als Eingangs-Verzeichnis den Order /var/nextcloud_external_data/scan_eingang nutzt (Eingebunden als Order Scan Eingang in Nextcloud). Als Ausgabeordner nutze ich /var/nextcloud_external_data/dokumente_eingang (In Nextcloud als Dokumente Eingang eingebunden).

Nun sorgt das Script dafür, dass Dokumente ohne Text-Layer erfasst werden, per OCR mit Text versehen werden und anschließend in den Order Dokumente Eingang in der eigenen Cloud verschoben werden.

Das ganze wäre nicht möglich, wenn die OCR-Dokumente direkt in das Nextcloud-Datenverzeichnis verschoben werden würden. Erst durch die Nutzung von lokalem externen Speicher bekommt Nextcloud mit, dass im Ordner Dokumente Eingang neue gescannte Dokumente mit Text-Layer verfügbar sind.

Zu guter Letzt werden die Dokumente dann vom Ordner Scan Eingang dann in den jeweils passenden Order verschoben (über die Weboberfläche von Nextcloud).

Fazit

Der direkte Zugriff auf Nextcloud-Dateien über das Dateisystem mag zunächst nicht sonderlich aufregend klingen. In der Praxis merkt man allerdings schnell, dass das Nextcloud-Datenverzeichnis nicht aktiv auf Änderungen überwacht wird.

Der kleine Umweg über lokalen externen Speicher lohnt allemal: Damit wird es zum einen möglich, dass Benutzer Dateien direkt über eine Samba-Freigabe oder auch FTP der Cloud hinzufügen können. Zum anderen eröffnen sich dadurch auch weitere Möglichkeiten, die Cloud-Infrastruktur durch Scripte, o.ä. für Automatisierungen zu nutzen.

Weiterführende Artikel

Links

, , , , , ,

Kommentare: 5

  • Lorenzo sagt:

    Danke für die Anleitung Jan!

    In Eigenregie hab ich, nachdem ich Ubuntu neu installiert hab und mich dann an deine Anleitung gehalten hab, inzwischn eine Nextcloud Installation in meiner VM bei der ich die Daten in einem SMB Share auch als Netzwerklaufwerk zur Verfügung gestellt hab.

    Das läuft quasi analog wie hier von dir beschrieben.

  • Rainer sagt:

    Hallo Jan,
    ein kleiner Fehler dürfte dir in der Beschreibung unterlaufen sein. Der Eintrag bei fastcgi_param PHP_VALUE ist ja nicht im Gateway zu finden, sondern im Virtuellen Host von Nextcloud.
    Dennoch hab ich eine Frage/Problem mit den Dateirechten. Obwohl die beiden zuvor angelegten Verzeichnisse dem user www-data gehört, hab ich in der NC-Weboberfläche nur Leseberechtigung. Woran kann das liegen ?
    Dateirechte meiner Testdatei
    -rw-r–r– 1 www-data www-data 2165141 Jan 23 23:13 /var/nextcloud_external_data/ /dokumente_eingang/Test.txt

    • Jan sagt:

      Hi Rainer,

      danke für den Hinweis, habe das im Artikel schnell geändert.
      Die Datei-Rechte sehen eigentlich gut aus, es sollte auch ein schreibender Zugriff möglich sein. Setz doch testweise die Dateirechte mal auf 777. Wenn es dann immer noch nicht geht, dann muss es an etwas anderem liegen.

      Gruß,
      Jan

      • Rainer sagt:

        Hallo Jan,
        auch die Änderung der Dateirechte auf 777 bringt keine Änderung. Bei einer über das NC-Webinterface erstellte Datei hab ich zwar Lese-und Schreibrechte, allerdings ist mir dabei aufgefallen, dass ich aus diesem Ordner auch nicht teilen kann.
        Im „scan_eingang“ dito, allerdings kann ich da die Dateien teilen.
        Vermute mal, dies hängt alles zusammen, aber lässt dies eine Vermutung bei dir zu, wo ich einen „Schnitzer“ in meine config reingebracht habe ?

        gruss Rainer

        • Jan sagt:

          Hi Rainer,

          also aus einem externen Speicher kannst du Teilen, aus dem anderen nicht? Ich würde da zunächst versuchen, die externen Speicher wieder zu entfernen und neu hinzuzufügen.
          Ansonsten: Wenn du Teilen willst, erscheint dann eine Meldung im Nextcloud-Log?

          Gruß,
          Jan

Schreibe einen Kommentar

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