Skip to main content

Die Nextcloud docker-compose.yml

Nun kann es endlich mit Netxcloud losgehen

Dieses Template wird immer mal aktualisiert und ist ausschließlich für eine Neuinstallation gedacht!

Der Updateprozess wird später erklärt!

Anlegen des Programmordners

Ich habe folgende Programmstruktur bei mir angelegt: /home/dockeruser/docker/nextcloud

Dort werden alle benötigten Dateien zum Betrieb der Nextcloud abgelegt.

Alle nachfolgenden Schritte in dieser Anleitung beziehen sich immer auf diese Struktur!

Folgende Kommandos fügt Ihr nun als dockeruser aus:

mkdir ~/docker && mkdir ~/docker/nextcloud && cd ~/docker/nextcloud

Nun solltest ich im folgenden Verzeichnis sein: 

/home/dockeruser/docker/nextcloud#

Erstellen der Datei docker-compose.yml

Mit folgendem Kommando öffnet Ihr den Editor für die docker-compose.yml:

nano docker-compose.yml

Nun wird folgender Code dort hinein kopiert.

services:
  db:
    image: postgres:16
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: EIN_SICHERES_PASSWORT_FESTLEGEN
    volumes:
      - /home/dockeruser/docker/nextcloud/db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: unless-stopped
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - /home/dockeruser/docker/nextcloud/redis:/data

  app:
    image: nextcloud:31-fpm
    container_name: nextcloud-app
    restart: unless-stopped
    depends_on:
      - db
      - redis
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: EIN_SICHERES_PASSWORT_FESTLEGEN
      REDIS_HOST: redis
    volumes:
      -  /home/dockeruser/docker/nextcloud/nextcloud:/var/www/html
      -  /home/dockeruser/docker/nextcloud/config:/var/www/html/config

  web:
    image: nginx:alpine
    container_name: nextcloud-web
    restart: unless-stopped
    depends_on:
      - app
    ports:
      - "8088:80"
    volumes:
      -  /home/dockeruser/docker/nextcloud/nextcloud:/var/www/html:ro
      -  /home/dockeruser/docker/nextcloud/config:/var/www/html/config:ro
      -  /home/dockeruser/docker/nextcloud/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro

  collabora:
    image: collabora/code:latest
    container_name: collabora
    restart: unless-stopped
    environment:
      - domain=office\\.mein\\.dyndns\\.local
      - username=EINEN_BENUTZERNAMEN_FESTLEGEN
      - password=EIN_SICHERES_PASSWORT_FESTLEGEN
      - extra_params=--o:ssl.enable=false --o:ssl.termination=true
    ports:
      - "9980:9980"

  cron:
    image: nextcloud:31-fpm
    container_name: nextcloud-cron
    restart: unless-stopped
    depends_on:
      - db
      - redis
    volumes:
      -  /home/dockeruser/docker/nextcloud/nextcloud:/var/www/html
      -  /home/dockeruser/docker/nextcloud/config:/var/www/html/config
    entrypoint: /cron.sh

WICHTIG: Handelt hier vorsichtig und mit wirklich starken Passwörtern!

 Im nano ändert Ihr vor den Speichern den Inhalt der Variablen folgender Zeilen 9, 32, 56, 58, 59

Der Reverse-Proxy (traefik)

Um die Seite im Internet bereit zu stellen benutzen wir einen Reverse-Proxy der den Netxtcloud-Dienst ausschließlich über TLS-Verschlüsselung anbietet (https). Im Heimsetzerk ist die Nextcloud über http erreichbar, wird aber darüber nicht genutzt.

Ich betreibe einen Traefik Dienst im Docker der als ein HTTP-Reverse-Proxy und Load Balancer dient, der die Bereitstellung von Microservices erleichtert. Dieser läuft auf einer anderen Maschine, da ich dort viele Microservices laufen lasse (unter anderen dieses Wiki) und ich will die Nextcloud-Instanz nicht auch dort noch laufen lassen, aus Performanz gründen.

Zeile 56 dient zur Definition FQDNS für Collabora. Die \\. müssen drin bleiben!