Files
d4rk_media/docker-compose.yml
T
D4rkst3randClaude Opus 5 65a04af8a1 fix: BUCKET_DOMAIN ergaenzt, minio-init entfernt
Zwei Funde beim Lesen von pkg/storage/s3/s3.go und der .env.template des
Projekts.

BUCKET_DOMAIN fehlte. AWS_ENDPOINT ist nur der Weg, auf dem Lite die Dateien
HINLEGT — http://minio:9000, Containername im internen Netz, und das ist
richtig so. Die oeffentliche Adresse, die Lite nach dem Upload zurueckgibt,
baut es aus BUCKET_DOMAIN. Die Variable steht nicht im README des Projekts,
nur in dessen .env.template (BUCKET_DOMAIN=http://localhost:9000/lite-dev,
also Endpunkt plus Bucket). Ohne sie waere jeder Upload scheinbar geglueckt
und das Bild von aussen nicht abrufbar — ein Fehler, der erst im Handy
auffaellt und dort nach einem CDN-Problem aussieht.

minio-init faellt weg, und zwar nicht nur als Ballast: Lite legt den Bucket
beim Start selbst an und setzt dabei die oeffentliche Leserichtlinie. Es
ueberspringt beides, wenn der Bucket schon existiert ("already exists.
skipping creation and policy application"). Mein Init-Container kam ihm zuvor
und haette damit genau die Richtlinie verhindert, die er ersetzen sollte. Dass
es trotzdem funktioniert haette — mc anonymous set download tut dasselbe —
macht es nicht besser, sondern nur unauffaelliger.

AWS_REGION folgt jetzt deren Vorlage (eu-west-1 statt auto). Fuer MinIO ist
sie gleichgueltig, das SDK verlangt aber eine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 14:50:52 +02:00

112 lines
4.2 KiB
YAML

# Fivemanage Lite — fuer den Betrieb, ueber Portainer aus diesem Repo.
#
# Abgeleitet aus den beiden Compose-Dateien im Projekt (fivemanage/lite) und
# dem README. Deren docker-compose.yml ist fuer die ENTWICKLUNG: sie startet
# Datenbank, ClickHouse, MinIO und Jaeger, aber nicht die Anwendung, und mit
# Standardpasswoertern. Die docker-compose.test.yml zeigt dafuer, wie der
# App-Container verdrahtet wird — und dass MySQL genuegt.
#
# Bewusst NICHT dabei:
#
# ClickHouse und Jaeger. Beides ist strukturiertes Logging und Tracing. Fuer
# das Ablegen von Bildern braucht es sie nicht, und ClickHouse ist eine
# schwere Abhaengigkeit. Nachruesten geht spaeter.
#
# Ein Weg nach aussen. Diese Datei allein ist von aussen NICHT erreichbar —
# das ist Absicht, denn wie der Reverse Proxy die Dienste findet,
# unterscheidet sich je Aufbau. Waehle eine Ergaenzung:
#
# docker-compose.hostports.yml Proxy erreicht die Dienste ueber den Host
# (http://host.docker.internal:9000)
# docker-compose.proxynet.yml Proxy haengt im selben Docker-Netz
# (http://minio:9000) — der sauberere Weg
#
# In Portainer beide Pfade angeben, durch Komma getrennt:
# docker-compose.yml,docker-compose.hostports.yml
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: fivemanage_lite
POSTGRES_USER: lite
POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen}
volumes:
- pgdata:/var/lib/postgresql/data
networks: [internal]
healthcheck:
# Ohne das startet die App gegen eine Datenbank, die noch nicht
# antwortet, und beendet sich — beim ersten Hochfahren jedes Mal.
test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"]
interval: 10s
timeout: 5s
retries: 12
minio:
image: minio/minio:latest
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: lite
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen}
MINIO_SERVER_URL: ${PUBLIC_URL:?bitte setzen}
volumes:
- minio:/data
networks: [internal]
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 10s
timeout: 5s
retries: 12
lite:
# ghcr.io, NICHT Docker Hub: dort steht die Reihe bei 0.1.0-beta.16
# still, auf ghcr.io laeuft sie weiter. Die Test-Compose des Projekts
# zeigt `fivemanage/lite:latest` — das ist Docker Hub und damit alt.
image: ghcr.io/fivemanage/lite:0.1.0-beta.23
restart: unless-stopped
depends_on:
db:
condition: service_healthy
minio:
condition: service_healthy
environment:
PORT: "8080"
ENV: production
# PostgreSQL, und zwar zwingend: beta.23 geht direkt in den
# pgdriver — DB_DRIVER wird nicht ausgewertet. Eine MySQL-DSN endet in
# "pgdriver: invalid scheme: lite", weil der Treiber sie als URI liest.
#
# Die docker-compose.test.yml des Projekts zeigt MySQL, benutzt dafuer
# aber fivemanage/lite:latest von Docker Hub — und die Reihe steht dort
# bei beta.16 still. Das README hat recht, die Testdatei ist alt.
DSN: postgres://lite:${DB_PASSWORD:?bitte setzen}@db:5432/fivemanage_lite?sslmode=disable
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen}
API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen}
S3_PROVIDER: minio
AWS_ENDPOINT: http://minio:9000
AWS_ACCESS_KEY_ID: lite
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?bitte setzen}
AWS_BUCKET: media
# Aus der Vorlage des Projekts uebernommen; fuer MinIO ist die Region
# gleichgueltig, das SDK verlangt aber eine.
AWS_REGION: eu-west-1
# Woraus die OEFFENTLICHE Adresse gebaut wird, die Lite nach dem Upload
# zurueckgibt. Steht nicht im README, nur in deren .env.template — und
# ohne sie kaemen Adressen zurueck, die nur innerhalb von Docker gelten.
#
# Endpunkt plus Bucket, wie in der Vorlage
# (BUCKET_DOMAIN=http://localhost:9000/lite-dev).
BUCKET_DOMAIN: ${PUBLIC_URL:?bitte setzen}/media
networks: [internal]
networks:
internal:
driver: bridge
volumes:
pgdata:
minio: