Nextcloud Server - Traefik Integration

Worum geht es in diesem Artikel?

Nextcloud ist eine webbasierte Dateiverwaltung und es ist Open Source. In diesem Artikel werde ich nicht auf die Installation einer Nextcloud Instanz eingehen, sondern die Anbindung über Traefik zeigen.

Voraussetzung

  • Linux Server mit docker und docker-compose installiert
  • Ein domain name für diese Anwendung (z.B. nextcloud.example.eu)
  • Funktionierende Traefik Reverse Proxy Konfiguration (siehe Trafik)
  • Funktionierende Nextcloud Installation inkl. Datenbank und Webbrowser als Docker Container

docker-compose Erweiterung

Hier eine Beispielkonfiguration:

version: '3.1'

services:
  cloud:
    image: nextcloud
    networks:
      - web
    hostname: <nextcloud.example.eu>
    volumes:
      - ./nextcloud_data:/var/www/html/data
      - /data/pictures:/mnt
      - /var/local/cloud/html/:/var/www/html/
      - /var/local/cloud/mpm_prefork.conf:/etc/apache2/mods-available/mpm_prefork.conf
    environment:
      MYSQL_DATABASE: <database_name>
      MYSQL_USER: <database_user>
      MYSQL_PASSWORD: <database_password>
      MYSQL_HOST: <database_hostname_or_ip>

    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.http.routers.cloud.rule=Host(`<nextcloud.example.eu>`)"
      - "traefik.http.routers.cloud.entrypoints=https"
      - "traefik.http.routers.cloud.tls=true"
      - "traefik.http.routers.cloud.tls.certresolver=letsencrypt"
      - "traefik.http.routers.cloud.middlewares=cloud-redirect,secureHeaders@file"
      - "traefik.http.services.cloud.loadbalancer.server.port=80"
      - "traefik.http.services.cloud.loadbalancer.server.scheme=http"
      - "traefik.http.middlewares.cloud-redirect.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.cloud-redirect.redirectregex.replacement=https://$${1}/remote.php/dav/"

networks:
  web:
    external: true

Die wesentlichen Punkte für die Anbindung an Traefik:

  • Die Verbindung zwischen Nextcloud und Traefik erfolgt über das gemeinsame Netzwerk “web”. Dieses Netzwerk muss bei beiden Containern verwendet werden und angelegt worden sein - docker network create web
  • Traefik Router, Service und Middlewares werden über die labels definiert.
  • Der Traefik Router hört nur auf den entryPoint “https”, routet alle Pakete die an den Host <nextcloud.example.eu> gerichtet sind zu Nextcloud weiter und verlangt TLS als Protokoll.
  • traefik.http.routers.cloud.tls.certresolver=letsencrypt holt die Let’s encrypt Zertifikate für den Hostname <nextcloud.example.eu>
  • In diesem Fall wird secureHeaders aktiviert traefik.http.routers.cloud.middlewares=secureHeaders@file welche im Traefik Konfigurationsfile definiert sind.
  • Die letzten 2 Zeilen nehmen Redirects für carddav und caldav vor.

Siehe auch