Files
d4rk_media/docker-compose.yml
T
D4rkst3randClaude Opus 5 9c690c46b9 fix: das externe Netz war fest verdrahtet und existierte nicht
"network proxy declared as external, but could not be found".

Die Hauptdatei verlangte ein externes Netz namens proxy, das es auf diesem
Server gar nicht gibt — und die Ergaenzung fuer host.docker.internal half
nicht, weil die Basis es trotzdem forderte. Das war die falsche Reihenfolge:
der Weg nach aussen ist gerade das, was sich je Aufbau unterscheidet, und
gehoert damit nicht in die Basis.

Jetzt ist docker-compose.yml neutral — von aussen nicht erreichbar, und das
ausdruecklich. Dazu waehlt man eine von zwei Ergaenzungen:

  docker-compose.proxynet.yml    Proxy haengt im selben Netz (http://minio:9000)
  docker-compose.hostports.yml   Proxy geht ueber den Host

Die Netzliste dieses Servers zeigt kein "proxy", aber ein "web" — ein
Bridge-Netz ohne Stack, also die uebliche Konvention fuer einen Reverse Proxy.
PROXY_NETWORK steht deshalb auf "web", mit dem Hinweis, es nachzusehen statt zu
glauben.

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

118 lines
4.0 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: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: fivemanage_lite
MYSQL_USER: lite
MYSQL_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen}
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- db:/var/lib/mysql
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", "mysqladmin", "ping", "-h", "localhost"]
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
# Legt den Bucket an und stellt ihn auf oeffentlich lesbar. Laeuft einmal und
# beendet sich. Ohne diesen Schritt schlaegt der erste Upload fehl, und die
# Meldung nennt den Grund nicht.
minio-init:
image: minio/mc:latest
depends_on:
minio:
condition: service_healthy
environment:
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen}
entrypoint: >
/bin/sh -c "
mc alias set local http://minio:9000 lite $$MINIO_ROOT_PASSWORD &&
mc mb --ignore-existing local/media &&
mc anonymous set download local/media &&
echo 'Bucket media ist bereit'
"
networks: [internal]
restart: "no"
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
DB_DRIVER: mysql
# Go-MySQL-Form, wie in deren docker-compose.test.yml.
DSN: lite:${DB_PASSWORD:?bitte setzen}@tcp(db:3306)/fivemanage_lite
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
AWS_REGION: auto
networks: [internal]
networks:
internal:
driver: bridge
volumes:
db:
minio: