services:
ganymede:
image: ghcr.io/zibbp/ganymede:latest
container_name: ganymede
restart: unless-stopped
depends_on:
db:
condition: service_healthy # wartet bis Postgres "healthy" ist
ports:
- "4000:4000" # Web-UI & API → http://<NAS-IP>:4000
environment:
# Basis
TZ: Europe/Berlin
# Rootless (siehe README: PUID/PGID; Ganymede chown’t config/temp/logs beim Start)
PUID: "1026" # Synology-User-ID (bei dir meist 1026)
PGID: "100" # Synology-Gruppe "users"
# DB (muss zu 'db' unten passen)
DB_HOST: db
DB_PORT: "5432"
DB_USER: ganymede
DB_PASS: supersecret_db_password
DB_NAME: ganymede_prd
DB_SSL: disable
# Twitch App (in dev.twitch.tv anlegen; später in der UI Kanäle hinzufügen)
TWITCH_CLIENT_ID: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TWITCH_CLIENT_SECRET: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# (Optional) Frontend/SSO/Locale – bei Bedarf in der UI unter Admin > Settings konfigurierbar
REQUIRE_LOGIN: "true"
DEFAULT_LOCALE: "de"
SHOW_LOCALE_BUTTON: "true"
# Speicherdirekte (kannst du so lassen; die Mounts unten müssen dazu passen)
VIDEOS_DIR: /data/videos
TEMP_DIR: /data/temp
LOGS_DIR: /data/logs
CONFIG_DIR: /data/config
# explizit setzen – viele Images benutzen XDG_CACHE_HOME -> /data/.cache
XDG_CACHE_HOME: /data/.cache
# VErsuch die Leistung zu reduzieren
# geht aber nicht. hab es wieder rausg genommen.
#MAX_VIDEO_DOWNLOAD_EXECUTIONS: "1"
#MAX_VIDEO_CONVERT_EXECUTIONS: "1"
#MAX_CHAT_DOWNLOAD_EXECUTIONS: "1"
#MAX_CHAT_RENDER_EXECUTIONS: "1"
volumes:
# Passen die Pfade an deine NAS-Struktur an (Ordner vorher anlegen!)
- /volume2/docker/ganymede/temp:/data/temp
- /volume2/docker/ganymede/logs:/data/logs
- /volume2/docker/ganymede/config:/data/config
- /volume1/920main/twitch/ganymede/:/data/videos
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:4000/api/v1/health"] # einfacher Healthcheck
interval: 30s
timeout: 5s
retries: 5
logging:
driver: json-file
options:
max-size: "1m"
max-file: "1"
db:
image: postgres:16-alpine
container_name: ganymede-db
restart: unless-stopped
environment:
POSTGRES_USER: ganymede
POSTGRES_PASSWORD: supersecret_db_password
POSTGRES_DB: ganymede_prd
TZ: Europe/Berlin
POSTGRES_HOST_AUTH_METHOD: scram-sha-256
POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256 --auth-local=scram-sha-256"
volumes:
- /volume2/docker/ganymede/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ganymede -d ganymede_prd"]
interval: 10s
timeout: 5s
retries: 5
logging:
driver: json-file
options:
max-size: "1m"
max-file: "1"