Das Wurzel-Beispiel enthielt keinen einzigen OIDC-Schlüssel – wer sich über PocketID anmelden will, fand nirgends, wohin damit. Jetzt drin, samt der Warnung zu OIDC_LINK_BY_USERNAME: vor der ersten Anmeldung setzen, danach existiert das zweite Konto schon. Der Office-Container ist aus dem Beispiel raus. Es gibt drei zur Auswahl, jeder bringt eigene Variablen mit, und man will genau einen – sie stehen jetzt als anhängbare Schnipsel im README (Collabora, OnlyOffice, Euro-Office). Alle drei gegen das Beispiel geprüft: docker compose config läuft durch. Euro-Office (seit 09.06.2026, in Nextcloud Hub 26) ist ein OnlyOffice-Fork und läuft über denselben Adapter – OFFICE_PROVIDER bleibt onlyoffice, nur ein anderes Abbild. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
67 lines
2.1 KiB
YAML
67 lines
2.1 KiB
YAML
# 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
|
||
#
|
||
# Office ist bewusst nicht dabei: Es gibt drei Server zur Auswahl (Collabora,
|
||
# OnlyOffice, Euro-Office), und jeder bringt eigene Variablen mit. Den
|
||
# passenden Schnipsel zum Anhängen findest du im README.
|
||
#
|
||
# 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
|
||
|
||
volumes:
|
||
postgres_data:
|
||
|
||
networks:
|
||
internal:
|
||
driver: bridge
|