WebDAV mit RClone

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

WebDAV mit Rclone

Rclone ist ein einfaches Binärprogramm. Es ist in der Programmiersprache 'Go' programmiert und ist vom klassischen 'rsync' beeinflusst.

Rclone kann Dateien über verschiedene Netzwerkprotokolle kopieren und sychronisieren, und es enthält auch Server-Funktionalität. Hier nutzen wir es als WebDAV-Server.

Rclone ist als Paket in der Debian-Distribution verfügbar und auf den Hostsharing-Servern vorinstalliert. In Debian 12 ist die Version 'rclone v1.60.1-DEV' enthalten. Für den Betrieb als Server im Webspace sollte man 128 MB RAM-Kontigent für diesen Dienst einplanen.

Wir können ad hoc sehr einfach einen WebDAV-Server starten:

 mkdir $HOME/data
 rclone serve webdav $HOME/data --addr 127.0.0.1:38246 --user test --pass kein-gutes-passwort

Den 'rclone'-Befehl brechen wir zunächst mit 'Ctrl-C' wieder ab.

Dann müssen wir eine Domain beim User aufschalten und die '.htaccess'-Datei erstellen, damit der WebDAV-Server über https/Port 443 erreichbar wird.

Für die Domain 'webdav.hs-example.de' wäre die .htaccess im Verzeichnis '$HOME/doms/webdav.hs-example.de/htdocs-ss/' mit dem oben gewählten Port '38246':

 DirectoryIndex disabled
 RewriteEngine On
 RewriteBase /
 RewriteRule .* http://127.0.0.1:38246%{REQUEST_URI} [proxy]
 RequestHeader set X-Forwarded-Proto "https"

Damit 'rclone' als Dienst läuft, erstellen wir eine Datei 'rclone.service' im Verzeichnis '$HOME/.config/systemd/user/' mit dem Inhalt:

 [Unit]
 Description=Rclone WebDAV Service
 
 [Service]
 Environment="UMASK=0022"
 ExecStart=/usr/bin/rclone serve webdav %h/data --addr 127.0.0.1:38246 --htpasswd %h/etc/htpasswd
 Restart=always
 
 [Install]
 WantedBy=default.target

Hier wird eine Datei '$HOME/etc/htpasswd' für die WebDAV-Accounts benutzt. Diese Datei können wir wie folgt mit einem Account 'webdav' und Passwort 'geheim' anlegen:

 htpasswd -cb $HOME/etc/htpasswd webdav geheim
 chmod 600 $HOME/etc/htpasswd

Den Dienst aktivieren und starten:

 systemctl --user daemon-reload
 systemctl --user start rclone.service
 systemctl --user enable rclone.service