services: recorder: build: . volumes: - ./config.ini:/app/config.ini:ro - ./recordings:/app/recordings # matches output_directory = recordings in config.ini - ./asound.conf:/etc/asound.conf:ro # dsnoop shared-capture config # Soundcard (ALSA) access — comment out if you only record streams devices: - /dev/snd:/dev/snd ipc: host # share IPC namespace with host so dsnoop shared memory works restart: unless-stopped stop_grace_period: 30s # allow time for open files to be closed cleanly web: build: . volumes: - ./recordings:/recordings:ro ports: - "8080:8080" restart: unless-stopped command: ["python", "web.py", "--dir", "/recordings"]