Die Adresse im <script>-Tag stand fest in der index.html, waehrend die CSP aus HONEYBAR_ORIGIN kam. Wer die Leiste woanders betreibt, bekam genau den Widerspruch: die CSP erlaubte den eigenen Ursprung, geladen wurde der alte. Der erste Versuch, das ueber ein Bau-Argument zu loesen, half beim fertigen Abbild nicht — dort ist der Bau vorbei, und ein Umzug haette einen Neubau verlangt. Ursprung und Schluessel stehen jetzt in /api/v1/public/config, die Oberflaeche haengt das Skript selbst ein. Beides speist sich aus derselben Variablen wie die CSP, sie koennen also nicht auseinanderlaufen, und eine Aenderung wirkt beim Neustart. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
95 lines
3.3 KiB
YAML
95 lines
3.3 KiB
YAML
# 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
|