Warum das ganze?

Meine Nextcloud läuft bisher auf einem Storage-Server bei Contabo. Das ist ein älterer Server der vorherigen Generation bei Contabo und ich habe kürzlich eine E-Mail bzgl. einer Preiserhöhung deshalb bekommen. Und knapp 20€ für 1.4 TB (gut, inkl. 6 Cores und 20GB RAM) ist mir dann doch etwas viel (vor allem, weil der Server vorher ~12€ oder so gekostet hat).

Dementsprechend muss eine Alternative her.

Die Möglichkeiten

1. Anderen vServer mit genug lokalem Storage mieten

Es gibt bei verschiedenen Anbieter vServer mit genügend Speicher. Ich brauche 300-400GB, das gibt es ab 6-7€ pro Monat, je nach Anbieter.

2. Anderen vServer mit externem Storage mieten

Das größte Problem auf der Suche nach einem vServer ist der Storage. Also wäre es sicherlich eine Überlegung wert, ob man nicht einfach einen externen Storage anbinden kann.

Nextcloud selbst bietet mit der External Storage App eine Möglichkeit, diverse externe Speicher anzubinden. Das hat allerdings einige Nachteile. Beispielsweise werden Vorschaubilder, Versionen und auch der Papierkorb weiterhin im lokalen Storage abgelegt. Auch an anderen Stellen ist bemerkbar, dass es externer Speicher ist.

Diverse Anbieter bieten lokalen Blockstorage für vServer an, das ist allerdings eher weniger für sowas gedacht und als Massenspeicher schlicht zu teuer.

S3 lässt sich als primärer Storage nutzen, dann legt Nextcloud die Dateien als Blobs im Bucket ab. Das funktioniert soweit, hat aber den Nachteil, dass man im Storage keine Dateien oder Ordner mehr erkennen kann und somit im Worst-Case vollkommen von der Zuordnung innerhalb der Datenbank abhängig ist. Bei Nutzung von lokalem Speicher hat man auf der Platte immer einen normalen Ordner-/Dateibaum, den man auch so nutzen kann.

Bleibt noch die Option, S3 mittels s3fs oder Rclone lokal zu mounten. Das funktioniert, aber S3 hat Probleme mit leeren Ordnern. Das Prinzip von Ordnern existiert bei S3 nicht so wirklich, das sind dann mehr oder weniger nur Dateiprefixe. Das wirkt auf den ersten Blick nicht wie ein Problem, da Tools wie rclone solche leeren (und eigentlich nicht existierenden) Ordner einfach cachen. Je nachdem, was für einen Anbieter man für S3 nutzt, gibt es auch andere Optionen, um leere Ordner abzubilden, beispielsweise existiert die Möglichkeit, Markerdateien zu nutzen. Das klappt allerdings mit dem Anbieter, den ich nutzen wollte (Backblaze B2) nicht.

Es gibt JuiceFS. Das kanne ich vorher nicht und bin ich bei meiner Recherche mehr oder weniger zufällig drüber gestolpert. Das ist ein Dateisystem, was Metadaten (Dateinamen, Verzeichnisbaum, (erweiterte) Attribute) in einer relationalen Datenbank wie MariaDB oder PostgreSQL oder alternativ z.B. in Redis speichert, die eigentlichen Daten dann in S3 (oder anderen Object Storages) lagert. Das hat den großen Vorteil, dass es POSIX-Kompatibel ist und auch mit leeren Verzeichnissen problemlos umgehen kann. Mir ist jedoch diese Aufteilung in Dateninhalte und Attribute nicht geheuer, es fügt auch mehrere zusätzliche Fehlerpunkte hinzu. Auch war in meinen kurzen Tests die Performance nicht da, wo ich sie gerne hätte. An sich könnte JuiceFS für solche Anwendungen aber echt eine Möglichkeit sein.

3. Managed Nextcloud mieten

Mehrere Anbieter (mir bekannt sind Hetzner und IONOS) bieten Managed Nextclouds für wenig Geld an, in beiden Fällen fangen die Preise irgendwo bei 5€ pro Monat an. Das ist für mich allerdings keine Option, da ich die Nextcloud vollständig selbst unter Kontrolle haben möchte und beliebig Einstellungen setzen können möchte. Diese Möglichkeit ist allerdings sehr interessant, wenn man wenig Aufwand mit der Pflege haben möchte oder nicht so viel Erfahrung mit dem selbst hosten hat.

4. Zuhause hosten

Ich habe zuhause bekanntlich einen Futro S740 als Homeserver, das Gerät hat einerseits genug Rechenleistung und andererseits genug Möglichkeiten für SSDs und co. Ich überlege aktuell, die Nextcloud einfach zuhause zu hosten. Die meisten Zugriffe passieren eh innerhalb des Heimnetzwerks, von außerhalb sind es eher nur kleine Änderungen oder hier und da mal ein Bild vom Handy. Die Cloud wird hauptsächlich von meiner Freundin und mir genutzt, lokal könnte man dann auch den Weg zur Cloud komplett im lokalen Netzwerk halten und nur den Zugriff von außen über Proxies im Rechenzentrum laufen lassen.

Da auf dem bisherigen Thin Client jedoch schon einiges läuft, würde ich hierfür einen zweiten anschaffen wollen. Aber schauen wir uns mal kurz die Kosten an.

Ein Futro S740 inkl. passend großer SSD würde mich grob 100€ kosten. Das ganze hängt natürlich stark von der aktuellen Preislage ab, aber die grobe Richtung müsste passen. Stromkosten liegen bei angenommenen 10 Watt (real sind es weniger) bei grob 1,50€ pro Monat. Das ist eher pessimistisch gerechnet, real ist es wahrscheinlich eher 1€ pro Monat. Wenn man die Anschaffungskosten für die Hardware auf einen Zeitraum von 2 Jahren verteilt, sind das knapp über 4€. Macht also insgesamt im Worst-Case etwa 5,50€ pro Monat für eine Laufzeit von zwei Jahren, wobei hier eigentlich deutlich mehr realistisch ist. Die monatlichen Kosten hängen dabei auch nicht davon ab, wie viel Storage das Teil bekommt, das beeinflusst nur die Anschaffungskosten.

Nachteile sind hauptsächlich, dass ein Futro nicht wirklich redundant ist, ich kann kaum die SSDs in einem RAID betreiben. Abstriche bei der Verfügbarkeit gibt es natürlich auch hinsichtlich Strom und Internet, wobei der Strom hier in den vergangenen Jahren noch nie ausgefallen ist. Aber vielleicht wird es wieder Zeit, eine USV einzusetzen - das ist aber ein anderes Thema.

Diese Nachteile sind für mich jedoch verkraftbar. Eigentlich ist es nur im Urlaub der Fall, dass die Cloud dann längerfristig ausfallen könnte, ohne dass ich was tun kann. Normalerweise lässt sich Ersatzhardware schnell beschaffen, mit entsprechenden Backups lässt sich eine “Notfall-Cloud” dann auch schnell auf die Beine stellen. Genügend Hardware habe ich für sowas im Homelab.

Entscheidung

Bisher bin ich mir noch nicht sicher, wohin die Reise geht. Aktuell tendiere ich sehr stark dazu, die Cloud einfach zuhause zu hosten, dafür würde ich dann auch noch einen zweiten S740 anschaffen - der bisherige ist einfach zu stark ausgelastet dafür. Ich werde die Cloud testhalber zu mir nach Hause auf den bisherigen Homeeserver holen und mir die Performance dann einfach mal ansehen. Das ist ja mehr oder weniger der Worst-Case dann.