ITDarmstadt Logo Small
Darmstadt, Germany
Folge uns auf
Eigener Nextcloud Server mit Docker Compose und Traefik! Addons: MariaDB, Redis, Onlyoffice

Eigener Nextcloud Server mit Docker Compose und Traefik! Addons: MariaDB, Redis, Onlyoffice

Herzlich willkommen bei ITDarmstadt! 👋

Heute zeigen wir euch, wie ihr euren eigenen Nextcloud Server mithilfe von Docker Compose einrichtet. Dabei integrieren wir MariaDB, Traefik, Redis und Onlyoffice, um eine umfassende All-in-One-Cloudumgebung zu schaffen.

Warum kein Collabora? Nun, wir betreiben alles auf einem einzigen Server. Collabora erfordert einen eigenen Server mit einer öffentlichen Adresse. Es gestaltet sich schwierig, Collabora in ein Docker-Compose-Set-up zu integrieren. Sollte es jemand geschafft haben, bitte teilt eure Erfahrungen in den Kommentaren. In unserem Fall verwies Collabora immer auf 127.0.0.1, obwohl der Collabora-Server eine IP-Adresse aus dem Docker-Netzwerk hatte 🫠.


WERBUNG: Wir bieten auch Installations-Services an. Wenn ihr jemanden sucht, der die Einrichtung und Verwaltung eurer Cloud übernimmt, schreibt uns gerne an. Wir machen euch gerne ein Angebot.


Wichtig: Noch kein Traefik installiert? Dann schaut doch in diesem Blog vorbei: https://goneuland.de/traefik-v2-3-reverse-proxy-mit-crowdsec-im-stack-einrichten/

Zu Beginn sollte Docker Compose idealerweise bereits installiert sein. Falls ihr das bereits erledigt habt, könnt ihr direkt zu den Schritten nach der Installation von Docker Compose springen. Wir zeigen es beispielhaft für Linux über die SSH-Konsole.

Als Erstes ladet ihr die neueste Version aus dem GitHub-Repository herunter. Gebt hierfür den folgenden Befehl in die Konsole ein. Die neueste Version findet ihr hier zum Download: https://github.com/docker/compose Ersetzt einfach die Versionsnummer in der URL.

$ curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

Danach erteilen wir Docker Compose die Ausführungsrechte:

$ sudo chmod +x /usr/local/bin/docker-compose

Überprüft anschließend, ob Docker Compose korrekt installiert wurde:

$ docker-compose --version

Hinweis: Die Anleitung zur Installation von Docker Compose auf anderen Betriebssystemen findet ihr hier: https://docs.docker.com/compose/install/

Als nächstes wählen wir einen Speicherort für unsere Docker Compose-Datei aus. Wir bevorzugen persönlich /opt/.

Beginnen wir mit dem Aufbau einer Ordnerstruktur, die ihr später verwenden könnt, um eure Docker-Compose-Sammlung zu erweitern. 😂

Gebt dazu Folgendes in das Terminal ein:

mkdir -p /opt/containers/nextcloud/{database,app,data,onlyoffice}

Im Ordner „database“ findet ihr später die Datenbankdaten. Im Ordner „app“ findet ihr später die Nextcloud-Daten sowie die Konfigurationsdatei für Anpassungen. Im Ordner „data“ werden die Benutzerdaten gespeichert. Falls ihr später kein Verschlüsselungs-Plugin installiert, findet ihr die Daten hier im Klartext. Daher bitte Verschlüsselung verwenden!🔒

Im Ordner „onlyoffice“ findet ihr alle Dateien des Onlyoffice-Servers.

Als nächstes erstellen wir die „docker-compose.yml“-Datei. Gebt dafür den folgenden Befehl ins Terminal ein:

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

Nun könnt ihr das folgende Skript kopieren und in nano einfügen:

version: '3.3'

services:

  nextcloud-db:
    image: mariadb:latest
    container_name: nextcloud-db
    command: --transaction-isolation=READ-COMMITTED --innodb_read_only_compressed=OFF
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=MYSQLRootPasswort #<--- Passwort ändern.
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=MYSQLUserPasswort #<--- Passwort ändern.
      - MYSQL_INITDB_SKIP_TZINFO=1
      - MARIADB_AUTO_UPGRADE=1
    networks:
      - default

  nextcloud-redis:
    image: redis:latest
    container_name: nextcloud-redis
    hostname: nextcloud-redis
    networks:
        - default
    restart: unless-stopped
    command: redis-server --requirepass RedisServerPasswort #<--- Passwort ändern

  nextcloud-onlyoffice:
    container_name: nextcloud-onlyoffice
    image: onlyoffice/documentserver:latest
    networks:
      - proxy
    stdin_open: true
    tty: true
    restart: always
    environment:
      - JWT_SECRET=PasswortFürOnlyOfficeServer #<--- Passwort ändern.
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.onlyoffice.rule=Host(`onlyoffice.itdarmstadt.de`)" #<--- Eure OnlyOffice-Domain.
      - "traefik.http.routers.onlyoffice.entrypoints=websecure"
      - "traefik.http.routers.onlyoffice.tls.certresolver=myresolver"
      - "traefik.http.routers.onlyoffice.tls=true"
      - "traefik.http.routers.onlyoffice.middlewares=onlyoffice-headers"
      - "traefik.http.services.onlyoffice.loadbalancer.server.port=80"
      - "traefik.docker.network=traefik_webgateway"
      ## Middleware definition
      # Headers for onlyoffice, https://github.com/ONLYOFFICE/onlyoffice-nextcloud/issues/151
      - "traefik.http.middlewares.onlyoffice-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
      - "traefik.http.middlewares.onlyoffice-headers.headers.accesscontrolalloworiginlist=*"
    volumes:
      - ./onlyoffice/logs:/var/log/onlyoffice
      - ./onlyoffice/data:/var/www/onlyoffice/Data
      - ./onlyoffice/lib:/var/lib/onlyoffice
      - ./onlyoffice/db:/var/lib/postgresql

  nextcloud-app:
    image: nextcloud:latest
    container_name: nextcloud-app
    restart: unless-stopped
    depends_on:
      - nextcloud-db
      - nextcloud-redis
    environment:
      - TRUSTED_PROXIES=172.16.0.0/12
      - OVERWRITEPROTOCOL=https
      - OVERWRITECLIURL=https://cloud.itdarmstadt.de #<--- Eure Nextcloud-Domain.
      - OVERWRITEHOST=cloud.itdarmstadt.de #<--- Eure Nextcloud-Domain.
      - REDIS_HOST=nextcloud-redis
      - REDIS_HOST_PASSWORD=RedisServerPasswort #<--- Passwort von Redis rein.
      - MYSQL_PASSWORD=MYSQLUserPasswort #<--- Passwort von DB User rein.
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-db
    volumes:
      - ./app:/var/www/html
      - ./daten:/var/www/html/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud.entrypoints=websecure"
      - "traefik.http.routers.nextcloud.rule=(Host(`cloud.itdarmstadt.de`))" #<--- Eure Nextcloud-Domain.
      - "traefik.http.routers.nextcloud.tls=true"
      - "traefik.http.routers.nextcloud.tls.certresolver=http_resolver"
      - "traefik.http.routers.nextcloud.service=nextcloud"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-dav,default@file"
      - "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

Nachdem ihr die Werte an den markierten Stellen entsprechend angepasst habt, könnt ihr Nextcloud starten, indem ihr Folgendes in das Terminal eingebt:

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

Jetzt sollte Nextcloud starten. Wenn ihr alles korrekt gemacht habt und die Anleitungen verständlich waren, könnt ihr versuchen, die Webseite zu öffnen, indem ihr die ausgewählte Domain in eurem Internetbrowser eingebt. Es kann manchmal 1-2 Minuten dauern, bis Traefik das Zertifikat installiert hat. Wenn es nach 5 Minuten noch nicht funktioniert, überprüft mit https://dnschecker.org/, ob eure Domain bereits auf die IP-Adresse verweist. Manchmal liegt es am DNS – wie immer. 😂

Um Nextcloud zu stoppen, gebt ihr Folgendes ins Terminal ein:

docker-compose -f /opt/containers/nextcloud/docker-compose.yml down

Zum Troubleshooting könnt ihr Docker Compose im Attached-Modus starten, um die Logs zu lesen:

docker-compose -f /opt/containers/nextcloud/docker-compose.yml up

Drückt STRG + C, um dort wieder herauszukommen.

Nach dem Start von Nextcloud solltet ihr zur Einrichtungsseite gelangen und einen Administrator erstellen. Verwendet ein sicheres Passwort mit möglichst vielen Zeichen! Die Nextcloud ist von außen erreichbar, daher ist Sicherheit besonders wichtig. Vergesst nicht, die Zwei-Faktor-Authentifizierung zu aktivieren, um den Admin-Account zusätzlich zu schützen.

Sobald das erledigt ist, könnt ihr über den Avatar oben rechts „Apps“ auswählen und Onlyoffice installieren.

Geht danach zu den Verwaltungseinstellungen (auch wieder rechts oben zu finden) und wählt „ONLYOFFICE“ aus. Gebt bei „Die Adresse von ONLYOFFICE Docs“ eure onlyoffice.domain.de in https:// eures OnlyOffice-Servers ein. Außerdem müsst ihr noch in die erweiterten Einstellungen und dort noch einmal den internen Dockernamen von Onlyoffice reinschreiben und wie der Onlyoffice Server intern auf euren Nextcloud Docker zugreift.
Beispiel:

Ihr müsst auch die Checkbox „Zertifikatsüberprüfung deaktivieren (unsicher)“ aktivieren, da es sonst zu Problemen kommen kann. Der spätere Verbindungsaufbau erfolgt über euch und euren OnlyOffice-Server auf https, daher macht euch da keine Sorgen.

Ansonsten könnt ihr euch nun in Nextcloud austoben. Es könnte sinnvoll sein, auch die SMTP-Einstellungen zu konfigurieren. Falls ihr mal ein Passwort reseten müsst. Falls ihr keinen Mail-Server habt wird es Zeit. Schaut euch dazu gern mal Mailcow an. Ist kostenlos und funktioniert Top.

Das wäre es dann auch schon! Ihr habt euren eigenen Nextcloud-Server eingerichtet. Wenn ihr Fragen habt, besucht gerne unseren Discord-Chat.

Firewall nicht vergessen einzurichten.
Ports sind hier zu finden: https://github.com/nextcloud/all-in-one#which-ports-are-mandatory-to-be-open-in-your-firewallrouter

Viel Spaß damit! Euer ITDARMSTADT Team ❤️

Related Posts
3 Comments
Denis

Super Anleitung! Ich habe schon Ewigkeiten nach einer funktionierenden Lösung gesucht. Danke Vielmals!

Patrick

Mh, naja lernen tut man da nicht viel. Man sollte schon erklären was da gemacht wird in dem docker-compose

Servus Patrick,
da hast du Recht und da werde ich aufjedenfall nacharbeiten, um dort näher ins Detail noch zu gehen.
War auch ehr erstmal eine Installationsanleitung.
Gruß Samuel 👋

Leave a Reply

Your email address will not be published.Required fields are marked *