radieo/docker-compose.yml
Pierre-Olivier Mercier 9cc2ede37d ingest: rename the Navidrome source to OpenSubsonic
The provider only uses standard OpenSubsonic endpoints (getPlaylists,
getPlaylist, search3, stream), so it works with any compatible server
(Navidrome, Gonic, Airsonic…), not just Navidrome.

BREAKING: environment variables are renamed
  RADIEO_NAVIDROME_URL/USER/PASSWORD/PLAYLIST -> RADIEO_SUBSONIC_*
  RADIEO_WEIGHT_NAVIDROME                     -> RADIEO_WEIGHT_SUBSONIC
Update your .env accordingly.

Internally the source key and provider are renamed navidrome -> subsonic,
aligning with the existing 'subsonic' backend and fetcher.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 18:59:22 +08:00

53 lines
2.4 KiB
YAML

services:
ingest:
build: ./ingest
image: registry.nemunai.re/radieo/ingest
volumes:
- ./cache:/cache # volume partagé avec le stream (rw : téléchargements)
- ./state:/state # état persistant (SQLite) hors du cache éphémère
- ./config:/config:ro # config éditable sans rebuild (urls.txt yt-dlp)
environment:
- RADIEO_CACHE_DIR=/cache
- RADIEO_STATE_DIR=/state
- RADIEO_HTTP_PORT=8080
# Source OpenSubsonic (Navidrome, Gonic, Airsonic… ; voir .env.example).
# Laisser vide désactive la source : le stream joue alors son cache local.
- RADIEO_SUBSONIC_URL=${RADIEO_SUBSONIC_URL:-}
- RADIEO_SUBSONIC_USER=${RADIEO_SUBSONIC_USER:-}
- RADIEO_SUBSONIC_PASSWORD=${RADIEO_SUBSONIC_PASSWORD:-}
- RADIEO_SUBSONIC_PLAYLIST=${RADIEO_SUBSONIC_PLAYLIST:-}
- RADIEO_RETENTION_KEEP=${RADIEO_RETENTION_KEEP:-20}
# Source yt-dlp : liste d'URL dans config/urls.txt (créer depuis l'exemple).
- RADIEO_YTDLP_URLS_FILE=/config/urls.txt
# Source ListenBrainz : URL du feed de recommandations (ou chemin local
# sous /config, ex. /config/recommendations.xml). Vide désactive la source.
- RADIEO_LISTENBRAINZ_URL=${RADIEO_LISTENBRAINZ_URL:-}
# Dosage du mix entre les sources (0 désactive).
- RADIEO_WEIGHT_SUBSONIC=${RADIEO_WEIGHT_SUBSONIC:-3}
- RADIEO_WEIGHT_YTDLP=${RADIEO_WEIGHT_YTDLP:-1}
- RADIEO_WEIGHT_LISTENBRAINZ=${RADIEO_WEIGHT_LISTENBRAINZ:-2}
# Canonicalizer MusicBrainz (identité MBID inter-sources ; sans clé).
- RADIEO_CANONICAL_ENABLED=${RADIEO_CANONICAL_ENABLED:-1}
- RADIEO_USER_AGENT=${RADIEO_USER_AGENT:-radieo/0.1 (personal music radio)}
healthcheck:
# python-slim n'a ni curl ni wget : on sonde /healthz en Python.
test: ["CMD", "python", "-c",
"import urllib.request; urllib.request.urlopen('http://localhost:8080/healthz')"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
restart: unless-stopped
stream:
build: ./stream
image: registry.nemunai.re/radieo/stream
depends_on:
ingest:
condition: service_healthy
ports:
- "8000:8000" # flux HTTP : http://localhost:8000/radio.mp3
volumes:
- ./cache:/cache:ro # lecture seule : secours + résolution des chemins
- ./jingles:/jingles:ro # jingles intercalés toutes les 2 chansons
restart: unless-stopped