CluPilotCloud/deploy/bootstrap/assets/docker-compose.yml

77 lines
2.7 KiB
YAML

# 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: