# 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