Nextcloud + Traefik Installation mit Docker

Folgender Artikel erklärt die Installation von Nextcloud + Traefik mit Docker. Ich habe es unter AWS getestet, sollten also keine Probleme auftreten.

Solltet ihr dennoch ein Problem feststellen, meldet euch einfach per Mail.

1. Traefik Installation

Installation der Software Komponenten

sudo apt install curl git python3-pip apache2-utils

Docker installieren

curl -fsSL https://get.docker.com -o get-docker.sh
sh docker.sh

Docker-Compose installieren

pip3 install docker-compose

Traefik Verzeichnisse und Dateien anlegen

mkdir -p /opt/container/traefik
touch /opt/container/traefik/data/acme.json
chmod 600 /opt/containers/traefik/data/acme.json
touch /opt/container/traefik/data/traefik.yml
touch /opt/container/traefik/data/dynamic.yml

Dateien anpassen

nano /opt/container/traefik/data/traefik.yml

Folgenden Text einfügen und darauf achten eine Mail Adresse anzugeben

api:
  dashboard: true

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  file:
    filename: /opt/container/traefik/data/dynamic.yml
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

certificatesResolvers:
  http:
    acme:
      email: !MAIL EINTRAGEN!
      storage: acme.json
      httpChallenge:
        entryPoint: http
nano /opt/container/traefik/data/dynamic.yml

Folgenden Text einfügen

ttp:
  middlewares:
    secHeaders:
      headers:
        browserXssFilter: true
        contentTypeNosniff: true
        frameDeny: true
        sslRedirect: true
        #HSTS Configuration
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000
        customFrameOptionsValue: "SAMEORIGIN"

    https-redirect:
      redirectScheme:
        scheme: https

Docker-Compose anlegen und anpassen

nano /opt/container/traefik/docker-compose.yml

Folgenden Text einfügen und darauf achten die Host Variablen zu ändern und ein User+Passwort zu vergeben. Den Hash dazu erzeugt ihr mit folgendem Befehl

echo $(htpasswd -nb EUERUSERNAME EUERPASSWORT) | sed -e s/\\$/\\$\\$/g
Version: '3'

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: always
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`HIER.DOMAIN.DE`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`HIER.DOMAIN.DE`)"
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"

networks:
  proxy:
    external: true

Netzwerk für den Proxy anlegen

docker network create proxy

Traefik starten

docker-compose -f /opt/container/traefik/docker-compose.yml up -d

2. Nextcloud installieren

Verzeichnisse anlegen

mkdir -p /opt/container/nextcloud/app
mkdir /opt/container/nextcloud/database

Docker-Compose anlegen

nano /opt/container/nextcloud/docker-compose.yml

Folgenden Text einfügen und MySQL User + PW + Datenbank, sowie die Host Variablen ändern

version: '3.3'

services:
  nextcloud-db:
    image: mariadb
    container_name: nextcloud-db
    command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
    restart: always
    volumes:
      - /opt/container/nextcloud/database:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_INITDB_SKIP_TZINFO=1

  nextcloud-app:
    image: nextcloud
    container_name: nextcloud-app
    restart: always
    depends_on:
      - nextcloud-db
    volumes:
      - /opt/container/nextcloud/app:/var/www/html
    links:
      - nextcloud-db

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud-app.entrypoints=http"
      - "traefik.http.routers.nextcloud-app.rule=Host(`HIER.DOMAIN.DE`)"
      - "traefik.http.middlewares.nextcloud-app-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.nextcloud-app.middlewares=nextcloud-app-https-redirect"
      - "traefik.http.routers.nextcloud-app-secure.entrypoints=https"
      - "traefik.http.routers.nextcloud-app-secure.rule=Host(`HIER.DOMAIN.DE`)"
      - "traefik.http.routers.nextcloud-app-secure.tls=true"
      - "traefik.http.routers.nextcloud-app-secure.tls.certresolver=http"
      - "traefik.http.routers.nextcloud-app-secure.service=nextcloud-app"
      - "traefik.http.services.nextcloud-app.loadbalancer.server.port=80"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.nextcloud-app-secure.middlewares=nextcloud-dav"
      - "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav"
      - "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/"

    networks:
      - proxy
      - default

networks:
  proxy:
    external: true
  default:
    driver: bridge

Nextcloud starten

docker-compose -f /opt/container/nextcloud/docker-compose.yml up -d

Berechtigung ändern

chown -R www-data:www-data /opt/container/nextcloud/app/

Netxtcloud Setup durchführen. !WICHTIG! MariaDB anstelle von SQLite auswählen

Datenbank optimieren

docker exec --user www-data nextcloud-app php occ db:add-missing-indices
docker exec --user www-data nextcloud-app php occ db:convert-filecache-bigint

Reverse Proxy konfigurieren. Auslesen der IP Adresse

docker inspect traefik

Eintragen der IP unter

nano /opt/container/nextcloud/app/config/config.php
'trusted_proxies' => '172.19.0.4/16'

Umstellen auf https. Ändern folgender Zeile

'overwrite.cli.url' => 'https://HIER.DOMAIN.DE',

Hinzufügen folgender Einträge

'overwriteprotocol' => 'https',
'overwritehost' => 'HIER.DOMAIN.DE',

Fertig. Die Container sollten restartet werden.

Schreibe einen Kommentar

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