version: "3.9" # Local development environment for Minstrel. # # Integration tests run against a SEPARATE database (minstrel_test) so a # test run never truncates the dev `minstrel` DB (Fable #339). Use the # Makefile target, which ensures the test DB exists then points the # tests at it: # make test-integration # (CI runs the same suite against its own ephemeral Postgres service — # see .gitea/workflows/test-go.yml.) # # Full stack (server + db): # docker compose up --build services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: minstrel POSTGRES_PASSWORD: minstrel POSTGRES_DB: minstrel networks: - minstrel # ports: # - "5432:5432" volumes: - minstrel-pgdata:/var/lib/postgresql/data # Creates minstrel_test on a fresh volume (Fable #339). No-op on # an existing volume — make test-integration ensures it instead. - ./deploy/initdb:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U minstrel -d minstrel"] interval: 5s timeout: 5s retries: 10 minstrel: build: . depends_on: postgres: condition: service_healthy environment: MINSTREL_DATABASE_URL: postgres://minstrel:minstrel@postgres:5432/minstrel?sslmode=disable MINSTREL_LOG_FORMAT: text MINSTREL_LIBRARY_SCAN_PATHS: /music MINSTREL_LIBRARY_SCAN_ON_STARTUP: "true" MINSTREL_STORAGE_DATA_DIR: /app/data networks: - minstrel ports: - "4533:4533" volumes: # Point ./music at your test library (symlink, bind-mount, whatever). # Read-only so a buggy scanner can't rewrite your files. - /mnt/Media/Music:/music:ro # Cached artifacts: playlist cover collages, artist art, album-cover # fallbacks (when the music dir is RO). Persists across container # recreates so the operator doesn't redownload art on every up/down. - minstrel-data:/app/data volumes: minstrel-pgdata: minstrel-data: networks: minstrel: