Nextcloud im Docker Container hinter nginx Proxy unter Plesk betreiben

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 install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose

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:

version: "3.3"

services:
  nextcloud:
    image: nextcloud:18.0.3
    container_name: NextCloud
    restart: always
    ports:
      - 8888:80
    volumes:
      - /var/www/vhosts/nissel.it/docker/data/nextcloud:/var/www/html
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.2
    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

Hosting Settings der Domain

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.

Proyx mode aus schalten

Unter „Additional nginx directives“ muss dann folgendes eingetragen werden. Dies leitet alles an den Docker container weiter.

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',
  ),

  'overwrite.cli.url' => 'https://meinedomain.nissel.it',
  'overwritehost'     => 'meinedomain.nissel.it',
  'overwriteprotocol' => 'https',

Umgebung

Ubuntu 18.04
Plesk 18.0.25
Docker 19.03.8
Docker-compose 1.17.1
Nextcloud 18.0.3
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/

https://docs.nextcloud.com/server/15/admin_manual/configuration_server/reverse_proxy_configuration.html

4 Antworten auf „Nextcloud im Docker Container hinter nginx Proxy unter Plesk betreiben“

  1. 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 🙂

  2. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert