# Announcer i drift på klienten ved anlegget. # # ./install.sh setter opp alt, inkludert .env # docker compose up -d senere, for hånd # # Testoppsettet med dummy-IdP og to soner ligger i compose.test.yaml. name: announcer services: announcer: build: . image: announcer:local restart: unless-stopped # Vertens nett, ikke bridge. Tre grunner: # - mDNS: multicast når ikke LAN-et fra bridge-nettet # - ufw: Docker-smutthullet forsvinner, portregler virker igjen # - NetBird: wt0 er synlig direkte, så BIND_IP kan være NetBird-adressen # Appen binder selv til BIND_IP (-> ANNOUNCER_HOST); ingen ports: her. network_mode: host # Må være brukeren som eier lydsocketen på verten, ellers kommer det # ingen lyd. install.sh fyller inn id -u / id -g. user: "${PUID:-1000}:${PGID:-1000}" environment: ANNOUNCER_HOST: ${BIND_IP:-0.0.0.0} ANNOUNCER_PORT: ${ANNOUNCER_PORT:-8090} ANNOUNCER_SINK: ${ANNOUNCER_SINK:-} ANNOUNCER_TITLE: ${ANNOUNCER_TITLE:-} ANNOUNCER_PUBLIC_URL: ${ANNOUNCER_PUBLIC_URL:-} # Mesh. Se docs/mesh.md. ANNOUNCER_ROLE: ${ANNOUNCER_ROLE:-auto} ANNOUNCER_NAME: ${ANNOUNCER_NAME:-} ANNOUNCER_SENTRAL: ${ANNOUNCER_SENTRAL:-} ANNOUNCER_URL: ${ANNOUNCER_URL:-} ANNOUNCER_MDNS: ${ANNOUNCER_MDNS:-1} ANNOUNCER_LOCAL: ${ANNOUNCER_LOCAL:-1} # Hemmeligheter: hører i .env, ikke i config.toml. ANNOUNCER_MESH_SECRET: ${ANNOUNCER_MESH_SECRET:-} ANNOUNCER_PIN: ${ANNOUNCER_PIN:-} ANNOUNCER_JWT_SECRET: ${ANNOUNCER_JWT_SECRET:-} ANNOUNCER_OIDC_CLIENT_SECRET: ${ANNOUNCER_OIDC_CLIENT_SECRET:-} ANNOUNCER_SECRET_KEY: ${ANNOUNCER_SECRET_KEY:-} XDG_RUNTIME_DIR: ${XDG_RUNTIME_DIR:-/run/user/1000} TZ: ${TZ:-Europe/Oslo} volumes: # Stemmer, buffer, logg, sesjonsnøkkel, egne jingler, config.toml, planer. - ./data:/data # Lyden. Hele XDG_RUNTIME_DIR, ikke bare én socket, så både # PipeWire (pipewire-0) og PulseAudio (pulse/native + cookie) virker. - ${XDG_RUNTIME_DIR:-/run/user/1000}:${XDG_RUNTIME_DIR:-/run/user/1000} # Containeren starter ved boot, altså før noen er logget inn grafisk. # Da finnes ikke lydsocketen ennå, og avspilling feiler. Det retter seg # selv: player_cmd() slås opp per melding. På en hodeløs boks sørger # install.sh for loginctl enable-linger, så socketen finnes fra start. # Appen lytter alltid også på 127.0.0.1, så denne virker uansett BIND_IP. healthcheck: test: ["CMD", "python", "-c", "import os,urllib.request;urllib.request.urlopen('http://127.0.0.1:%s/api/config'%os.environ.get('ANNOUNCER_PORT','8090'),timeout=5)"] interval: 30s timeout: 10s start_period: 180s # første oppstart laster ned ~670 MB stemmer retries: 3