Nextcloud-Container mit selbst signiertem Zertifikat

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 08.10.2020 21:28:59

Hallo zusammen,

ich würde gern einen Nextcloud-Container mit selbst signiertem Zertifikat einrichten. Bisher habe ich ausschließlich Anleitungen für die Verwendung von let's encrypt gefunden. Dieses Szenario schließe ich aber aus, da dafür nach meinem Verständnis der Rechner/Container von außen erreichbar sein muss, um das Zertifikat zu bekommen.
Nun habe ich viel gelesen und rumgebastelt, komme aber leider nicht weiter. Die docker-compose.yml Datei sieht so aus:

Code: Alles auswählen

version: '3' 

services:

  proxy:
    image: jwilder/nginx-proxy
    container_name: nextcloud-proxy
    networks:
      - extern 
    ports:
      - 8009:80
      - 8010:443
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped
  
  db:
    image: mariadb
    container_name: nextcloud-mariadb
    networks:
      - extern 
    volumes:
      - db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=******
      - MYSQL_PASSWORD=*******
      - MYSQL_DATABASE=*****
      - MYSQL_USER=*****
    restart: unless-stopped
  
  app:
    image: nextcloud:latest
    container_name: nextcloud-app
    networks:
      - extern
    depends_on:
      - proxy
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./app/config:/var/www/html/config
      - ./app/data:/var/www/html/data
      - ./app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=server
      - VIRTUAL_PROTO=https
    restart: unless-stopped

volumes:
  proxy:
  nextcloud:
  db:

networks:
  extern:
Rufe ich im Browser http://localhost:8009 auf, bekomme ich ein "503 Service Temporarily Unavailable" "nginx/1.17.6" und unter https://localhost:8010 ein "Die Website ist nicht erreichbarlocalhost hat die Verbindung unerwartet geschlossen." Das funktioniert immer schon mal auch von einem anderen Rechner aus.

Es ist mein erster Gehversuch mit Containern und mir fehlt an manchen Stellen noch das Verständnis. Bitte bringt Licht in meine Dunkelheit.

Gruß, piotrusch

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von Lord_Carlos » 08.10.2020 22:16:52

piotrusch hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 21:28:59
Hallo zusammen,
Dieses Szenario schließe ich aber aus, da dafür nach meinem Verständnis der Rechner/Container von außen erreichbar sein muss, um das Zertifikat zu bekommen.
Ich meine das geht mit der DNS challenge https://letsencrypt.org/de/docs/challen ... -challenge
___________________

Map mal die ports von nextcloud und guck ob du direkt drauf zugreifen kannst.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von habakug » 08.10.2020 22:35:07

Hallo,

das sollte man beachten (wenn man jwilder/nginx-proxy verwendet):
[1] hat geschrieben:Note: If you use VIRTUAL_PROTO=https and your backend container exposes port 80 and 443, nginx-proxy will use HTTPS on port 80. This is almost certainly not what you want, so you should also include VIRTUAL_PORT=443
Vielleicht hilft das schon...

Gruss, habakug

[1] https://github.com/nginx-proxy/nginx-proxy
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 09.10.2020 20:16:58

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 22:16:52
piotrusch hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 21:28:59
Hallo zusammen,
Dieses Szenario schließe ich aber aus, da dafür nach meinem Verständnis der Rechner/Container von außen erreichbar sein muss, um das Zertifikat zu bekommen.
Ich meine das geht mit der DNS challenge https://letsencrypt.org/de/docs/challen ... -challenge
Davon hatte ich auch schon mal gelesen. Und es hätte auch den Vorteil, die lästigen Fehlermeldungen im Browser loszuwerden. Allerdings muss man den Kopfstand, so wie ich es verstanden habe, alle drei Monate mit der Erneuerung des Zertifikats machen. Und das würde ich gern vermeiden.
Map mal die ports von nextcloud und guck ob du direkt drauf zugreifen kannst.
Kannst du mir das bitte genauer erklären. Grundsätzlich habe ich das Port-Thema verstanden, aber durch die Verschachtelung der Container und ihrer eigenen Netzwerkeben bin ich raus.
Wie erwähnt bekomme ich unter 8009 immerhin schon eine Nginx-Meldung, was ich als Teilerfolg deute.
habakug hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 22:35:07
Hallo,

das sollte man beachten (wenn man jwilder/nginx-proxy verwendet):
[1] hat geschrieben:Note: If you use VIRTUAL_PROTO=https and your backend container exposes port 80 and 443, nginx-proxy will use HTTPS on port 80. This is almost certainly not what you want, so you should also include VIRTUAL_PORT=443
Vielleicht hilft das schon...
Hat leider keine Änderung gebracht.

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von Lord_Carlos » 09.10.2020 21:56:19

piotrusch hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 20:16:58
Davon hatte ich auch schon mal gelesen. Und es hätte auch den Vorteil, die lästigen Fehlermeldungen im Browser loszuwerden. Allerdings muss man den Kopfstand, so wie ich es verstanden habe, alle drei Monate mit der Erneuerung des Zertifikats machen. Und das würde ich gern vermeiden.
Wenn dein DNS Anbieter eine API hat, dann ist das alle kein Problem. Passiert dann automatisch.
piotrusch hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 20:16:58
Kannst du mir das bitte genauer erklären. Grundsätzlich habe ich das Port-Thema verstanden, aber durch die Verschachtelung der Container und ihrer eigenen Netzwerkeben bin ich raus.

Den port 443 (oder 80?) vom Nextcloud container zu einem port mappen.

Code: Alles auswählen

    ports:
      - 8011:443 
Und dann direkt auf den 8011 zugreifen. Ohne durch Nginx zu gehen.

Wenn du eh kein SSL willst und nur intern benutzten willst dann brauchst du kein nginx container. Da ist ja schon einer im nextcloud container drinne.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 16.10.2020 22:23:26

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 21:56:19
piotrusch hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 20:16:58
Davon hatte ich auch schon mal gelesen. Und es hätte auch den Vorteil, die lästigen Fehlermeldungen im Browser loszuwerden. Allerdings muss man den Kopfstand, so wie ich es verstanden habe, alle drei Monate mit der Erneuerung des Zertifikats machen. Und das würde ich gern vermeiden.
Wenn dein DNS Anbieter eine API hat, dann ist das alle kein Problem. Passiert dann automatisch.
Aber dafür muss doch der Rechner vom Internet aus ständig erreichbar sein, oder?
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 21:56:19
Den port 443 (oder 80?) vom Nextcloud container zu einem port mappen.

Code: Alles auswählen

    ports:
      - 8011:443 
Und dann direkt auf den 8011 zugreifen. Ohne durch Nginx zu gehen.

Wenn du eh kein SSL willst und nur intern benutzten willst dann brauchst du kein nginx container. Da ist ja schon einer im nextcloud container drinne.
Mit Port 80 klappt das. Aber eine unverschlüsselte Verbindung ist auch intern keine Option für mich.

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von Lord_Carlos » 16.10.2020 22:36:57

piotrusch hat geschrieben: ↑ zum Beitrag ↑
16.10.2020 22:23:26

Aber dafür muss doch der Rechner vom Internet aus ständig erreichbar sein, oder?
Ne, nicht vom, aber zum internet.
Kein port muss nach aussen offen sein.
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
09.10.2020 21:56:19
Mit Port 80 klappt das. Aber eine unverschlüsselte Verbindung ist auch intern keine Option für mich.
Wunderbar, war auch nur ein test ob das funktioniert.
Jetzt wissen wir das es am Nginx container liegt.

Wie sieht denn da die config aus?
Vielleicht auch mal in die logs gucken?
docker-compose logs -f proxy

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 21.10.2020 19:30:09

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
16.10.2020 22:36:57
piotrusch hat geschrieben: ↑ zum Beitrag ↑
16.10.2020 22:23:26

Aber dafür muss doch der Rechner vom Internet aus ständig erreichbar sein, oder?
Ne, nicht vom, aber zum internet.
Kein port muss nach aussen offen sein.
Diese Option würde ich bevorzugen. Allerdings ist es mir nicht gelungen, eine verständliche Dokumentation dazu zu finden. Die Erklärung auf der let's encrypt-Seite, die du verlinkt hast, fordert einiges an Verständnis rund um die Zertifikatserstellung und DNS-Funktion. Irgendwo habe ich in diesem Zusammenhang auch gelesen, dass sich durch die DNS-Challenge das Risiko erhöht, dass der Rechner angegriffen wird. Das kann eigentlich nur sein, wenn er erreichbar ist, oder?

Was bedeutet dabei, dass mein DNS-Anbieter eine API hat? Gehts um meinen Provider oder den Verwalter der Domain, der vermutlich AVM ist, weil ich über einen VPN-Zugang von myfritz gehe? Keine Ahnung, ob das da möglich ist. Extra eine gekaufte Domain möchte ich dafür nicht benutzen.
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
16.10.2020 22:36:57
piotrusch hat geschrieben: ↑ zum Beitrag ↑
16.10.2020 22:23:26
Mit Port 80 klappt das. Aber eine unverschlüsselte Verbindung ist auch intern keine Option für mich.
Wunderbar, war auch nur ein test ob das funktioniert.
Jetzt wissen wir das es am Nginx container liegt.

Wie sieht denn da die config aus?
Vielleicht auch mal in die logs gucken?
docker-compose logs -f proxy
Die config ist in der docker-compose-Datei in meinem ersten Post enthalten. Darüber hinaus habe ich nichts für den Proxy konfiguriert.

Die logs sehen so aus:

Code: Alles auswählen

nextcloud-proxy | Custom dhparam.pem file found, generation skipped
nextcloud-proxy | forego     | starting dockergen.1 on port 5000
nextcloud-proxy | forego     | starting nginx.1 on port 5100
nextcloud-proxy | dockergen.1 | 2020/10/21 19:17:50 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
nextcloud-proxy | dockergen.1 | 2020/10/21 19:17:50 Running 'nginx -s reload'
nextcloud-proxy | dockergen.1 | 2020/10/21 19:17:51 Error running notify command: nginx -s reload, exit status 1
nextcloud-proxy | dockergen.1 | 2020/10/21 19:17:51 Watching docker events
nextcloud-proxy | dockergen.1 | 2020/10/21 19:17:51 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'
nextcloud-proxy | dockergen.1 | 2020/10/21 19:20:06 Received event die for container 2614b7e96f1b
nextcloud-proxy | dockergen.1 | 2020/10/21 19:20:07 Received event stop for container 2614b7e96f1b
nextcloud-proxy | dockergen.1 | 2020/10/21 19:20:07 Generated '/etc/nginx/conf.d/default.conf' from 2 containers
nextcloud-proxy | dockergen.1 | 2020/10/21 19:20:07 Running 'nginx -s reload'
nextcloud-proxy | nextcloud-proxy exited with code 2

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von Lord_Carlos » 21.10.2020 20:05:44

Und wenn du den Fehler Provozierst wird kein weitere Logeintrag hinzugefuegt?

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 23.10.2020 09:02:18

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
21.10.2020 20:05:44
Und wenn du den Fehler Provozierst wird kein weitere Logeintrag hinzugefuegt?
Hier das Protokoll zu folgenden Tests:

1. Zugriff auf http://server:8009
2. Zugriff auf https://server:8010
3. Zugriff auf http://server:8010

Code: Alles auswählen

nextcloud-proxy | Custom dhparam.pem file found, generation skipped
nextcloud-proxy | forego     | starting dockergen.1 on port 5000
nextcloud-proxy | forego     | starting nginx.1 on port 5100
nextcloud-proxy | dockergen.1 | 2020/10/23 08:54:48 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
nextcloud-proxy | dockergen.1 | 2020/10/23 08:54:48 Running 'nginx -s reload'
nextcloud-proxy | dockergen.1 | 2020/10/23 08:54:48 Error running notify command: nginx -s reload, exit status 1
nextcloud-proxy | dockergen.1 | 2020/10/23 08:54:48 Watching docker events
nextcloud-proxy | dockergen.1 | 2020/10/23 08:54:48 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'
nextcloud-proxy | nginx.1    | server 192.168.120.50 - - [23/Oct/2020:08:55:07 +0200] "GET / HTTP/1.1" 503 197 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0"
nextcloud-proxy | nginx.1    | server 192.168.120.50 - - [23/Oct/2020:08:55:07 +0200] "GET /favicon.ico HTTP/1.1" 503 197 "http://server:8009/" "Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0"
nextcloud-proxy | dockergen.1 | 2020/10/23 08:55:44 Received event die for container 2614b7e96f1b
nextcloud-proxy | dockergen.1 | 2020/10/23 08:55:45 Received event stop for container 2614b7e96f1b
nextcloud-proxy | dockergen.1 | 2020/10/23 08:55:45 Generated '/etc/nginx/conf.d/default.conf' from 2 containers
nextcloud-proxy | dockergen.1 | 2020/10/23 08:55:45 Running 'nginx -s reload'
nextcloud-proxy | nextcloud-proxy exited with code 2
Die letzten beiden scheinen ins Leere gelaufen zu sein. Firefox sagt, dass keine Verbindung aufgebaut werden konnte.

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 06.11.2020 15:25:19

Es gibt weitere Vorschläge im Netz, das Problem zu lösen. Erwähnen möchte ich:

https://github.com/nextcloud/docker/tre ... ariadb/fpm
https://lehrerfortbildung-bw.de/st_digi ... index.html

Und hier noch die nginx-proxy Seite von jwilder mit hilfreichen Erklärungen.

https://github.com/nginx-proxy/nginx-proxy

Allerdings bin ich auch damit nicht ans Ziel gekommen. Aktuell probiere ich mit der zweiten und dritten URL. Damit ist es mir gelungen, einerseits die Nextcloud-Instanz und andererseits die whoami-Testseite über ssl anzusprechen. Bei beidem zusammen hapert es allerdings noch. Mit diesen beiden docker-compose.yml Dateien (die Container laufen anders als in den vorherigen Versuchen unabhängig voneinander):

Nextcloud-Instanz:

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=***
   - MYSQL_USER=***
 nextcloud:
  image: nextcloud
  container_name: nextcloud
  ports:
   - 8080:80
  depends_on:
   - nextcloud-db
  volumes:
   - ./config:/var/www/html/config
Nginx-proxy-Instanz:

Code: Alles auswählen

version: '2'

volumes:
 docker.sock:
 ssl:
 conf.d:

services:
 nginx-proxy:
  image: jwilder/nginx-proxy
  container_name: nginx-proxy
  ports:
   - "80:80"
   - "443:443"
  volumes:
   - ./certs:/etc/nginx/certs:ro
   - ./conf.d:/etc/nginx/conf.d
   - /var/run/docker.sock:/tmp/docker.sock:ro

 whoami:
  image: jwilder/whoami
  container_name: whoami
  environment:
   - VIRTUAL_HOST=server
Und hier noch die nextcloud.conf aus dem Nginx-Verzeichnis

Code: Alles auswählen

upstream  {
	172.22.0.3 :8080;
}

server {
	listen 443 ssl;
	ssl_certificate	/etc/nginx/certs/server.crt;
	ssl_certificate_key	/etc/nginx/certs/server.key;
	location / {
		proxy_pass http://;
	}
}
Damit bekomme ich eine ssl-Verbindung zur whoami-Seite des Proxys, aber nicht zu Nextcloud. Hier fehlt mir definitiv das Wissen, wie das Zusammenspiel der Container untereinander funktioniert.

Welcher Eintrag kommt bei upstream rein (aktuell ist es die der Nextcloud-Instanz)?
Welcher bei VIRTUAL_HOST?
Was kommt bei Trusted_Proxies in der config.php von Nextcloud rein?
Brauche ich denn das whoami-Image überhaupt oder ist das nur zum Testen?

Wenn das jemand weiß, dann freue ich mich über eine anfängertaugliche Erklärung :)

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 02.01.2021 21:42:52

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.

Benutzeravatar
jph
Beiträge: 1049
Registriert: 06.12.2015 15:06:07
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Greven/Westf.

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von jph » 03.01.2021 12:13:48

piotrusch hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 21:28:59
Bisher habe ich ausschließlich Anleitungen für die Verwendung von let's encrypt gefunden. Dieses Szenario schließe ich aber aus, da dafür nach meinem Verständnis der Rechner/Container von außen erreichbar sein muss, um das Zertifikat zu bekommen.
Es reicht für die Zertifikatsinstallation von Let’s Encrypt aus, wenn Port 443 erreichbar ist. Den musst du für https ohnehin verfügbar machen, weil ansonsten gar kein Zugriff die Nextcloud möglich ist.
piotrusch hat geschrieben: ↑ zum Beitrag ↑
08.10.2020 21:28:59
ich würde gern einen Nextcloud-Container mit selbst signiertem Zertifikat einrichten
Erfahrungsbericht dazu: ich habe Nextcloud (bzw. vor Urzeiten ownCloud) mit einem selbstgekochten Zertifikat verwendet. LE gab es damals noch nicht. Um es kurz zu machen: das ist Mist, weil nichts und niemand das selbstgekochte Zertifikat ohne weiteres akzeptieren wird. Du kannst nicht mal Fotos vom Kindergartenfest verteilen, weil du allen Muttis erklären musst, dass sie dafür eine Ausnahme im Browser anlegen müssen. („nächstes Mal macht das mein Mann mit Dropbox, da kommen nicht so komische Meldungen“)

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 04.01.2021 17:20:05

Danke für den Hinweis.

Weiter oben hatte ich beschrieben, dass die Instanz explizit nicht von außen erreichbar sein soll, deshalb fällt letsencrypt weg. Die Browser-Meldung ist lästig, aber für die internen Zwecke okay.

piotrusch
Beiträge: 61
Registriert: 08.10.2020 21:12:39

Re: Nextcloud-Container mit selbst signiertem Zertifikat

Beitrag von piotrusch » 22.01.2021 20:45:12

In die docker-compose.yml für den Nextcloud-Container hat sich ein kleiner Fehler eingeschichen. Unter "Volumes" fehlte die Zeile für das "data"-Verzeichnis:

Code: Alles auswählen

   - ./data:/var/www/html/data
Und hier noch die vollständige Datei:

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

Antworten