Änderungsstand: 2023-11-17
Nachtrag: Am Ende sollte es egal sein, ob man diese Variante oder NextcloudPi verwendet. Sicherlich spricht einiges für NextcloudPi, speziell, wenn mehrere Benutzer davon profitieren. Auch das Backup ist unter NextcloudPi etwas komfortabler gelöst – von Snapshots Mal ganz abgesehen. Aber nicht immer habe ich einen weiteren Pi zur Hand und auch diese Variante lässt sich relativ gut einrichten und verwenden.
Ich verwende in diesem Setup linuxserver/mariadb, redis:alpine und linuxserver/nextcloud.
1. Docker-Compose | Nextcloud installieren
Zeile 42 im Script unbedingt anpassen! Hier sollte der direkte Pfad für /mnt/ssd/sharedfolders/appdata/lsnextcloud/data zu einer Freigabe auf einer großen Platte zeigen. Es können, bei intensiver Benutzung, große Datenmengen, im Laufe der Zeit, anfallen! Ich verwende für meine Tests ebenfalls den Ordner /mnt/ssd/sharedfolders/appdata/…, was ich allerdings hier nicht empfehle.
Alternative: Im Nextcloud selbst „ext. Datenträger“ einrichten und verwenden.
Erstellen des Compose-Verzeichnisses, des NC-Verzeichnisses und anlegen der docker-compose.yml:
sudo mkdir -p /home/dockervolumes/lsnextcloud
cd /home/dockervolumes/lsnextcloud && sudo nano docker-compose.yml
version: '2'
services:
lsdb:
image: lscr.io/linuxserver/mariadb
hostname: lsdb
restart: unless-stopped
volumes:
- /mnt/ssd/sharedfolders/appdata/lsnextcloud/db:/config
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=PASSWORT4568
- MYSQL_DATABASE=lsnextcloud
- MYSQL_USER=lsnextcloud
- MYSQL_PASSWORD=PASSWORT456
- TZ=Europe/Berlin
ports:
- 3307:3306
networks:
- lsdb_network
lsredis:
image: arm64v8/redis
hostname: lsredis
restart: unless-stopped
command: redis-server --requirepass PASSWORT789 # Redis Passwort
ports:
- 6378:6379
networks:
- lsdb_network
lsapp:
image: lscr.io/linuxserver/nextcloud:latest
hostname: lsnextcloud
restart: unless-stopped
volumes:
- /mnt/ssd/sharedfolders/appdata/lsnextcloud/config:/config
#
# Achtung! Hier ein Verzeichnis einer HDD wählen! data ist nicht angebracht, wenn dieses auf einer kleinen ssd liegt!
#
- /mnt/ssd/sharedfolders/appdata/lsnextcloud/data:/data
#
environment:
- PUID=1000
- PGID=1000
- REDIS_HOST=lsredis
- REDIS_HOST_PASSWORD=PASSWORT789 # Redis Passwort von oben
- TZ=Europe/Berlin
ports:
- 444:443
links:
- lsdb
- lsredis
networks:
- lsdb_network
volumes:
lsdb:
lsnextcloud:
lsredis:
networks:
lsdb_network:
attachable: true
Strg-x, y, Enter
Quelle:
https://hub.docker.com/r/linuxserver/mariadb
https://hub.docker.com/_/nextcloud
cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d
Jetzt, nachdem alle 3 Container gestartet wurden, mind. 1 Minute warten, damit nach dem ersten Start die Datenbank initialisiert werden. Das dauert einen Moment.
Auf zur Einrichtung Nextcloud
Nextcloud mit http s://Server-IP:444 starten und einrichten. Dazu einfach ein Administrator-Konto mit Passwort anlegen und die Installation starten. Fertig
Erweitert –> Weiter zu (IP-Adresse (unsicher)

Das ist im privatem Netzwerk normal, da kein anerkanntes, sondern nur ein selbst signiertes Zertifikat installiert ist.
Im Startfenster auf „Speicher & Datenbank“ klicken, MySQL/MariaDB wählen und den Rest ausfüllen, wie im rechten Fenster zu sehen. Benutzername und dazugehöriges Passwort werden neu angelegt.


Wurde Nextcloud installiert, kann man es intern verwenden.

PS: Der Fehler „504 Gateway Time-out“, sollte dieser erscheinen (meist bei den Raspis oder betagter Hardware der Fall), ist nicht weiter relevant. Einfach etwas warten und das Browserfenster aktualisieren.
Kleine Makulatur, inkl. Hinzufügen von Redis:
sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/www/nextcloud/config/config.php
Folgendes am Ende, aber vor der letzten Klammer einfügen:
'default_phone_region' => 'DE',
Folgendes eine Zeile vor vor dieser Zeile
'dbtype' => 'mysql',
eintragen (Eigenes Passwort, eigenen Port und IP-Adresse des eigenen Servers verwenden):
'overwriteprotocol' => 'https',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '192.168.1.200',
'password' => 'PASSWORT789',
'port' => 6378,
),
Strg-x, y, Enter
sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/nginx/site-confs/default.conf
Folgende Zeile einfügen (da steht schon einiges an add_header drin – einfach dort mit rein):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Strg-x, y, Enter
cd /home/dockervolumes/lsnextcloud && sudo docker compose stop
Folgender Befehl ist Optional:
cd /home/dockervolumes/lsnextcloud && sudo docker compose rm
mit y bestätigen
Docker-Compose Neustart:
cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d
Wer nun Nextcloud nur intern verwenden möchte, kann hier aufhören. NC funktioniert, mit einigen Warnhinweisen unter Administrationseinstellungen, die aufgrund der bisherigen Konfigurationen, bestehen bleiben, aber für den reinen internen Betrieb, nicht relevant sind.
Folgende Schritte sind nur notwendig, wenn man Nextcloud von Außen, über eine Domain, erreichbar machen möchte.
Installation NPM (Nginx Proxy Manager)
Meine angelegte Domain bei DuckDNS lautet troubadix.
Konfiguration Nginx Proxy Manager für Nextcloud
„NginX Proxy Manager“ Weboberfläche:
- „Host“
- „Proxy Host“
- „Add Proxy Host“
- Details:
- Domain Names: lsnextcloud.troubadix.duckdns.org
- (Eigene Domain verwenden)
- Scheme: https
- (444 ist ein HTTP S-Port)
- Forward Hostname / IP: die Server-IP, worauf sich Nextcloud befindet
- Forward Port: 444
- (444 ist mein verwendeter linuxserver/nextcloud – Port)
- Cache Assets: On
- Websockets Support: On
- Block Common Exploits: On
- Access List: nichts ändern
- Domain Names: lsnextcloud.troubadix.duckdns.org
- SSL:
- SSL Certificate: „Request a new SSL Certificate“
- Force SSL: On
- Http/2 Support: On
- HSTS Enabled: ON
- Email Address for Lets‘ Encrypt: Eine gültige Email-Adresse
- I Agree to the LE Terms of Service: On
- Advanced:
- Details:
- „Add Proxy Host“
- „Proxy Host“
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location ^~ /.well-known { return 301 /index.php$uri; }
try_files $uri $uri/ =404;
}
Save
Nach ca. 10-20 Sekunden wurde das Zertifikat erstellt und der Dienst Nextcloud ist unter der angewendeten Domain, gesichert, von Außen erreichbar. Allerdings würde jetzt Nextcloud den Zugriff mit folgendem Fehler verweigern:

Dafür muss ich noch die Konfigurationsdatei ändern.
Nextcloud-Konfigurationsdatei anpassen
(eigenes Konfigurationsverzeichnis verwenden)
sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/www/nextcloud/config/config.php
Folgendes am Ende, aber vor dem letzten ); einfügen:
'trusted_proxies' =>
array (
0 => '192.168.1.200:80',
),
Die Ip-Adresse unter Trusted Proxies ist die IP-Adresse des „Nginx Proxy Manager“ inkl. Portangabe.
Die Zeile:
'overwrite.cli.url' => 'https://192.168.1.200:444',
ändern in (eigene Domain verwenden):
'overwrite.cli.url' => 'https://lsnextcloud.troubadix.duckdns.org',
Dann die „Trusted Domains“ erweitern:
array (
0 => '192.168.1.200:444',
1 => 'lsnextcloud.troubadix.duckdns.org',
2 => 'localhost',
),
Strg-x, y, Enter
Info: So in etwa sieht die Nextcloud-Config am Ende aus, wenn diese geändert wurde:
Beispiel-Config einer früheren Installation:
<?php
$CONFIG = array (
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '192.168.1.200',
'password' => 'PASSWORT789',
'port' => 6378,
),
'datadirectory' => '/data',
'instanceid' => 'rgzj3hhidl8f',
'passwordsalt' => 'DH8bsk5rF+gkfsRPKrkdZn62Wjps5N',
'secret' => 'gHks7kdhste8KDtNlSdThRsBdhe5j3U72Nr/zFudrL/fL2',
'trusted_domains' =>
array (
0 => '192.168.1.200:444',
1 => 'lsnextcloud.troubadix.duckdns.org',
2 => 'localhost',
),
'dbtype' => 'mysql',
'version' => '25.0.2.3',
'overwrite.cli.url' => 'https://lsnextcloud.troubadix.duckdns.org',
'dbname' => 'lsnextcloud',
'dbhost' => 'lsdb',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'lsnextcloud',
'dbpassword' => 'PASSWORT456',
'installed' => true,
'default_phone_region' => 'DE',
'overwriteprotocol' => 'https',
'trusted_proxies' =>
array (
0 => '192.168.1.200:80',
),
);
Optional: Docker neu starten (wird aber nicht benötigt):
cd /home/dockervolumes/lsnextcloud && sudo docker compose stop
cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d
Nextcloud kann nun über die Domain geöffnet werden. In meinem Fall ist das:
lsnextcloud.troubadix.duckdns.org
Es wird automatisch zu http s verbunden und Nextcloud ist erreichbar.
Nun noch die E-Mail Konfiguration erledigen:
Zuerst unter „Persönliche Informationen“ eine gültige E-Mail angeben. Dann:
- Administratoreinstellungen
- Grundeinstellungen
E-Mail-Server: SMTP-Einstellungen vornehmen. Web.de funktioniert zuverlässig.

Wurde alles soweit übernommen, sind alle Sicherheitshinweise behoben.
SSL Labs bringt ein A+ zur Ausgabe.
.
Weitere Infos zu Nextcloud gibt es hier unter Nextcloud.