Webhosting mit WebDAV als Google Drive oder MS Onedrive Alternative

Dieser Artikel bietet eine Übersicht dazu, wie man einen Webhosting Provider mit PHP Support sehr einfach und praktisch als Google Cloud / MS Onedrive Alternative zur Speicherung von Daten über das WebDAV Protokoll nutzen kann.

In Zeiten der aktuellen US Regierung macht man sich als Europäer Gedanken, wie man technologisch unabhängiger von US Unternehmen werden kann. Dabei ist die Speicherung von Daten in der Cloud einer der wichtigsten Aspekte. Die meisten Privatnutzer speichern sehr viele, auch sensible Daten in Google Drive oder Microsoft Onedrive – einfach weil es bequem und einfach ist. Dabei gibt es zumindest für diejenigen Nutzer, die einen Webhoster mit PHP Support, beispielsweise für die private Homepage, haben, eine gute Alternative, die meist sogar mehr Speicherplatz bietet: Den eigenen WebDAV Cloud Speicher.

Ich selbst nutze ein günstiges Strato Paket für mein Webhosting (Hosting Starter), welches neben den üblichen Features zu Mail, DNS und Web üppige 50 GB Speicher beinhaltet.

Server Einrichtung

Um einen einfachen WebDAV Cloud Speicher über ein PHP Script einzurichten, kann man die kostenlose Opensource Bibliothek Sabre nutzen. Diese bietet mit der zusätzlichen Software Baikal übrigens auch eine sehr gute Möglichkeit, per CalDAV und CardDAV Kalender und Adressbücher im eigenen Webspace einzurichten – und das sogar dank SQLite ohne zusätzliche Datenbank.

Hat man die Sabre Bibliothek im Webspace heruntergeladen und entpackt, kann man anschließend mit einem sehr kleinen Script den WebDAV Server einrichten:

<?php

ini_set("session.cookie_httponly", 1);
ini_set("display_errors", 0);
ini_set("log_errors", 1);

require '../baikal/vendor/autoload.php'; // anpassen auf autoload.php pfad

use Sabre\DAV;
use Sabre\DAV\Auth\Plugin as AuthPlugin;
use Sabre\DAV\Auth\Backend\BasicCallBack;


class StrongETagPlugin extends DAV\ServerPlugin {

    function initialize(DAV\Server $server) {
        $server->on('afterWriteContent', [$this, 'afterWrite']);
    }

    function afterWrite($path, DAV\IFile $node) {
        if (method_exists($node, 'setETag')) {
            $node->setETag('"' . md5($path . time()) . '"');
        }
    }
}


$rootDirectory = new DAV\FS\Directory('data');

$server = new DAV\Server($rootDirectory);
$server->setBaseUri('/webdav-cloud/server.php');

$authBackend = new BasicCallBack(function($username, $password){ return ($username === 'admin' && $password == '<your password>');});
$authPlugin = new AuthPlugin($authBackend, 'WebDAV Login');
$server->addPlugin($authPlugin);


$server->addPlugin(new DAV\Browser\Plugin());
$server->addPlugin(new StrongETagPlugin());

$server->exec();

Das oben gezeigte Script enthält ein paar Anpassungen, sodass SabreDAV auch problemlos mit Linux fsdav2 funktioniert.

Hat man das Script als server.php in einem Verzeichnis auf dem Webspace angelegt und das Passwort im Code entsprechend angepasst, muss man noch ein Unterverzeichnis „data“ anlegen, das dann alle in der WebDAV Cloud gespeicherten Dateien enthalten wird.

Achtung: Dieses Verzeichnis unbedingt mit einer .htaccess Datei vor Zugriff schützen!

Hat man diese Schritte befolgt, kann man folgendermaßen auf die Daten zugreifen:

Zugriff unter Windows

Im Explorer „Netzlaufwerk verbinden“ auswählen und dort die Adresse in der Form https://<servername>/<verzeichnis>/server.php angeben. Anschließend fragt Windows nach Benutzername und Passwort. Sofern alles funktioniert, ist das Cloud Verzeichnis anschließend direkt als Netzlaufwerk verfügbar.

Zugriff unter Linux

Unter Linux muss man zunächst das davfs2 Paket installieren (üblicherweise mit dem Befehl „sudo apt install fsdav2“). Anschließend kann man ein Mount Verzeichnis anlegen z.B. /mnt/webdav-cloud.

In der Datei /etc/davfs2/secrets die Zugangsdaten hinterlegen:

https://<server>/<verzeichnis>/server.php admin <your-password>

Als letzten Schritt dann noch die Datei /etc/fstab bearbeiten und dort folgende Zeile einfügen (gegebenenfalls die Optionen an eigene Bedürfnisse anpassen), um das Laufwerk automatisch beim Booten zu mounten:

https://<server>/<verzeichnis>server.php     /mnt/webdav-cloud       davfs   noauto,_netdev,x-systemd.automount,x-systemd.idle-timeout=60,wqrw,user,uid=1000,gid=1000,iocharset=utf8 0       0

Anschließend sollte das Laufwerk nach dem Booten bereitstehen. Ansonsten kann man es auch mit dem Befehl „sudo mount /mnt/webdav-cloud“ manuell einbinden.

Optimierte Variante für Zugriff über Linux

Bei meiner eigenen Nutzung habe ich festgestellt, dass die Verbindung mit fsdav2 leider öfters abbricht, sodass man dann das Laufwerk neu mounten muss. Zudem ist man manchmal offline, sodass eine Synchronisation mit dem WebDAV Laufwerk eine bessere Lösung darstellt. Um eine derartige bidirektionale Synchronisation einzurichten, kann man das Tool rclone nutzen:

Rclone installieren:

sudo apt install rclone

Rclone konfigurieren und eine neue WebDAV Verbindung mit dem Namen „webdav-cloud“ anlgen:

rclone config

Einmalig die Synchronisation initialisieren:

rclone bisync /home/<username>/Cloud/ webdav-cloud:/ –resync –exclude .htaccess

Einen Service mit Timer erstellen, damit die Synchronisation alle 5 Minuten abläuft:

nano ~/.config/systemd/user/rclone-bisync.service

[Unit]
Description=Rclone Bisync

[Service]
Type=oneshot
ExecStart=/usr/bin/rclone bisync /home/<username>/Cloud webdav-cloud:/ --exclude .htaccess

nano ~/.config/systemd/user/rclone-bisync.timer

[Timer]
OnBootSec=2min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target

Den Service mit Timer aktivieren:

systemctl –user daemon-reload
systemctl –user enable –now rclone-bisync.timer

Warnung: rclone bisync befindet sich im „experimental“ Stadium und sollte dementsprechend nicht in Produktivumgebungen genutzt werden.