Wer Nextcloud kennt, weiss seine Funktionalität zu schätzen und freut sich über die Unabhängigkeit von den grossen "Datenschnüffelanbietern".
Die Kombination (lokal gehostete) Nextcloud auf einem NAS (Network Attached Storage) macht Sinn, denn dort sind in der Regel schon alle wichtigen Daten zentral abgelegt.
Vorgeschichte
Ich speichere meine Daten schon seit über 10 Jahren auf einem zentralen Server. Man sollte eher "Serverchen" sagen, denn das ARM-basierte Cubieboard2 (1 GHz AllWinner A20 CPU mit zwei ARM-Cortex-A7 -Kernen, 1 GByte RAM, vergleichbar mit den ersten Raspberry PIs) ist schon etwas in die Jahre gekommen. Das betrifft eigentlich nur die Geschwindigkeit, denn in punkto Energiesparen und Stabilität ist es immer noch sehr gut!
Ursprünglich gab es eine eigene Linux Version dafür, die wurde aber zwischenzeitlich eingestellt, was aber kein Problem darstellt - wir befinden uns in der Linux-Welt - denn man kann sich einfach selbst ein aktuelles Debian System installieren. Es finden sich Hilfestellungen im Internet, wie man die passende Bootprozedur für den Kernel findet.
Ein Vorteil dieses Systems war der SATA Anschluss für eine Festplatte. Mittlerweile tut dort eine 1 TByte SDD Platte klaglos ihren Dienst.
Folgende Services laufen auf dem Cubieboard:
-
SAMBA mit mehreren SMB Shares ("Fileserver")
-
CUPS ("Print- und Scanserver"): ein älterer HP Multifunktionsdrucker ist über USB verbunden und seine Dienste sind im Homenetzwerk verfügbar.
-
PI-Hole (läuft als Docker-Container): "Werbe-Blocker"
-
Mediaserver für die Squeezebox (Docker-Container)
-
Zentraler Hub für Syncthing: alle Handy Fotos und wichtige andere Dateien werden hier automatisch hochgeladen.
-
Cron Service für das einsammeln und (grafisches) aufbereiten von Balkonkraftwerksdaten
-
Cron Service für das Starten und Stoppen einer AWS EC2 Instanz
-
"Duply" Backup Script: Sammelt wöchentlich wichtige Daten und legt sie auf dem Server ab. Die Backup Daten werden monatlich zirkulierend auf 3 Festplatten manuell kopiert ("cp -ra").
Ich bin selbst erstaunt, wie lange diese Liste inzwischen ist und was dieser "Winzling" alles geleistet hat.
Wie gesagt: das System ist extrem stabil (läuft seit Jahren ohne irgendwelche Ausfälle), braucht was keinen Strom und ist nachhaltig (die selbe Hardware - gebraucht gekauft - seit über 10 Jahre im Einsatz).
Vorbereitung
Deshalb war es mir wichtig, wieder ein stabiles System zu haben, was aber schneller sein sollte, alle vorher gelisteten Services anbietet, plus Cloud Funktionen.
Wer mit den Office Clouds der grossen Anbietern aus den USA schon einmal gearbeitet hat, weiss die Vorteile zu schätzen:
-
Schnelles Sharen von Dateien und Ordern mit anderen Usern über das Internet auf gesicherte Art und Weise.
-
Private Unterlagen (Steuer etc.) via Email zu verschicken ist keine gute Idee. Diese Zeit geht zu Ende, es wird an zu vielen Stellen mitgelesen.
-
Automatische Versionierung von Dokumenten
-
Gemeinsames Bearbeiten von Dokumenten
-
Die Frage ist: sind persönlichen Daten bei den grossen Anbietern sicher? Da kann sich jeder selbst seine Meinung darüber bilden....
Mir war es wichtig, dass diese Unterlagen bei mir "zu Hause" bleiben. Es gibt am Ende zwei interessante Open Source Kandidaten für die private Cloud: Nextcloud und Owncloud.
Die Entscheidung fiel auf Nextcloud, da dort die Community grösser ist und da es für alle möglichen Endgeräte Apps gibt (Linux, Windows, Mac, Android, IOS etc.).
Alle oben genannten Funktionalitäten bietet u.a. auch Nextcloud an und das kostenlos :-)
Hinweis ("Make or buy"):
Generell ist der Aufbau einer privaten Cloud mit etwas Aufwand verbunden. Technisches Verständnis ist Voraussetzung, ebenso Erfahrung mit der Administration Datenbank-basierter Systeme.
Es gibt schon fertig gehostete Nextcloud Systeme. Wer bereits Kunde der Telekom ist, kann kostenlos die "Magenta Cloud" nutzen, wo 15 Gbyte Daten gehostet werden können, aber nur Basis-Dienste sind nutzbar (reines File-Sharing für einen User. Das kann für viele Anwendungsfälle schon ausreichend sein. Einfach ausprobieren!)
Die Daten bleiben selbstverständlich in Deutschland und werden hier gehosted.
Welche Nextcloud Installation: AIO vs. "klassisch"
Nachdem Nextcloud inzwischen ein riesiges Framework geworden ist, mit Web-Server-, Datenbank-, Backup-, Add-on-Installationen - und alle Komponenten einzeln zu installieren mühsam ist - war es mir wichtig alle notwendigen Komponenten in einem Container zu haben.
Dafür gibt es mittlerweile die Nextcloud AIO ("all in one") Installation.
Welches NAS?
Ein NAS bietet mehrere Vorteile
-
man hat eine höhere Ausfallsicherheit (z.B. mit RAID1 auf 2 Plattensystemen)
-
es ist auf den Zweck, Daten sicher zu speichern optimiert
-
es ist auf Geschwindigkeit optimiert
-
die Festplatten werden optimal gekühlt
-
gemischte Verwendung von SATA und SDD Platten (nicht bei allen NAS Systemen möglich!)
-
Installation von weiteren Add-ons ("Apps")
-
Container App
-
usw.
Es gibt zwei bekannte Anbieter von günstigen, Linux basierten NAS Systemen, die einfach erweiterbar sind:
-
Synology und
-
QNAP
Ich konnte keine grundsätzlichen Unterschiede feststellen, beide bieten die Funktionen, die für mich wichtig waren - vielleicht ist Synology einen Tick bedienerfreundlicher.
Am Ende konnte ich günstig ein gebrauchtes QNAP TS-251A-4G Dual-Core NAS mit 4 GByte RAM erstehen.
Wichtig war, dass es etwas mehr RAM hat (standardmässig sind nur 2 GByte eingebaut), man kann es aber erweitern. Wenn man das NAS um zusätzliche Funktionen erweitern will, braucht man für Docker Container mehr RAM.
Die Zeiten sind auch zu Ende, in denen man NAS Systeme direkt auf Linux Ebene erweitern konnte (über das Paketsystem). Das Problem mit dieser Art von Flexibilität ist, dass das ganze System am Ende unstabil wird, wenn zu viel zusätzlich installiert wird.
Hier bietet die Erweiterung über Docker Container deutlich mehr Sicherheit!
Es macht wirklich Sinn, sich hier etwas einzulesen um ein Grundverständnis zu bekommen. Am Ende ist es nicht so kompliziert (das wird es nur, wenn plötzlich Fehlermeldungen auftauchen ;-) ).
Achtung: Es gibt eine grosse Vielzahl von NAS Systemen, davon ist es nur bei einem Teil möglich, den RAM-Speicher überhaupt zu erweitern.
Los geht's
So, genug der Vorgeschichte und der Vorbereitungen, jetzt beginnt das "Hands on":
Router Konfiguration
Nachdem die private Cloud aus dem Internet erreichbar sein soll, muss zuerst etwas am Router getan werden.
S. hierzu auch der Artikel über "DynDNS mit der Fritzbox".
Dort wird beschrieben, was getan werden muss, damit die Cloud z.B. über die Subdomain meinecloud.meine-homepage.de erreichbar ist.
Folgende Ports müssen für Nextcloud im Router freigegeben werden:
-
Port 80
-
Port 443
-
Port 8443 (optional für die Installation)
NAS Konfiguration
Auch auf dem NAS müssen ein paar Vorbereitungen getroffen werden, damit Nextcloud installiert werden kann.
Zuerst einmal sollte mindestens eine Festplatte eingesteckt sein 😃
Es ist nicht notwendig, ein QNAP Cloud Konto anzulegen, es müssen auch keine Daten an QNAP gesendet werden.
Installation der Container App
Das ist die wichtigste App, neben den "File Station" und der "Speicher&Snapshots" App.
Nach der Installation bietet sich die Möglichkeit auf dem NAS System Container zu installieren und zu betreiben.
Verändern der NAS Standardports
Damit es keine Konflikte mit den von Nextcloud verwendeten Ports gibt (ein Port kann nur von einem Service gleichzeitig benutzt werden), müssen die QNAP Ports angepasst werden. (Man kann es natürlich auch anders herum machen und die Nextcloud Ports ändern, beides ist möglich.)
-
Port 8080 -> Port 8181
-
Port 443 -> Port 4443
Konfiguration Reverse-Proxy
Der Reverse Proxy hat die Aufgabe den aus dem Internet über den Router auf Port 443 ankommenden Datenstrom zu "terminieren" (heisst entschlüsseln) und diese Daten (als "plain http") auf den (im Container laufenden) Web-Server auf Port 11000 weiterzuleiten.
Zusätzliche Erweiterungen über QNAP Apps
Generell gilt die Empfehlung: (zumindest am Anfang) nicht zu viel installieren! Das System wird schnell gross, braucht mehr Ressourcen und wird dann "zäh".
Das gilt genauso für die Nextcloud Installation, dort kommt noch hinzu, dass es schwerer zu administrieren wird.
Mir war hier die Stabilität am wichtigsten.
Bei meinem QNAP NAS Modell war im Ressourcen Monitor zu sehen, dass der Speicher ausreichend ist, aber die Prozessoren etwas mehr Leistung vertragen können. Es gibt hier viele Modelle mit mehr CPU Leistung und RAM, die dann auch teurer sind.
Installation von Nextcloud AIO
Alle Konfigurationsinformationen stehen in diesem compose yaml file - welches noch angepasst werden muss!
version: "3.0" services: nextcloud-aio-mastercontainer: image: nextcloud/all-in-one:latest init: true restart: always container_name: nextcloud-aio-mastercontainer # This line is not allowed to be changed as otherwise AIO will not work correctly volumes: - nextcloud_aio_mastercontainer:/mnt/docker-aio-config # This line is not allowed to be changed as otherwise the built-in backup solution will not work - /var/run/docker.sock:/var/run/docker.sock:ro # May be changed on macOS, Windows or docker rootless. See the applicable documentation. If adjusting, don't forget to also set 'WATCHTOWER_DOCKER_SOCKET_PATH'! network_mode: bridge # add to the same network as docker run would do ports: - 80:80 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md - 8080:8080 - 8443:8443 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md environment: # Is needed when using any of the options below # AIO_DISABLE_BACKUP_SECTION: false # Setting this to true allows to hide the backup section in the AIO interface. See https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section APACHE_PORT: 11000 # Is needed when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md APACHE_IP_BINDING: 127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md # BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6 # Allows to adjust borgs retention policy. See https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy # COLLABORA_SECCOMP_DISABLED: false # Setting this to true allows to disable Collabora's Seccomp feature. See https://github.com/nextcloud/all-in-one#how-to-disable-collaboras-seccomp-feature # NEXTCLOUD_DATADIR: /mnt/ncdata # Allows to set the host directory for Nextcloud's datadir. ⚠️⚠️⚠️ Warning: do not set or adjust this value after the initial Nextcloud installation is done! See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir # NEXTCLOUD_MOUNT: /mnt/ # Allows the Nextcloud container to access the chosen directory on the host. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host # NEXTCLOUD_UPLOAD_LIMIT: 10G # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud # NEXTCLOUD_MAX_TIME: 3600 # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud # NEXTCLOUD_MEMORY_LIMIT: 512M # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud # NEXTCLOUD_TRUSTED_CACERTS_DIR: /path/to/my/cacerts # CA certificates in this directory will be trusted by the OS of the nexcloud container (Useful e.g. for LDAPS) See See https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certification-authorities-ca # NEXTCLOUD_STARTUP_APPS: deck twofactor_totp tasks calendar contacts notes # Allows to modify the Nextcloud apps that are installed on starting AIO the first time. See https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup # NEXTCLOUD_ADDITIONAL_APKS: imagemagick # This allows to add additional packages to the Nextcloud container permanently. Default is imagemagick but can be overwritten by modifying this value. See https://github.com/nextcloud/all-in-one#how-to-add-os-packages-permanently-to-the-nextcloud-container # NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS: imagick # This allows to add additional php extensions to the Nextcloud container permanently. Default is imagick but can be overwritten by modifying this value. See https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container # NEXTCLOUD_ENABLE_DRI_DEVICE: true # This allows to enable the /dev/dri device in the Nextcloud container. ⚠️⚠️⚠️ Warning: this only works if the '/dev/dri' device is present on the host! If it should not exist on your host, don't set this to true as otherwise the Nextcloud container will fail to start! See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-transcoding-for-nextcloud # NEXTCLOUD_KEEP_DISABLED_APPS: false # Setting this to true will keep Nextcloud apps that are disabled in the AIO interface and not uninstall them if they should be installed. See https://github.com/nextcloud/all-in-one#how-to-keep-disabled-apps # TALK_PORT: 3478 # This allows to adjust the port that the talk container is using. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port # WATCHTOWER_DOCKER_SOCKET_PATH: /var/run/docker.sock # Needs to be specified if the docker socket on the host is not located in the default '/var/run/docker.sock'. Otherwise mastercontainer updates will fail. For macos it needs to be '/var/run/docker.sock' # security_opt: ["label:disable"] # Is needed when using SELinux # # Optional: Caddy reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md # # You can find further examples here: https://github.com/nextcloud/all-in-one/discussions/588 # caddy: # image: caddy:alpine # restart: always # container_name: caddy # volumes: # - ./Caddyfile:/etc/caddy/Caddyfile # - ./certs:/certs # - ./config:/config # - ./data:/data # - ./sites:/srv # network_mode: "host" volumes: # If you want to store the data on a different drive, see https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive nextcloud_aio_mastercontainer: name: nextcloud_aio_mastercontainer # This line is not allowed to be changed as otherwise the built-in backup solution will not work
In der Container App wird eine neue Anwendung mit dem Namen "nextcloud" erstellt und obige Konfigurationsdatei eingefügt. Beim Überprüfen darf kein Fehler auftreten. Nach dem Starten der Erzeugung dauert es eine ganze Weile, bis alle Container genertiert werden.
Man kann jetzt über die lokale IP-Adresse mit der Portnummer 8080 die Nextcloud Administration starten: z.B. mit https://192.168.1.20:8080
Unbedingt die Admin Passphrase notieren!
Nach der Anmeldung im Admin Dialogfenster den Domain Namen eintragen: z.B. meinecloud.meinhomepage.de und die zusätzlich zu installierenden Komponenten auswählen. Ich würde nur das unbedingt Notwendige anklicken (PDF/Image Unterstützung) und erst die Performance überprüfen: wie viel "verträgt" die Hardware? Also nur eine Basisinstallation (ohne "Talk" und Dokumentenserver etc.) durchführen.
Alphanumerische Zeichenkette auf dem Webserver Port 11000.
Restore Datenbank
Zertifikats Themen
Fortsetzung
Die Beschreibung der Installation der weiteren Services, die auf dem alten Homeserver ("Cubie") verfügbar waren (s.o.), erfolgt in einem zukünftigen Artikel.