Lange Überschrift kurzer Sinn. Ich habe mit Docker ein Nextcloud aufgesetzt. Ich benutze nicht die Plesk Integration von Docker! Ziel war es auf einer Domain über https Nextcloud erreichbar zu machen. Deswegen habe ich über Plesk eine Domain angelegt und den nginx als Proyx von Hand (Additional nginx directives) konfiguriert.
Installation Docker
Dies sind zusammen kopierte Befehle aus der offiziellen Dokumentation. Zusätzlich habe ich direkt docker-compose mit installiert.
sudo apt-get update && sudo apt-get install ca-certificates curl && sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ich empfehle docke nicht als root laufen zu lassen. Entweder erstellt man einen eigenen Benutzer bzw. ich habe mich dazu entschieden docker unter den Benutzernamen einer meiner Domains laufen zu lassen.
sudo groupadd docker
sudo usermod -aG docker DOMAIN_USERNAME
Installation Nextcloud
Am einfachsten finde ich die Installation mit Docker-compose. Dazu habe ich im Ordner der Domain (nicht unter httpdocs) einen Ordner docker erstellt und folgende docker-compose.yml abgelegt:
services:
nextcloud:
image: nextcloud:29.0.12
container_name: NextCloud
restart: always
ports:
- 8888:80
volumes:
- /var/www/vhosts/nissel.it/docker/data/nextcloud:/var/www/html
- /etc/localtime:/etc/localtime:ro
depends_on:
- mariadb
mariadb:
image: mariadb:10.7.6
container_name: mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=passwortDeinerWahl
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=passwortDeinerWahl2
volumes:
- /var/www/vhosts/nissel.it/docker/data/mariadb:/var/lib/mysql
Wenn nun folgender Befehl eingegeben wird, passiert ein Wunder und das nexcloud image mit mariadb sind gestartet:
docker compose up -d
Die Grundlegende Konfiguration kann dann über domain.de:8888 vorgenommen werden. Soweit funktioniert dann nextcloud.
Subdomain mit HTTPs nginx Proxy einrichten

Danach muss man unter „Apache & nginx Setting“ den Proxy einrichten. Der Hacken bei proxy mode muss aus geschaltet werden, da wir nicht zum Apache weiterleiten. Diese Einstellung muss gespeichert werden, da ansonsten die nächste Einstellung nicht übernommen wird.

Unter „Additional nginx directives“ muss dann folgendes eingetragen werden. Dies leitet alles an den Docker container weiter. Die Url 127.0.0.1:9999 ist der docker proxy.
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:9999/;
proxy_read_timeout 36000s;
#Only use secure connection
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
#Allow big files to upload
client_max_body_size 0;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
Nextcloud configuration anpassen
Die config/config.php im Data Ordner von nextcloud (bei mir /var/www/vhosts/nissel.it/docker/data/nextcloud) muss für den Betrieb hinter einem Proxy angepasst werden.
'trusted_domains' =>
array (
0 => 'nissel.it:8888',
1 => 'meinedomain.nissel.it',
2 => '127.0.0.1:9999',
),
'overwrite.cli.url' => 'https://meinedomain.nissel.it',
'overwritehost' => 'meinedomain.nissel.it',
'overwriteprotocol' => 'https',
NextCloud Cron einrichten
Dazu in Plesk unter Tools & Settings einen Scheduled Task einrichten.

Hier muss der Befehl docker exec -u 33 NextCloud /usr/local/bin/php -f /var/www/html/cron.php ausgeführt werden. Dadurch wird innerhalb des Docker containers mit dem Benutzer www-data (33) das cron.php Skript gestartet.

Umgebung
Ubuntu 22.04
Plesk 18.0.67
Docker 27.5.1
Docker-compose 1.29.2
Nextcloud 29.0.12
Mariadb 10.2
Links
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/install/linux/linux-postinstall/
https://dennisnotes.com/note/20180831-nextcloud-docker-nginx-reverse-proxy/
Ein einfacherer Weg docker zu installieren: https://linuxhint.com/install_configure_docker_ubuntu/
Hallo,
vielen Dank für den Artikel.
In der docker-compose.yml leitest du den Container Port 80 an 8888 zum localhost weiter.
Aber in der Nginx directives gibst du „proxy_pass http://127.0.0.1:9999/;“ an.
Ist das so richtig?
Falls ich da etwas durcheinander bringe, ignoriere einfach das Kommentar 🙂
Hallo,
probiere auch gerade Nextcloud mit Docker und Plesk zum laufen zu bekommen.
Nextcloud läuft bei mir, aber mit „Additional nginx directives“ von dir, kann man die Dateien ohne sich anzumelden aufrufen.
Hier eine Beispiel URL zum Demo Foto welche bei der Installation mit dabei ist.
https://cloud.meineURL.com/core/preview?fileId=33&x=2880&y=1800&a=true
Hast du dafür eine Lösung?
Hallo,
die Einstellungen sind korrekt.
Das Problem war, der Browser hat das Bild gecached und ich konnte es daher über die URL aufrufen ohne Angemeldet zu sein.