Wir bauen uns eine eigene Nextcloud mit theoretisch unlimitiertem Speicherplatz. Hört sichkompliziert an, ist aber am Ende doch ganz einfach!
Doch wer braucht so viel Speicherplatz? Natürlich nicht jeder, aber es gibt vielleicht Szenarien in denen man kurzfristig dann doch mal mehr Speicherplatz benötigt als ein Abo von Dropbox und Co hergibt. Und gerade wenn dies nur für ein paar Tage oder einmal für ein spezielle Projekt notwendig ist, dann ist dieser Weg doch äußerst gut geeignet. Der folgende Lösungsweg zeigt das ganze für Nextcloud, würde aber auch für die Fans von Owncloud ähnlich funktionieren.

What we need

  1. Wir benötigen zur Realisierung natürlich eine Menge Speicherplatz. Theroretisch unlimitiert Speicherplatz erlangen wir mit S3 (Simple Storage Service) kompatiblen Speicher den wir bei den gängigen Cloud Anbietern bekommen.
  2. Wir benötigen eine Virtuelle Maschine auf der dann eine Linux Installation mit Apache Webserver, MariaDB Datenbank und der Nextcloud Software läuft. Diese Nextcloud Instanz werden wir so anpassen das sie den S3 Speicherplatz als primären Datenspeicher benutzt.
  3. Eine Domain oder Subdomain für den einfachen Zugriff.
  4. Wir installieren den LetsEncrypt Certbot um das ganze mit einem SSL Tertifikat zu sichern.

Dieser Guide beschreibt nicht wie ihr Amazon S3 als externen Speicher einer bestehenden Nextcloud oder Owncloud Installation hinzufügt. Das geht zwar ebenfalls, ist aber etwas komplett anderes! Wir wollen hier den Nextcloud Speicherplatz primär auf S3 haben und nicht im üblichen /data Verzeichniss der Nextcloud Installation.
Der Guide basiert auf DigitalOcean. Dort bekommt ihr vor allem als Cloud Neuling die einfachen Werkzeuge geliefert um solch eine Installation durchführen zu können. Amazons AWS könnte das besser, ist aber deutlich umfangreicher in der Konfiguration und auch teurer.
Die anfallenden Kosten möchte ich nur ganz kurz darstellen, für eine genauere Kalkulation könnt ihr die DO Services studieren um zu erfahren was genau bei welcher Nutzung abgerechnet weren würde. Praktisch gesehen benötigen wir diese zwei Posten:

Droplet – Linux Virtuelle Maschine5$ / Monat
Spaces Subscription mit 250GB Speicherplatz inklusive5$ / Monat
Droplet Backups1$ / Monat

Dazu kommen ggf. Kosten je GB für weiteren Speicehrplatz oder zusätzlichen Datentransfer zur Virtuellen Maschine.

Domain

Es ist möglich auf die Nextcloud über die IP Adresse zuzugreifen. Es macht aber natürlich mehr Sinn über eine Domain oder eine Subdomain zuzugreifen, und diese dann mit einem SSL Zertifikat zu sichern. Dazu gibt es am Ende mehrere Wege, diese möchte ich in diesem kurzen Guide nicht extra beleuchten. Wer schon eine Webseite mit eigener Domain hat der sollte am einfachsten dann eine Subdomain (Bsp.: nextcloud.xxxxx) aufschalten. Euer Provider erzählt euch wie das geht. Oder aber ihr registriert eine extra Domain und lasst diese auf den Digitalocean DNS schalten, auch da hilft euch der Domain Verkäufer weiter. Es gibt dafür viele Lösungen! Auch Domains von 1und1 etc. lassen sich problemlos aufschalten.

Der Account und das Projekt

Als erstes benötigt ihr einen Digitalocean Account den ihr hier registriert: digitalocean.com. Über diesen Link registriert erhaltet ihr ein 50$ Guthaben zum Start!
Ihr müsst die üblichen Angaben machen und eine Zahlungsweise hinzufügen. Dann erstellt ihr euer erstes Projekt, in diesem werdet ihr sowohl den Spaces Account als auch das Droplet (VM) erstellen.

Projekt erstellen

Spaces – S3 Speicherplatz

Im neuen Projekt erstellt ihr nun den S3 Speicherplatz, bei Digitalocean hat der Service den Namen Spaces. Erstellt einen Spaces Speicher und wählt aus:

  1. Als Datacenter wählt Frankfurt (Deutschland)
  2. Ihr aktiviert CDN nicht!
  3. Ihr lasset Restrict File Listing aktiviert und machen die Daten nicht öffentlich
  4. Wählt eine Subdomain aus die gut zu euerem Projekt passt, diese muss aber auch nicht unbedingt lesbar sein, sie wird später niemand im Internet benötigen.
Create Digitalocean Spaces

Danach wechselt ihr im linken Menu auf Spaces und seht über der Spaces Liste den Knopf Manage Keys. Hier könnt ihr ein Schlüsselpaar generieren welches ihr später für den Zugriff benötigt. Klickt bei den Spaces Access Keys auf Generate New Key. Gebt diesem Schlüsselpaar einen passenden Namen und kopiert euch den den Key sowie den Secret. Ihr benötigt diese später in der Nextcloud config!
Nun haben wir den S3 Speicherplatz geschaffen, nun geht es an unsere Linux Maschine!

Droplet – Linux VM

Nun erstellen wir unsere Linux Maschine. Ich gehe im Detail nicht darauf ein wie man SSH einrichtet und benutzt und erkläre auch nicht wie man an der Commandline navigiert oder arbeitet. Wenn ihr NULL Linux Skill habt dann solltet ihr erst einmal einen Einsteiger Guide besuchen um einige Basics zu lernen. Trotzdem, allzu kompliziert wird es nicht, auch Linux Anfänger bekommen das hin!
Geht in Digitalocean zum Punkt Create > Droplet.

Unser Auswahl hier:

  • Als Betriebssystem wählt ihr Ubuntu 18.
  • Als Plan wählt ihr Standard!
  • Den Droplet Maschinen Typ könnt ihr natürlich selbst aussuchen. Aus Erfahrung, für nur einige wenige Benutzer genügt die kleinste Maschine. Soll eine kleine Firma mit mehreren Mitarbeitern mit der Nextcloud arbeiten dann könnt ihr aber auch eine größere Instanz wählen.
  • Es wird kein Block Device hinzugefügt! Da unsere Daten dann auf dem S3 Bucket liegen ist der Speicherplatz der Maschine nur für die Software selbst notwendig
  • Region: Auch hier unbedingt wieder Frankfurt auswählen. Droplet und Spaces Account müssen im selben Rechnenzentrum sein!
  • Authentication: Profis werden in jedem Fall über SSH Keys arbeiten, aber es funktioniert ebenfalls sich das root Passwort für den Start zusenden zu lassen.
  • Hostname: Wählt einen entsprechenden Hostname aus den ihr benutzen möchtet. Dieser ist nicht gaaaanz so wichtig, sollte für euch aber logisch sein, vor allem wenn ihr mehr als eine Linux Maschine verwaltet ist dieser zur Identifikation wichtig.
  • Backups: In jedem Fall!

Nun könnt ihr die Maschine erstellen. Diese wird in wenigen Sekunden starten und ihr findet dann in der Übersicht auch die IP Adresse der Maschine zu der ihr dann verbinden könnt.

Floating IP

Erstellt nun eine Floating IP. Diese ist wichtig. Diese IP Adresse wird sich auch nicht ändern wenn ihr die Linux Maschine mal kaputt macht und durch eine andere austauscht. Geht zum Punkt Networking, wählt das erstellte Droplet aus und lasst eine Floating IP generieren. Eure Doomain oder Subdomain werdet ihr dann zu dieser IP leiten!

Wenn ihr diese IP Adresse nun anpingt wird euere neu erstellte Maschine antworten.

Software Installation

Nun werden wir die neue Linux Maschine vorbereiten und Software installieren. Ich empfehle auch gleich den Metrix Agent von Digital Ocean mit zu installieren.

Vorbereitung

Unsere Linux Maschine ist noch neu, als erstes installieren wir alle notwendigen Systemupdates.

apt-get update -y
apt-get upgrade -y

Metrix Agent von Digital Ocean installieren:

curl -sSL https://repos.insights.digitalocean.com/install.sh | sudo bash

Danach startet ihr die Maschine neu mit reboot . An dieser Stelle könnt ihr auch die Snapshopt Funktion benutzen. Sollte später bei der Installation etwas daneben gehen könnt ihr simpel das Snapshot wiederherstellen und zu diesem Status zurückkehren.

Nextcloud Installation

Nun können wir bereits Nextcloud installieren. Wir nutzen dafür snap. Dieser Service wird auf der Maschine bereits ausgeführt, wir müssen nur die notwendigen Pakete installieren, das passiert aber gleich automatisch:

snap install nextcloud

Jetzt aktiviert SSL und lasst ein Zertifikat erstellen. Ihr werdet nach eurer E-Mail Adresse gefragt und nach der Domain unter der eure Nextcloud Installation erreichbar ist:

nextcloud.enable-https lets-encrypt

Mehr ist erst mal nicht notwendig, installiert wird nun: Apache, Certbot, mySQL, php, Redis Cache und Nextcloud! Nextcloud wird gestartet.
Wenn das erfolgt ist könnt ihr über den Aufruf mit eurer Domain prüfen das die Nextcloud Installation verfügbar ist:

STOP! Nur aufrufen, keinesfalls mit der Installation fortfahren!

Nextcloud Konfiguration für S3 Bucket erweitern

Damit die neue Nextcloud Installation nun das S3 Bucket als primären Speicher verwenden und konfigurieren wird müsst ihr die Konfigurationsdatei anpassen. Öffnet mit dem Editor eurer Wahl (vim, nano, mcedit) die Datei: /var/snap/nextcloud/16739/nextcloud/config/config.php. Die Zahl im Ordnername kann sich ggf. ändern. Die config.php ist vor der abschließenden Installation noch unvollständig, ihr werdet hier nun den folgenden Block ergänzen. Diesen fügt ihr vor der letzten Zeile nach ‚instanceid‘ => ‚xxxxxxx‘, ein.

'objectstore' => array(
    'class' => 'OC\\Files\\ObjectStore\\S3',
      'arguments' => array(
        'bucket' => 'mein-nextcloud-space',           //das ist der Name eures S3 Speichers 
        'hostname' => 'fra1.digitaloceanspaces.com',  //Digital OCean URL
        'key'    => 'sdsdsdsdsdasdasdasda',           //euer S3 Bucket Key
        'secret' => 'ssdsdasdssds433434g45g54g5g',    //euer S3 Bucket Secret
	'port' => 443,
        'use_ssl' => true,
        'use_path_style'=> true,    //Essential to get S3 working
        'region' => 'fra1',         //Essential to get S3 workings
        ),
    ),
	

Speichert die config.php. Ruft Nextcloud im Browser auf. Habt ihr alles korrekt gemacht erscheint hier wieder das Formular zum Abschluss der Installation. Wird eine Fehlermeldung erzeugt habt ihr ggf. mit den Klammern und Kommas einen Fehler gemacht.

Nextcloud fertigstellen

Nun ist es soweit, der Rest der Installation ist nur noch die Angabe eures Admin Benutzernamens und des Passwort. Klickt dann auf Installation abschließen und habt einige Sekunden (20-30) Geduld! Nextcloud wird fertig installiert und eingerichtet, dann seid ihr eingeloggt.


Ihr könnt jetzt überprüfen das der S3 Speicher als primärer Datenspeicher funktioniert. Wählt das Zahnrad oben rechts, geht in die Einstellungen und wählt links unter Verwaltung den Punkt Übersicht aus. Wenn alles korrekt ist findet ihr hier nun den folgenden Hinweis:

Diese Instanz verwendet einen S3-basierten Objektspeicher als Primärspeicher. Die hochgeladenen Dateien werden temporär auf dem Server gespeichert und es wird daher empfohlen, 50 GB freien Speicherplatz im temp-Verzeichnis von PHP zur Verfügung zu haben. Überprüfe die Protokolle, um alle Details über den Pfad und den verfügbaren Platz zu erhalten. Um dies zu verbessern, kann das temporäre Verzeichnis in der php.ini geändert oder mehr Platz in diesem Pfad zur Verfügung gestellt werden.

Im S3 Bucket werdet ihr ab jetzt Objekte finden mit den Dateinamen urn:oid:#. Das ist korrekt so. Es ist keine Zuordnung möglich von den Dateien auf dem S3 zu den Dateinamen der Daten wie diese in Nextcloud abgelegt sind. Dies ist ein Unterschied gegenüber der Nutzung von S3 Buckets als sekundären externen Speicher.

Anmerkungen

Ihr habt nun eine eigene Nextcloud Installation und könt quasi endlos Speicherplatz benutzen. „Endlos“ ist aber nur die halbe Wahrheit. Wollte man das ganze für viele Benutzer aufbauen so wird die kleinste Instanz die wir gewählt haben nicht ausreichen. Auch wenn die Installation über snap klever gelöst ist und auch Redis Cache beinhaltet, irgendwann würde die Performance leiden, besonders wenn man viele hochauflösende Bilder auf Nextcloud speichert. Das generieren von Thumbnails ist ein CPU Fresser. Die 25GB Speicherplatz der kleinen Instanz sind hingegen kein Problem. Auch wenn hier empfohlen ist mindestens 50GB zur Verfügung zu stellen wenn ein S3 Bucket als primärer Speicher benutzt wird, im Test hat sich ergeben das dieser Zwischenspeicher nur selten wirklich intensiv benutzt wird. Auch das ist abhängig von der Anzahl Benutzer und wie das System benutzt wird! Macht eure eigenen Erfahrungne und habt das Monitoring des Droplet im Auge. Wenn notwendig, macht ein Upgrade der Linux Maschine.