Files
Aether/deploy/docker-compose.yml
T
HoneyandClaude Opus 5 7fc8bb51d5 docs: Doku nach fuenf Runden aufraeumen
Nach dem Hin und Her um Profile, Ports und Escaping war Sediment
liegengeblieben:

- README: "Drei Adressen fuer drei Richtungen" stand zweimal; die
  Profil-Erklaerung war eine Chronik ("das war nicht immer so") statt
  einer Anleitung. Jetzt ein Absatz.
- .env.example (beide): der Office-Block begann mit einem Hinweis auf
  COMPOSE_PROFILES, den man nur braucht, wenn man selbst ein Profil
  anlegt - als erste Zeile eines Abschnitts unbrauchbar. Raus.
- TESTING: der grosse Office-Abschnitt behauptete noch "Getestet mit
  Collabora im Compose-Profil office" und pruefte "ohne --profile startet
  der Container nicht". Beides ueberholt.
- Umlaute vereinheitlicht (laeuft neben gehoert), $-Hinweis von vier auf
  zwei Zeilen.

Dazu zwei neue Zeilen in der Fehlertabelle des README: Container entsteht
gar nicht (Profil) und Container laeuft, aber kein Menuepunkt (leerer
OFFICE_PROVIDER oder falscher Port).

Geprueft: beide Compose-Dateien gueltig, jeder Schluessel aus dem Code
steht in deploy/.env.example, keine doppelten Absaetze mehr.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 12:27:19 +02:00

95 lines
3.3 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 – Entwicklung: aus dem Quelltext bauen.
#
# docker compose -f deploy/docker-compose.yml build app
# docker compose -f deploy/docker-compose.yml up -d
#
# Zum **Betreiben** ist docker-compose.example.yml im Wurzelverzeichnis
# gedacht: schlanker und ohne Quelltext, es zieht das fertige Abbild.
#
# Erklärungen zu allem hier: README.md
services:
app:
container_name: aether-app
build:
# Kontext ist das Wurzelverzeichnis – das Abbild braucht backend/ und
# frontend/, nicht nur diesen Ordner.
context: ..
dockerfile: deploy/Dockerfile
image: gitea.honeyy.duckdns.org/docker/aether:latest
restart: unless-stopped
env_file: .env
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: echte Ordner auf dem Wirt, per SFTP
# erreichbar. Nur lesend anfassen – zum Hineinlegen ist WebDAV der Weg,
# sonst kennt die Datenbank die Datei nicht.
- ${DATA_PATH:-./data}:/data
networks: [internal]
ports:
# Standardmäßig nur loopback – davor gehört dein Reverse Proxy mit TLS.
# Zum Ausprobieren im LAN: APP_BIND=0.0.0.0 in der .env. Dann liegt die
# Anmeldung allerdings unverschlüsselt im Netz.
- "${APP_BIND:-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 – kostet rund 1 GB, deshalb hier im Profil (Entwicklerdatei, immer
# von der Kommandozeile): ... --profile office up -d
# Die Schnipsel im README haben bewusst kein Profil: Oberflächen wie
# Portainer oder Dockge kennen `--profile` nicht, dort entstünde der
# Container nie – ohne Fehlermeldung.
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:
- "${APP_BIND:-127.0.0.1}:${OFFICE_PORT:-9980}:9980"
volumes:
postgres_data:
# "data" ist bewusst weg – die Dateien liegen unter DATA_PATH auf dem Wirt.
# Die Datenbank bleibt ein benanntes Volume: An ihre Dateien geht man nicht
# von Hand, und Postgres mag fremde Besitzer nicht.
networks:
internal:
driver: bridge