Files
Aether/build/docker-compose.yml
T
marcandClaude Opus 5 471679ff64 refactor(repo): deploy/ heißt jetzt build/ – der Name sagte das Gegenteil
"deploy" klang nach Ausrollen, drin steht das Gegenteil: das Bau-Rezept
und das Compose, das aus dem Quelltext baut. Ausgerollt wird mit
docker-compose.example.yml im Wurzelverzeichnis. Marc ist genau darüber
gestolpert.

Zwei Dinge mussten dafür vorher fest werden, sonst hätte das Umbenennen
die Entwicklungsdatenbank gekostet: Compose leitet den Projektnamen aus
dem Ordnernamen ab und hätte unter "build" ein neues, leeres Projekt mit
neuem, leerem Volume angelegt. Der Projektname steht deshalb jetzt im
Compose (name: aether), und das Volume trägt seinen alten Namen
ausdrücklich weiter (deploy_postgres_data) – unschön, aber die Daten
bleiben.

Ebenfalls angepasst: .gitignore. Dort stand deploy/.env; nach dem
Umbenennen wäre build/.env nur noch von der allgemeinen .env-Zeile
gedeckt gewesen.

Nachgeprüft nach dem Umzug: Abbild baut, Stapel startet, 113 Dateien in
der Datenbank wie vorher, Volume unverändert deploy_postgres_data,
GET / → 200.

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

108 lines
4.0 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 build/docker-compose.yml build app
# docker compose -f build/docker-compose.yml up -d
#
# Zum **Betreiben** ist docker-compose.example.yml im Wurzelverzeichnis
# gedacht: schlanker und ohne Quelltext, es zieht das fertige Abbild.
#
# Die Einstellungen kommen aus build/.env – als Vorlage dient die eine
# .env.example im Wurzelverzeichnis: cp .env.example build/.env
#
# Erklärungen zu allem hier: README.md
# Der Projektname steht hier fest und wird **nicht** aus dem Ordnernamen
# abgeleitet. Sonst hinge er daran, wie der Ordner gerade heißt: Beim
# Umbenennen von deploy/ nach build/ hätte Compose ein neues, leeres Projekt
# angelegt – mit einer neuen, leeren Datenbank.
name: aether
services:
app:
container_name: aether-app
build:
# Kontext ist das Wurzelverzeichnis – das Abbild braucht backend/ und
# frontend/, nicht nur diesen Ordner.
context: ..
dockerfile: build/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:
# Fester Name, aus demselben Grund. Er stammt noch aus der Zeit, als der
# Ordner „deploy" hieß – umbenennen hieße hier: neues Volume, leere
# Datenbank. Der unschöne Name ist der Preis dafür, die Daten zu behalten.
name: deploy_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