# Die Nextcloud-Aufstellung, die in der goldenen Vorlage liegt.
#
# Landet als /opt/nextcloud/docker-compose.yml im Abbild. Sie ist bewusst
# KUNDENUNABHÄNGIG: kein Kennwort, kein Name, keine Domain steht hier. Alles
# Veränderliche kommt aus /opt/nextcloud/.env, die die Pipeline beim Klonen über
# cloud-init schreibt.
#
# Ein Passwort in ein Abbild zu backen hieße, es auf jeden Host und in jede
# Kundeninstanz zu kopieren — und es dort auch dann noch liegen zu haben, wenn
# der Kunde längst ein anderes gesetzt hat.

services:
  db:
    image: mariadb:11.4
    restart: always
    # READ-COMMITTED und Zeilen-Binlog sind die Einstellungen, die Nextcloud
    # selbst verlangt; ohne sie meldet die Verwaltungsübersicht dauerhaft eine
    # Warnung und einzelne Sperren verhalten sich anders als dokumentiert.
    command: >-
      --transaction-isolation=READ-COMMITTED
      --binlog-format=ROW
      --log-bin=binlog
    volumes:
      - db:/var/lib/mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:?MYSQL_PASSWORD fehlt in .env}
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 12

  app:
    image: nextcloud:apache
    restart: always

    # FALLE 1 aus Block A, nicht verhandelbar: ohne diese Zeile schlagen ALLE
    # occ-Aufrufe fehl. Die Bereitschaftsprüfung der Pipeline ruft `occ status`,
    # und ein Abbild ohne diese Zeile besteht sie nie.
    user: www-data

    ports:
      - "80:80"
    depends_on:
      db:
        condition: service_healthy
    volumes:
      - nextcloud:/var/www/html
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:?MYSQL_PASSWORD fehlt in .env}

      # Sind diese beiden gesetzt, installiert sich Nextcloud beim ersten Start
      # selbst. Genau dafür sind sie da — der Kunde soll keine
      # Einrichtungsmaske sehen.
      NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER:?NEXTCLOUD_ADMIN_USER fehlt in .env}
      NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD:?NEXTCLOUD_ADMIN_PASSWORD fehlt in .env}

      NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_TRUSTED_DOMAINS:-}

      # TLS endet bei Traefik auf dem Host, nicht hier. Ohne diese drei baut
      # Nextcloud seine eigenen Adressen mit http:// — die Anmeldung dreht sich
      # dann im Kreis, und WebDAV-Zugänge zeigen auf eine Adresse, die es so
      # nicht gibt.
      OVERWRITEPROTOCOL: https
      OVERWRITEHOST: ${NEXTCLOUD_PRIMARY_DOMAIN:-}
      TRUSTED_PROXIES: ${TRUSTED_PROXIES:-172.16.0.0/12}

volumes:
  db:
  nextcloud:
