Fix Docker Compose for Mac dev mode

- Replace all ghcr.io images (blocked without auth) with local Dockerfiles:
  snapserver/snapclient from debian:bookworm-slim,
  mopidy from debian:bookworm-slim + Python/GStreamer,
  librespot disabled in dev (v0.8.0 has vergen dep bug)
- Fix duplicate 'image' and 'version' keys in compose files
- Dev mode: zones + librespot use alpine dummy containers
- Dashboard dev: use upstream node:20-alpine directly (no custom build)
- Port changed to 8090 (8080 taken by Supabase)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-26 15:12:20 +01:00
parent 77123a0df5
commit 67b9c2ba92
8 changed files with 1765 additions and 56 deletions

View File

@@ -1,5 +1,3 @@
version: "3.9"
# Development override run without any hardware.
# Usage: docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
@@ -9,50 +7,53 @@ services:
environment:
- SIGNALK_DEMO=true # Built-in demo NMEA data generator
# Spotify Connect still works over TCP on dev (no host network needed)
# Librespot disabled in dev dashboard uses mock Spotify data
librespot:
environment:
- LIBRESPOT_DISABLE_DISCOVERY=false
ports:
- "57621:57621/udp"
- "57621:57621/tcp"
image: alpine:latest
entrypoint: []
command: ["sh", "-c", "echo 'librespot: dev mode, mock active' && sleep infinity"]
restart: "no"
volumes: []
ports: []
# avahi container for AirPlay mDNS discovery on Mac/Windows
avahi:
image: flungo/avahi
restart: unless-stopped
network_mode: host
volumes:
- /var/run/dbus:/var/run/dbus
# Null-player zones no audio hardware needed
# Zones disabled in dev dashboard uses Snapcast mock
zone-salon:
command: snapclient --host snapserver --hostID zone-salon --player null
image: alpine:latest
entrypoint: []
command: ["sleep", "infinity"]
restart: "no"
zone-cockpit:
command: snapclient --host snapserver --hostID zone-cockpit --player null
image: alpine:latest
entrypoint: []
command: ["sleep", "infinity"]
restart: "no"
zone-bug:
command: snapclient --host snapserver --hostID zone-bug --player null
image: alpine:latest
entrypoint: []
command: ["sleep", "infinity"]
restart: "no"
zone-heck:
command: snapclient --host snapserver --hostID zone-heck --player null
image: alpine:latest
entrypoint: []
command: ["sleep", "infinity"]
restart: "no"
# Vite dev server with HMR instead of built nginx image
dashboard:
build: .
image: node:20-alpine
entrypoint: []
working_dir: /app
volumes:
- ./dashboard:/app
- /app/node_modules
command: sh -c "npm install && npm run dev -- --host 0.0.0.0 --port 8080"
command: ["sh", "-c", "npm install && npm run dev -- --host 0.0.0.0 --port 8090"]
ports:
- "8080:8080"
- "8090:8090"
environment:
- VITE_SNAPCAST_HOST=localhost
- VITE_SIGNALK_HOST=localhost
- VITE_MOPIDY_HOST=localhost
- VITE_JELLYFIN_HOST=localhost
# Override the build-based image
image: node:20-alpine