mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 13:34:40 +00:00
fcb03e304c
Per review of the first radio-container cut:
- radio_conjurer.liq: replace the cargo-culted /home/pi/Conjurer and
/home/pi/MediaFolder paths with the container layout -
/srv/betoniarka/data (playlists, script.params, persistence/radio logs),
/srv/betoniarka/music (library + emergency track) and
/srv/betoniarka/secrets/icecast_credentials.json;
interactive.persistent now uses an absolute path;
output.icecast targets host="localhost" (icecast lives in the container)
- Icecast2 now runs INSIDE the radio container: entrypoint renders
/etc/icecast2/icecast.xml from docker/icecast.xml.tpl, filling
source/admin/relay passwords from the secret provisioned at install time
(same pattern as the bot's netrc); optional admin_password/relay_password
fields default to password; icecast starts as its unprivileged user;
port 8000 exposed for listeners; extra_hosts hack removed
- compose.radio.yaml: same-path mounts for /srv/betoniarka/{data,music,secrets}
- ffmpeg.pref removed from the repo (the pin only mattered against the
RPi OS repo; bookworm ships the right FFmpeg 5.x natively) - verdict
preserved in the docs and the legacy installer note updated
- docs: updated radio section (volumes, secret provisioning, wire-up)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
42 lines
1.9 KiB
YAML
42 lines
1.9 KiB
YAML
# Radio (Liquidsoap + Icecast) VM. Run from the repository root:
|
|
# docker compose -f docker/compose.radio.yaml up -d --build
|
|
#
|
|
# Version pins are build args - override via environment, e.g.:
|
|
# LIQUIDSOAP_VERSION=2.1.4 OCAML_VERSION=4.13.0 \
|
|
# docker compose -f docker/compose.radio.yaml up -d --build
|
|
services:
|
|
conjurer-radio:
|
|
build:
|
|
context: ..
|
|
dockerfile: docker/Dockerfile.radio
|
|
args:
|
|
OPAM_VERSION: ${OPAM_VERSION:-2.1.5}
|
|
OCAML_VERSION: ${OCAML_VERSION:-4.14.2}
|
|
LIQUIDSOAP_VERSION: ${LIQUIDSOAP_VERSION:-2.1.4}
|
|
image: conjurer-radio:latest
|
|
container_name: conjurer-radio
|
|
restart: unless-stopped
|
|
environment:
|
|
# internal = null-sink pulse inside the container (headless VM default)
|
|
# host = mount the host pulse socket below and set PULSE_SERVER
|
|
PULSE_MODE: ${PULSE_MODE:-internal}
|
|
# PULSE_SERVER: unix:/tmp/pulseaudio.socket
|
|
# Hostname icecast reports in its status/YP pages:
|
|
ICECAST_HOSTNAME: ${ICECAST_HOSTNAME:-localhost}
|
|
ports:
|
|
- "8000:8000" # icecast - listeners tune in here
|
|
- "54321:54321" # harbor /skip - the bot's CONJURER_RADIO_HARBOR
|
|
- "9999:9999" # interactive harbor (keep LAN-only!)
|
|
volumes:
|
|
# Playlists, logs, script.params and the script itself (seeded on first
|
|
# run) - same paths inside and outside the container.
|
|
- /srv/betoniarka/data:/srv/betoniarka/data
|
|
# The mp3 library. Writable because the entrypoint seeds a silent
|
|
# emergency-fallback mp3 when the hardcoded single() file is missing.
|
|
- /srv/betoniarka/music:/srv/betoniarka/music
|
|
# icecast_credentials.json - provision at install like the other
|
|
# services' secrets (a CHANGE_ME placeholder is seeded if absent).
|
|
- /srv/betoniarka/secrets:/srv/betoniarka/secrets
|
|
# PULSE_MODE=host: uncomment and adjust
|
|
# - /tmp/pulseaudio.socket:/tmp/pulseaudio.socket
|