Schnittstelle zwischen Linux und NextCloud

Hallo,

ich habe auf einem virtuellen Strato-Server die NextCloud laufen. Der Browser-Zugang und die Synchronisation mit meinem lokalen Laptop (auch Ubuntu-Linux) laufen ohne Probleme.

Auf dem gleichen Server habe ich Programme (Python-Skripte) laufen, die PDF-Dateien erzeugen, die ich über die NextCloud anderen Usern zur Verfügung stelle. Dafür binde ich auf dem Server die NextCloud über WEBDAV ein (mount …). Das funktioniert auch - leider aber nur im Prinzip. In der Praxis dauert das mount extrem lange (etliche Minuten oder noch länger).

Gibt es eine Alternative?

Kann man das Synchronisations-Tool auch dann auf einem Server installieren, wenn dort kein Desktop zur Verfügung steht?

Mit Dank für jeden Hinweis
Ulrich

du hast mehrere Optionen (die Frage kommt regelmässig auf)…

  • es gibt einen CLI client
  • du kannst im NC “external storage” einbinden (sollte vom NC regelmässig gescannt werden)
  • du kannst Dateien ins NC Filesystem schreiben und occ files:scan ausführen
  • du kannst die files in eine Freigabe hochladen

und ausserdem sollte WebDAV local auch gut laufen - eventuell hast du Prbleme mit DNS, IPv4/IPv6 - versuche localhost oder fqdn (je nach dem) zu nutzen, hosts_file zu bearbeiten usw… und den Provider Support fragen was der fehler sein könnte…

PS: external storage macht die Weboberfläche langsam

1 Like

Er nennt sich nextcloudcmd. Du kannst ja mal danach suchen. Ich verwende ihn aber nicht.
Das Debian- und Ubuntu-Paket nennt sich nextcloud-desktop-cmd.

Danke für die Hinweise!

nextcloudcmd habe ich verworfen, da ich tatsächlich nicht Verzeichnisse synchronisieren möchte, sondern gezielt einzelne Dateien von irgendwo in eine bestimmtes NC-Verzeichnis transportieren muss. Das ist mir jetzt beim genaueren Hinsehen klar geworden.

Näher in Betracht gezogen habe ich occ files:scan und die Sache mit der Freigabe.

Zur Freigabe:

Dazu habe ich das Zielverzeichnis mit einer Freigabe versehen, diese auf “Dateien ablegen (nur hochladen)” eingestellt. Dann habe ich (von meinem Linux-Rechner) mit curl eine Datei dort hin kopiert:

curl -T test.txt https://cg-2022.org/nc/index.php/s/6N6HxxxxxxxxxxmKE/

Das Kommando gibt keine Fehlermeldung, auch keine Erfolgsmeldung. Aber im NC-Verzeichnis taucht die Datei nicht auf. Das macht mich ratlos.

Zu occ files:scan

Das NV-Verzeichnis auf dem Server war schnell gefunden:

/var/www/html/nc/data/admin/files/CG-2022/DB

Auch die Datei konnte dorthin kopiert werden:

sudo -u www-data cp test.txt /var/www/html/nc/data/admin/files/CG-2022/DB/

Die Datei steht dann wie erwartet in dem Verzeichnis und hat die selben Zugriffsrechte (nämlich -rw-r--r--) und Eigentumsverhältnisse (nämlich www-data:www-data) wie alle anderen Dateien dort auch. Dann aber endet

sudo -u www-data php7.4 /var/www/html/nc/occ files:scan admin

mit folgender Meldung:

Starting scan for user 1 out of 1 (admin)
Home storage for user admin not writable
Make sure you're running the scan command only as the user the web server runs as

+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 0       | 0     | 00:00:00     |
+---------+-------+--------------+

Auch das macht mich ratlos. Denn www-data ist der user, unter dem auch der Webserver (apache2) läuft.

Habt Ihr dazu Ideen?

Grundsätlich würde ich nicht mit occ files:scan all auf regulärer Basis arbeiten, sondern wenn immer möglich, die Schnittstellen nutzen, die Nextcloud nativ anbietet. Was dann halt fast zwangsläufig auf WebDAV hinausläuft. :wink:

Vielleicht wäre ja das etwas, das du für deine Zwecke nutzen könntest…

Funktioniert es wenn du die Berechtigungen neu schreibst…?

sudo chown -R www-data:www-data /var/www/html/nc/data
2 Likes

Vielleicht ist davfs2 noch eine Möglichkeit.

davfs2 war der Ausgangspunkt meiner Schwierigkeiten. Das entsprechende mount dauerte ewig bzw. zuletzt blieb es komplett hängen. Ob das mit einer sorgfältigeren Konfiguration zu beheben wäre, weiß ich nicht, deswegen habe ich hier gefragt.

Das hat tatsächlich geholfen! Finde ich ein wenig spooky, denn ich kann nicht erkenne, was sich dadurch geändert haben könnte. Aber: sei’s drum - es läuft.

Sensationell! Das funktioniert tatsächlich sehr gut.

Tja, jetzt habe ich die Wahl zwischen occ files:scan und rclone, beides funktioniert erst einmal. Gibt es gute Argumente für/gegen das eine oder das andere?

Naja… Das Argument für rclone ist halt, dass es WebDAV nutzten und sich an der Nextcloud anmelden kann, und du dann eben kein occ files:scan zu machen brauchst, um der Nextcloud mitzuteilen, dass neue Daten hochgeladen wurden. Ob occ files:scan nun ein Problem ist, kommt natürlich darauf an wie häufig du Daten schreibst und ob sie dann sofort verfügbar sein müssen. (jetzt mal abgesehen von den Berechtigungsproblemen, die du hattest, die man aber sicher in den Griff bekommen kann.)

Trotzdem sehe ich occ files:scan eher als einen Workaround, um sporadisch sehr grosse Datenmengen zu übertragen, weil die Transferraten via USB oder über Protokolle wie Samba oder NFS in der Regel einfach höher sind. Für die alltägliche Nutzung ist es aber meiner Meinung nach sinnvoller die nativen Protokolle der Nextcloud zu verwenden. Jedesmal einen Scan zu triggern, nur weil eine einzelne Datei hinzugekommen ist, hört sich für mich jedenfalls ziemlich ineffzient an :wink:

2 Likes

Vielen Dank für die vielen Hinweise! Nun habe ich zwei funktionierende Schnittstellen zwischen Linux und NextCloud:

  • occ files:scan
  • rclone

Ich beschreibe sie hier noch etwas ausführlicher, vielleicht hilft das dem einen oder anderen. Ich selbst habe mich für rclone entschieden - für meinen Anwendungsfall ist es sehr viel besser geeignet. Für die pros und contras siehe die Beiträge oben.

Ob sich die beiden Möglichkeiten auch auf Windows-Umgebungen portieren lassen, kann ich leider nicht sagen.

Zu occ files:scan

Das allgemeine Vorgehen:

  1. Datei(en) in den NC-Verzeichnisbaum kopieren
  2. occ.files scan durchführen, damit NC von der/den Datei(en) erfährt und sie sichtbar macht.

Punkt 1 geht z.B. mit

sudo -u www-data cp <Datei(en)> /var/www/html/nc/data/<nc_user>/files/<verzeichnis>/

In dieses Verzeichnis (alles unter /var/www/html/ sollte nur der user www-data schreiben. Das ist der User, der auch den Web-Server apache2 ausführt. Daher das sudo -u www-data.

Damit das geht, muss der User, der den Befehl absetzt, in der Gruppe sudo sein - sonst kann er den Befehl sudo nicht ausführen. sudo fragt dann nach dem eigenen Passwort (nicht nach dem von www-data!).

(Will man die ganze Aktion von Skripten aus steuern, ist diese Nachfrage ungünstig. Hier hilft der Systemadministrator, der diese Passwort-Abfrage unterbinden kann. Leider Kann ich in diesem Detail nicht helfen.)

Auf meinem Server ist
/var/www/html/
das Stammverzeichnis aller WEB-Inhalte. In dem Verzeichnis
/var/www/html/nc/
ist NextCloud installiert. Der relevante Verzeichnisbaum ist dann unter
/var/www/html/nc/data/<nc_user>/filse/
In meinem Fall verwende ich den NC-User admin, er kann durch jeden anderen user ersetzt werden.

Punkt 2 geht so:

sudo -u www-data php /var/www/html/nc/occ files:scan admin

Die Voraussetzungen für sudo wurden unter Punkt 1 bereits beschrieben.
Der Befehl occ files:scan hat etliche Varianten, die hier gut dokumentiert sind:
https://docs.nextcloud.com/server/20/admin_manual/configuration_server/occ_command.html
Dass ich hier ... admin verwende, ist nur eine dieser Varianten und hängt damit zusammen, dass ich Dateien vorher in den Verzeichnisbaum eben vom NC-admin kopiert hatte.

Zu rclone

rclone ist sehr gut dokumentiert: https://rclone.org/

Es ist in der Standard Installation von Linux nicht enthalten, aber mit
apt-get install rclone
schnell installiert. Allerdings bekommt man von der Site https://rclone.org/downloads/ i.d.R. eine neuere Version als aus den Reposietories. Diesen Weg empfehle ich ausdrücklich. Der Abschnitt Script Download and Install ist Dein Freund…

Nach der Installation muss man es mit rclone config konfigurieren, das wird hier erklärt:
https://rclone.org/docs/
Als Anhaltspunkt für die erfragten Parameter kann vielleicht helfen:

[nc_cg2022]
type = webdav
url = https://beispiel.org/nc/remote.php/webdav/
vendor = nextcloud
user = admin

Dabei ist <nc_cg2022> ein frei zu vergebender Name für einen Remote (also einen Cloud-Zugang). Der User ist (natürlich) der NC-User, das zugehörige Passwort kann mit erfasst werden und wir verschlüsselt gespeichert.

2 Likes