Appearance
Public deployment
Use the repository Compose stack for a source checkout behind Traefik. For published images without Traefik, start with Local install.
Requirements
Provide a domain, TLS termination, and a running Traefik proxy. The stack expects the external network traefik_web by default. Set TRAEFIK_NETWORK if your proxy uses another network. Install Bun for the host migration and diagnostic commands.
The web app listens on container port 3000. Set ORIGIN to the exact public URL. A mismatch causes login POST requests to return 403. Worker audio returns 404 if the music mount does not match indexed file paths.
Install from a checkout
sh
git clone https://github.com/poesterlin/sole.git
cd sole
cp .env.example .env
chmod 600 .env
${EDITOR:-vi} .envSet these values before starting containers:
DOMAINandORIGIN, such assole.example.comandhttps://sole.example.com.MUSIC_LIBRARY_PATH,MUSIC_HOST, andMA_TOKENfor your existing library.- Random
POSTGRES_PASSWORDandWORKER_TOKENvalues. DATABASE_URLfor host commands.DATABASE_INTERNAL_URLfor containers. Use thepostgreshostname for the optional database service.
Generate each secret with openssl rand -hex 24. Check the database ports entry before exposing the stack. Remove it if host access is unnecessary, or bind it to localhost for host migrations.
sh
docker compose --profile database up -d postgres
bun install --frozen-lockfile
bun run db:migrate
bun run doctor -- --strict
docker compose config --quiet
docker compose up -d --wait
bun run auth:create-user --username adminOpen your public URL and follow Your first playable vibe. For an external database, omit the PostgreSQL startup command. Set both database URLs to addresses reachable from their respective callers.
Other ways
To build images from the checkout, replace the final Compose startup command with:
sh
docker compose -f compose.yaml -f compose.build.yaml up -d --build --waitFor another proxy, remove Traefik labels and route requests to web port 3000. Allow worker uploads of at least 512 KB and pass bearer authorization headers.
Reference
The Compose file defines routing, health checks, and service profiles. GET /api/health checks HTTP availability. It does not check pipeline readiness. Use bun run doctor -- --strict for database and configuration checks.
Keep the postgres-data and cluster-artifacts volumes. The latter stores clustering artifacts used for apply and rollback. See the Rust CLI for those commands.
See Authentication and configuration for account limits and service credentials. The default stack runs web and the API worker. Maintenance runs inside the web process.
