Was ist Nextcloud?
Nextcloud ist eine freie Software für das Speichern und Verwalten von Dateien und ist bestens dafür geeignet, deine eigene (private) „Cloud“ aufzubauen. Du wirst unabhängig von Cloudanbietern wie z.B. Google, Apple oder Amazon und hast dabei die volle Kontrolle über deine Daten. Datenmissbrauch ist dadurch weitestgehend ausgeschlossen. Für Nextcloud gibt es zudem viele Apps, so dass du damit z.B. auch Kalender und Kontakte speichern und verwalten kannst. Hier kannst du dich über die vielen weiteren Vorzüge von Nextcloud informieren.
Ein weiterer Vorteil ist, dass du die von dir benötigten Services Zug um Zug in deine eigene Cloud “verschieben” kannst – also ohne Big Bang und die Angst etwas kaputt zu machen oder gar Daten zu verlieren. Genau so mache ich das auch und daher wächst dieser Blog nach und nach mit meinen Erfahrungen, die ich hier festhalte.
Voraussetzung für die Installation
Als Voraussetzung für die Installation von Nextcloud musst du deinen Raspberry Pi bereits mit IOTStack und Portainer (optional) aufgesetzt haben. Wie du das machen kannst habe ich in diesem Beitrag bereits ausführlich beschrieben.
Nextcloud ist Datenbank-basiert und benötigt MariaDB, MySQL, PostgreSQL oder Oracle. Ich habe mich für den Einsatz von MariaDB entschieden, da ich früher (vor der Übernahme durch Oracle) dessen „Vorgänger“ MySQL schon oft eingesetzt habe.
IOTStack Services auswählen
Dieser Abschnitt führt dich durch die Installation und Konfiguration von Nextcloud sowie MariaDB. Bitte beachte, dass das Menü von IOTStack auf einem Tablet ggf. nicht korrekt dargestellt wird. Am besten verwendest du z.B. PuTTY unter Windows.
Zuerst startest du das Menü von IOTStack mit
cd IOTStack ./menu.sh
Im Menü navigierst du auf den Eintrag Build Stack und betätigst die Enter Taste. Du erhältst eine Liste aller installierbaren Services. Mit den Pfeiltasten navigierst du zu Nextcloud sowie MariaDB und selektierst beide jeweils mit der Leertaste:

Jetzt betätigst du die Enter Taste, um zurück in das Hauptmenü zu gelangen. Du siehst nun auch die Infomeldung, dass die Datei docker-compose.yml erstellt wurde:

Diese Konfigurationsdatei enthält neben den Netzwerken einen Konfigurationsabschnitt für jeden Service, den du vorher unter Build Stack ausgewählt hast und sieht im vorliegenden Fall ungefähr wie folgt aus:
version: '3.6' services: mariadb: image: linuxserver/mariadb container_name: mariadb environment: - TZ=Etc/UTC - PUID=1000 - PGID=1000 - MYSQL_ROOT_PASSWORD=IOtSt4ckToorMariaDb - MYSQL_DATABASE=default - MYSQL_USER=mariadbuser - MYSQL_PASSWORD=IOtSt4ckmariaDbPw volumes: - ./volumes/mariadb/config:/config ports: - "3306:3306" restart: unless-stopped networks: - iotstack_nw nextcloud: image: nextcloud container_name: nextcloud ports: - "9321:80" volumes: - ./volumes/nextcloud/html:/var/www/html:rw restart: unless-stopped depends_on: - nextcloud_db links: - nextcloud_db networks: - iotstack_nw - nextcloud_internal environment: - MYSQL_HOST=nextcloud_db - MYSQL_PASSWORD=IOtSt4ckmySqlDbPw - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud nextcloud_db: image: linuxserver/mariadb container_name: nextcloud_db volumes: - ./volumes/nextcloud/db:/config environment: - MYSQL_ROOT_PASSWORD=IOtSt4ckToorMySqlDb - MYSQL_PASSWORD=IOtSt4ckmySqlDbPw - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud restart: unless-stopped networks: - nextcloud_internal networks: [...]
Beachte bitte, dass ich einige Teile der Datei mit […] gekürzt habe, da diese aktuell für die Installation von Nextcloud und MariaDB keine Relevanz haben. Wenn ich mich im weiteren Verlauf auf Zeilennummern beziehe, handelt es sich dabei immer um die Zeilennummern aus obiger Konfiguration. Die Zeilennummern in der docker-compose.yml weichen von dieser Nummerierung definitiv ab.
Nextcloud konfigurieren
Öffne nun das erzeugte YAML mit einem passenden Editor. Ich verwende unter Linux generell den Vi. Eine gute Kurzanleitung findest du u.a. hier. Du kannst natürlich einen beliebigen anderen Editor deiner Wahl verwenden.
vi docker-compose.yml
Ersetze in den Zeilen 38 und 50 in den Abschnitten nextcloud und nextcloud_db das jeweils vorbelegte Passwort für die Datenbank (MYSQL_PASSWORD) durch ein individuelles starkes Passwort. Es muss bei beiden Einträgen das gleiche sein.
Um die RAID1 Festplatte in Nextcloud einbinden zu können, musst du deren Gerätenamen kennen und diese in das bestehende Linux Dateisystem (hier unter /mnt/data) einhängen bzw. mounten mit
sudo mount /dev/sda /mnt/data
Sollte das Verzeichnis des Einhängepunkts noch nicht existieren, musst du dieses vorher erstellen mit
sudo mkdir /mnt/data
Jetzt musst du die eindeutige Kennzeichnung (UUID) des externen Laufwerks ermitteln mit
sudo blkid
Bei mir sieht die Ausgabe so aus
/dev/sda: UUID="dc5d4203-be23-443d-be38-55eb9fc13717" TYPE="ext4" /dev/sdb1: LABEL_FATBOOT="boot" LABEL="boot" UUID="EBBA-157F" TYPE="vfat" PARTUUID="d0fcd390-01" /dev/sdb2: LABEL="rootfs" UUID="b3ce35cd-ade9-4755-a4bb-1571e37fc1b9" TYPE="ext4" PARTUUID="d0fcd390-02"
Du musst die UUID des entsprechenden Laufwerks (bei mir ist es jene aus Zeile 1) kopieren, der Datei /etc/fstab eine neue Zeile wie die folgende am Ende hinzufügen und speichern. Die UUID musst du natürlich mit der deines Laufwerks ersetzen …
UUID=dc5d4203-be23-443d-be38-55eb9fc13717 /mnt/data ext4 defaults 0 2
In dieser Datei werden alle Laufwerke aufgeführt, die beim Booten eingebunden (gemounted) und wie diese konfuguriert werden sollen.
Nach einem Reboot öffnest du die Datei /home/pi/IOTStack/docker-compose.yml und fügst im Abschnitt nextcloud/volumes die folgende Zeile 3 ein (vor oder nach dem bereits vorhandenen Eintrag). Setze dabei den Pfad auf den, den du zuvor beim Einbinden des Laufwerks angegeben hast. Dieser lautet bei mir /mnt/data. Denk daran, zum Einrücken ausschliesslich Leerzeichen zu verwenden, da Tabs nicht erlaubt sind und deren Verwendung zu Fehlern führen werden.
nextcloud: volumes: - ./mnt/data:/mnt/data
Docker Container bauen lassen
Nach dem Speichern der YAML Datei und dem Verlassen des Editors führst du auf der Konsole den folgenden Befehl aus (zwingend ohne sudo)
docker-compose up -d
Die Aufgabe von docker-compose ist es, die von dir selektierten Images aus einem öffentlichen Repository herunterzuladen, zu entpacken und diese als Container innerhalb von Docker bereitzustellen und zu starten.
Auf der Konsole sieht dies währendessen ungefähr so aus:

Alle nachfolgenden Aufrufe von docker-compose aktualisieren nur noch die Konfiguration – solltest du diese verändert haben. Beachte aber, dass z.B. ein Passwortwechsel der Nextcloud Datenbank so nicht mehr möglich ist. Neue Images werden nur heruntergeladen, wenn du die zu verwendende Version eines Images in docker-compose.yml angepasst hast oder wenn du zuvor ein Image explizit z.B. via Portainer gelöscht hast. Durch das Löschen bzw. Aktualisieren von Images bleiben die eigentlichen Daten (z.B. Datenbanken oder Config Dateien), unter /volumes unberührt. Im Übrigen kannst du auch jederzeit Images manuell hinzufügen und von docker-compose installieren lassen.
Du kannst nun prüfen, ob deine Container korrekt erzeugt und gestartet wurden mit
docker ps
Die Ausgabe sieht dann ungefähr wie folgt aus (scrolle/ wische nach links, um alles zu sehen):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4675380aab5e nextcloud "/entrypoint.sh apac…" 6 days ago Up 5 days 0.0.0.0:9321->80/tcp nextcloud 8d8de9c7d4f3 linuxserver/mariadb "/init" 6 days ago Up 5 days 3306/tcp nextcloud_db 379f0c616902 linuxserver/mariadb "/init" 6 days ago Up 5 days 0.0.0.0:3306->3306/tcp mariadb 2c3dfac8cca8 portainer/portainer-ce "/portainer" 6 days ago Up 5 days 0.0.0.0:8000->8000/tcp, 0.0.0.0:9002->9000/tcp portainer-ce
Nextcloud Einrichten
Dateiordner konfigurieren
Um die externe Festplatte einzubinden, hast du oben bereits alles vorbereitet. Nun musst du Nextcloud noch mitteilen, in welchem Verzeichnis es Dateien ablegen soll. Hierfür öffnest du die Nextcloud Konfigurationsdatei mit
sudo vi volumes/nextcloud/html/config/config.php
Dann suchst du nach dem Eintrag datadirectory und änderst dessen Wert auf /mnt/data
Die Zeile muss nun so aussehen
'datadirectory' => '/mnt/data',
Administratorkonto anlegen – erster Start
Nun kannst du dich an die Einrichtung von Nextcloud machen, indem du im Browser die Adresse z.B. http://192.168.2.82:9321 aufrufst:

Nun gibst du einen Benutzernamen (z.B. admin oder administrator) und ein Passwort für das Administrator Konto ein. Da es kein separates Eingabefeld für die Wiederholung des Passworts gibt, musst du darauf achten, dass es sich auch tatsächlich um das richtige Passwort handelt. Am besten lässt du es von einem Passwortmanager generieren und kopierst es von diesem dann in das Passwortfeld. Hast du das Passwort nicht notiert oder vergessen musst du es später mühsam über die Kommandozeile auf der Datenbank ändern.
Jetzt kannst du auf Installation abschliessen klicken, um die Initialisierung von Nextcloud zu starten. Dieser Vorgang dauert ca. 5 bis 10 Minuten. Sollte (wie es bei mir passiert ist) die anschliessende Weiterleitung nicht funktionieren rufst du die Adresse, mit der du die Einrichtung gestartet hast, einfach erneut auf – die Seite neu zu laden genügt ggf. nicht.
Du siehst nun die Login Seite und loggst dich mit den zuvor festgelegten Anmeldaten ein. Nach dem Login wird die folgende Startseite angezeigt – ggf. wird noch ein Slider mit Features angezeigt, den du oben rechts durch einen Klick auf das X verschwinden lassen kannst:

Apps für Kalender und Kontakte installieren
Wenn du neben Dateien auch deine Kontakte und Termine von Nextcloud verwalten lassen willst, musst du noch die entsprechenden Apps installieren. Öffne dafür das Admin Menü oben rechts durch einen Klick auf das runde Icon mit dem A und dort im Menü dann auf + Apps. Es öffnet sich die Übersicht der standardmässig installierten Apps

Klick dann auf Vorgestellte Apps. Es handelt sich dabei um die Liste aller Apps, die durch oder von der Nextcloud Community entwickelt wurden und die für einen produktiven Einsatz geeignet sind:

Du kannst die Apps Calendar und Contacts mittels Klick auf Herunterladen und aktivieren installieren. Nach der Installation siehts du oben in der Toolbar zwei neue Einträge für die beiden Apps:

Benutzer hinzufügen
Nun kannst du auch die erforderlichen Benutzer z.B. für jedes deiner Familienmitglieder anlegen. Mach das auf jeden Fall auch dann, wenn du nur ein einzelnes Konto benötigen solltest. Klicke dafür wieder oben rechts auf das runde Icon mit dem A und dort im Menü dann auf Benutzer. Du gelangst so zur Benutzerverwaltung, über die du beliebig viele Benutzer anlegen kannst – jeder natürlich mit eigenem Kalender und Kontakten. Jeder Benutzer hat die Möglichkeit seinen Kalender mit einem anderen Benutzer zu teilen.
Wie weiter?
Das wars auch schon. Grundsätzlich kannst du Nextcloud nun verwenden – zumindest von Android und Windows aus. Apple Geräte verlangen z.B. für die Kalendersynchronisierung zwingend eine HTTPS Verbindung.
Im nächsten Beitrag zeige ich dir, wie du Nextcloud mit Traefik und einem selbst generierten Zertifikat ganz einfach mittels HTTPS verwenden kannst und wie du deine Kontakte und Termine von Nextcloud verwalten lassen kannst. Die Beiträge werde ich hier verlinken, sobald diese bereitstehen.