Aus allen bisher genannten Quellen und weiteren im Internet habe ich das Projekt endlich mit folgenden Konfigurations-Dateien beendet:
nextcloud/docker-compose.yml:
Code: Alles auswählen
version: '3'
volumes:
data:
config:
db:
services:
nextcloud-db:
image: mariadb
container_name: nextcloud-db
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=****
- MYSQL_PASSWORD=****
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
networks:
- nginx-proxy_default
- default
depends_on:
- nextcloud-db
volumes:
- ./config:/var/www/html/config
networks:
nginx-proxy_default:
external: true
Das Nextcloud-Paket wird neben dem default-Netzwerk noch im externen nginx-proxy-Netzwerk registriert. So ist es möglich, dass der Proxy später noch andere Dienste bedient. Muss man nicht machen, wenn man das nicht vorhat.
nginx-proxy/docker-compose.yml:
Code: Alles auswählen
version: '2'
volumes:
docker.sock:
certs:
conf.d:
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
restart: always
ports:
- "8080:8080"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
- ./conf.d:/etc/nginx/conf.d
nginx-proxy/conf.d/nextcloud.conf:
Code: Alles auswählen
upstream docker-nextcloud {
server nextcloud;
}
server {
listen 8080 ssl;
server_name media-box.fritz.box;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# If they come here using HTTP, bounce them to the correct scheme
error_page 497 https://$server_name:$server_port$request_uri;
location / {
proxy_pass http://docker-nextcloud;
proxy_redirect off;
}
location = /.well-known/carddav {
return 301 $scheme://$server_name:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$server_name:$server_port/remote.php/dav;
}
}
Es müssen alle Ordner, die unter Volumes stehen, händisch angelegt werden (z.B. conf.d in nginx-proxy). In certs müssen die beiden in der nextcloud.conf aufgeführten Dateien (Zertifikat und Schlüssel) abgelegt werden. Die restliche Konfiguration von nginx aus dem Container habe ich (weitestgehend) unangetastet gelassen. Dort stehen weitere, allgemeine Sachen drin.
In beiden Verzeichnissen führt man zunächst ein "docker-compose up -d" aus, was die Images lädt, Volumes und Netzwerke anlegt. Danach startet man sie mit "docker-compose up". Aufgrund der Einbindung von Nextcloud in das Netzwerk von Nginx-proxy ist eine bestimmte Reihenfolge zumindest beim ersten Befehl (Schalter -d) erforderlich. Eine evtl. Fehlermeldung hilft einem aber dabei.
Ursprünglich wollte ich Nextcloud im Unterordner
https://server/nextcloud laufen lassen, weil mein DNS mir keine anderen Optionen lässt (z.B. nextcloud.server). Nach vielen Recherchen im Netz scheint das aber nicht reibungslos zu funktionieren, weil die Nextcloud-Instanz das wegen des Reverse-Proxy nicht richtig registriert, egal was für Optionen man dort oder im Nginx-Proxy setzt. Mit der Umleitung auf einen anderen als den Standardport lief es deutlich einfacher und bedurfte seitens der Nextcloud-Konfiguration keiner weiteren Optionen (wie z.B. trusted_proxies).
Eine systemd-Unit zum Starten und Restarten beider Container, wie in einem der Links erwähnt, habe ich nicht verwendet. Durch den Eintrag "restart: always" sollen die Container im Fall der Fälle automatisch neustarten. Das soll bei nginx-proxy nicht immer klappen. Bisher hatte ich noch keine Probleme.
Kleiner Hinweis zum besseren Verständnis der nginx-proxy Konfiguration (nextcloud.conf): die Einträge hinter upstream und proxy_pass sind fiktiv (müssen identisch sein), während der hinter server dem Namen des Nextcloud-Containers entspricht (container_name: nextcloud).
Ich hoffe, dass ich damit jemand anderem das lange Suchen erspare.