Nachdem der Raspberry Pi 5 mit allen Komponenten zufriedenstellend läuft,möchte ich ihn für Nextcloud nutzen.

Nextcloud
Dank Nextcloud ist eine freie, selbst gehostete Cloud-Lösung, die dir die volle Kontrolle über deine Daten gibt. Sie entstand 2016 als Abspaltung (Fork) von ownCloud, initiiert vom OwnCloud-Mitgründer Frank Karlitschek, nachdem es Differenzen über die zukünftige Ausrichtung des Projekts gab. Ziel war es, eine offenere und stärker community-getriebene Alternative zu schaffen. Nextcloud wird unter der Open-Source-Lizenz AGPLv3 entwickelt und ist somit frei nutzbar, veränderbar und weiter verteilbar – auch im kommerziellen Umfeld. Die Software ist überwiegend in PHP geschrieben und nutzt moderne Webtechnologien sowie eine relationale Datenbank wie Maria DB oder PostgreSQL im Backend. Dank einer modularen Architektur mit zahlreichen Apps lässt sich Nextcloud leicht erweitern – vom Datei-Hosting über Kalender und Kontakte bis hin zu Videokonferenzen oder kollaborativer Dokumentbearbeitung.
Hardware
Nextcloud benötigt in meinem Umfeld keine große Serverhardware. Ich nutze
- einen Raspberry Pi 5 16GB
- mit dem Geekworm NVME HAT
- im Terra Pi NG Case
16GB Hauptspeicher sind für Nextcloud nicht zwingend erforderlich, aber mit der 2TB SSD ist er für Nextcloud einfach perfekt geeignet.
Installation
Ich installiere Nextcloud im Dockercontainer. Maria DB läuft bereits auf meinem Datenbank Raspi, so dass ich den auch nutze. Alternativ wäre es möglich, die Datenbank auch direkt mit Nextcloud zu installieren.
Datenbank einrichten
Zunächst richte ich die Datenbank und den User ein.
create user 'nextcloud'@'%' IDENTIFIED BY '<db_user_passwort>';
create database nextcloud CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'%';
FLUSH PRIVILEGES;
Die benötigten Tabellen legt Der Nextcloud Container später automatisch an.
Verzeichnisse anlegen
Meine Daten-SSD ist unter /mnt/nextcloud gemounted. Dort müssen jetzt einige Verzeichnisse für den Container angelegt werden.
#!/usr/bin/bash
BASEDIR=/mnt/nextcloud/nextcloud
mkdir -pv ${BASEDIR}/apps
mkdir -pv ${BASEDIR}/html
mkdir -pv ${BASEDIR}/data
mkdir -pv ${BASEDIR}/config
Danach sollten unter /mnt/nextcloud/nextcloud diese Verzeichnisse existieren.

Container erzeugen
Für den Container dient dieses docker-compose.yml
version: "3.8"
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
ports:
- "9000:80" # Nur intern, nginx übernimmt externen Zugang
environment:
- MYSQL_PASSWORD=<db_user_passwort>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=database
volumes:
- /mnt/nextcloud/nextcloud/html:/var/www/html
- /mnt/nextcloud/nextcloud/apps:/var/www/html/custom_apps
- /mnt/nextcloud/nextcloud/config:/var/www/html/config
- /mnt/nextcloud/nextcloud/data:/var/www/html/data
networks:
- nextcloudnet
networks:
nextcloudnet:
driver: bridge
Achte darauf, dass Datenbank Passwort für den User so wie oben zu setzen. Wenn du Maria DB auf dem gleichen Raspberry Pi laufen lassen willst, findest du genügend Beispiele im Netz. In dem Fall musst du die Variable MSQL_HOST anders setzen oder weglassen.
mit docker-compose up -d
erzeugst du den Container.
Nextcloud installation
Der Container ist jetzt fertig und der Nextcloud Webserver kann über TCP Port 9000 aufgerufen werden. Dies ist aber nur im internen Netz möglich. Den Zugriff von außen lassen wir später von nginx regeln.
Im Browser rufe ich den URL http://<hostname_oder_ip>:9000
auf.

Als erstes müssen wir das Konto des Administrators anlegen. Gib dafür unbedingt ein starkes Passwort ein, damit der Zugang von außen abgesichert ist. Klicke dann auf Installieren.
Jetzt müssen wir uns ein paar Minuten gedulden, in der Zeit installiert Nextcloud die notwendigen Dateien und initialisiert die Datenbanktabellen.
Danach fragt Nextcloud dich, welche Apps installiert werden sollen.

Ich klicke einfach auf Empfohlene Apps installieren.
Sobald dieser Prozess beendet ist, erscheint der Hauptbildschirm von Nextcloud.

Damit ist Nextcloud prinzipiell einsatzbereit.
Remotezugriff
Um z.B. meine Fotos vom Smartphone mit der Nextcloud zu synchronisieren, benötigst zu zunächst mal einen DynDNS Dienst, der eine Domain auf die dynamisch vergebene IP-Adresse deines Internetproviders mapped.
nginx Konfiguration
In nginx müssen wir zunächst einen neuen Proxy Host erzeugen.

Unter Domain Names trägst du die Domain ein, die du bei deinem DynDNS ausgewählt hast.
Bei Forward Hostname / IP gibst du die IP-Adresse deines Nextcloud Raspis ein, bei Forward Port die 9000
, die wir im docker-compose.yml eingetragen haben.
Danach forderst du in der Registerseite SSL noch ein neues SSL Zertifikat an, um eine verschlüsselte Verbindung mit https:// zu ermöglichen.

Dazu wählst du einfach „Request a new SSL Certificate“ aus, trägst deine eMail-Adresse ein und akzeptierst die Nutzungsbedingungen.
Jetzt kannst du mit Save den neuen Proxy Host anlegen. nginx wird automatisch ein Let’s Encrypt Zertifikat erstellen und dies auch automatisch erneuern, sobald es notwendig sein sollte.
trusted_domains
In der Konfiguration von Nextcloud müssen wir jetzt noch die trusted_domains eintragen, da sonst das Forwarding von nginx nicht akzeptiert wird. Dazu öffnest du die Datei config.php
Dort müssen einige Optionen wie folgt gesetzt sein.
'trusted_domains' =>
array (
0 => 'duncan:9000',
1 => 'localhost',
2 => '192.168.178.70', // Nextcloud selbst
3 => 'database', // Reverse Proxy Hostname
4 => 'nextcloud.domain', // Domain, die nginx weiterleitet
),
'overwrite.cli.url' => 'https://nextcloud.domain',
'overwritehost' => 'nextcloud.domain',
'overwriteprotocol' => 'https',
Überall dort, wo nextcloud.domain
steht, trägst du deinen DynDNS Domainnamen ein.
Nun noch einmal den Container neu starten docker restart nextcloud
.
Jetzt solltest du mit https://nexcloud.domain auf deine neue Nextcloudinstanz zugreifen können und Desktop-PC, Laptop und Smartphone damit verbinden.
Die Synchronisation meines bereits bestehenden nextcloud Verzeichnisses hat bei ca. 42GB Umfang etwa 2h gebraucht.
Fazit
Durch dieses Setup habe ich jetzt eine Cloudlösung, die unabhängig von kommerziellen und politischen Interessen innerhalb meines eignen Kontrollbereichs liegt.