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>
This commit is contained in:
1 parent
62e80dd2f5
commit
13681958dd
5 files changed
+228
-105
No files matched your search
@@ -0,0 +1,87 @@
|
||||
# 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
|
||||
Reference in new issue
Block a user