Files
Aether/docker-compose.example.yml
T
HoneyandClaude Opus 5 13681958dd docs(deploy): schlankes Compose-Beispiel im Wurzelverzeichnis
Das Compose in deploy/ war zu über der Hälfte Kommentar (73 von 137
Zeilen) und mischte zwei Zwecke. Jetzt getrennt:

  Wurzel   docker-compose.example.yml + .env.example  – betreiben,
           zieht das fertige Abbild, braucht keinen Quelltext
  deploy/  docker-compose.yml + .env.example          – entwickeln,
           baut aus dem Quelltext, kennt alle Schalter

Die schlanke .env.example führt nur die Pflichtwerte und Office; die
vollständige Liste mit Erklärungen bleibt in deploy/.env.example.
Die kopierte /docker-compose.yml ist ignoriert – sie gehört in die
Umgebung, nicht ins Repo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 09:33:20 +02:00

88 lines
2.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Aether – Betrieb aus dem fertigen Abbild.
#
# Diese Datei und .env.example genügen für eine neue Umgebung. Der Quelltext
# muss dort nicht liegen.
#
# cp docker-compose.example.yml docker-compose.yml
# cp .env.example .env # und ausfüllen
# docker login gitea.honeyy.duckdns.org
# docker compose up -d
#
# Hintergrund und Fallstricke: README.md
# Aus dem Quelltext bauen statt ziehen: deploy/docker-compose.yml
services:
app:
container_name: aether-app
image: gitea.honeyy.duckdns.org/docker/aether:latest
restart: unless-stopped
env_file: .env
# Der Container läuft unter deiner Kennung, damit die Dateien unter
# DATA_PATH dir gehören und nicht einem Container-Nutzer.
user: "${APP_UID:-1000}:${APP_GID:-1000}"
environment:
# ocrmypdf legt Arbeitsdateien unter $HOME ab – das aus dem Image ist
# für einen abweichenden Nutzer nicht beschreibbar.
HOME: /tmp
depends_on:
postgres:
condition: service_healthy
volumes:
# Bind-Mount, kein benanntes Volume: Deine Dateien liegen als echte
# Ordner auf dem Wirt. Nur lesend anfassen – zum Hineinlegen ist WebDAV
# der Weg, sonst kennt die Datenbank die Datei nicht.
- ${DATA_PATH:-./data}:/data
networks: [internal]
ports:
# Nur loopback. TLS und Domain gehören auf deinen Reverse Proxy.
- "127.0.0.1:${APP_PORT:-8080}:8080"
postgres:
container_name: aether-db
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks: [internal]
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 5s
timeout: 5s
retries: 10
# Office – startet nur mit `docker compose --profile office up -d`.
# Kostet rund 1 GB Arbeitsspeicher; ohne Profil bleibt er aus.
# Die drei Adressen (OFFICE_URL / _PUBLIC_URL / _WOPI_URL) erklärt das README.
collabora:
container_name: aether-collabora
image: collabora/code:latest
profiles: ["office"]
restart: unless-stopped
environment:
aliasgroup1: ${OFFICE_ALIASGROUP:-http://app:8080}
# ssl.termination=true nur, wenn davor wirklich HTTPS endet – sonst
# verlangt Collabora eine wss://-Verbindung, die es nicht gibt, und der
# Editor bleibt leer. mount_jail_tree=false spart CAP_SYS_ADMIN.
extra_params: >-
--o:ssl.enable=${OFFICE_SSL:-false}
--o:ssl.termination=${OFFICE_SSL_TERMINATION:-false}
--o:mount_jail_tree=false
dictionaries: de_DE en_US
cap_add: [MKNOD]
extra_hosts:
- "host.docker.internal:host-gateway"
networks: [internal]
ports:
- "127.0.0.1:${OFFICE_PORT:-9980}:9980"
volumes:
postgres_data:
networks:
internal:
driver: bridge