services: recorder: build: . volumes: - ./config.ini:/app/config.ini:ro - ./recordings:/app/recordings # matches output_directory = recordings in config.ini # Soundcard (ALSA) access — comment out if you only record streams devices: - /dev/snd:/dev/snd 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"]