Learn how to install Muse Audio with Docker Compose.
Muse consists of multiple separate programs (pseudo-microservices)
Rust-based. It should run fine with precompiled binaries.
If you're building from source, you'll need Rust installed.
Next.js based.
If you are building from source, you will need Node.js installed.
As mentioned before, the only supported option is via Docker Compose.
Create a compose.yml file with the following content or add the services to your existing file.
services :
maki-db :
image : postgres
ports :
- "5432:5432"
environment :
POSTGRES_PASSWORD : password
maki :
image : ghcr.io/espeon/muse/maki:latest
volumes :
- "/path/to/music:/music"
# art cache folder
- "./maki/art:/art"
ports :
- "3033:3033"
env_file :
- ".env"
depends_on :
- "maki-db"
nozomi :
image : ghcr.io/espeon/muse/nozomi:latest
ports :
- "3031:3031"
env_file :
- ".env"
depends_on :
- "maki"
umi :
image : ghcr.io/espeon/umi/umi:latest
volumes :
# mount for lyrics cache
- ./tmp/db:/usr/src/app/db
ports :
- "3032:3032"
env_file :
- ".env"
networks :
default :
name : muse
You will also need a .env file with the following contents copied and filled out:
# Please, no slashes at the end for any URLs.
# Internal Maki base URL (e.g. the one that a container can reach)
INTERNAL_MAKI_BASE_URL = http://maki:3033
# External Maki base URL (the one the user can reach)
EXTERNAL_MAKI_BASE_URL = http://api.muse.lutea.co
# The base URL for Nozomi *the user can reach*
NOZOMI_BASE_URL = http://muse.lutea.co
# The base URL for Umi *the user can reach*
# Can either be a subdomain or a path, if you have that set up
UMI_BASE_URL = http://umi.muse.lutea.co
# The default oauth client is ZITADEL.
ZITADEL_CLIENT_ID = y0ur-cl13nt-1d
ZITADEL_CLIENT_SECRET = y0ur-cl13nt-s3cr3t
ZITADEL_ISSUER = https://zitadel.your.domain
AUTH_SECRET = y0ur-auth-s3cr3t
DATABASE_URL = postgres://postgres:password@maki-db:5432/postgres
# Your music mount point
MOUNT = /music
# Last.FM API creds
FM_KEY = your-fm-api-key
FM_SECRET = your-fm-secret
# Spotify API creds
SPOTIFY_ID = your-spotify-api-creds
SPOTIFY_SECRET = your-secret
# Apple Music API creds, for Umi
APPLE_MUSIC_USER_TOKEN = yourAppleMusicUserToken
# Change these if you don't need them
RUST_BACKTRACE = 1
RUST_LOG = info
You should seriously consider running muse behind a reverse proxy. They have plenty of advantages, such as setting up SSL, and custom routing.
Traefik is a config based proxy.
To use Traefik with Muse, you'll need to add it to the docker-compose (or have all the exposed services in the same network) and set up labels on the services you want to expose.
services :
reverse-proxy :
# The official v2 Traefik docker image
image : traefik:latest
# Enables the web UI and tells Traefik to listen to docker
command :
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker"
- "--entrypoints.https.address=:443"
- "--certificatesresolvers.https.acme.tlschallenge=true"
#- "--certificatesresolvers.https.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "[email protected] "
- "--certificatesresolvers.https.acme.storage=/letsencrypt/acme.json"
ports :
# The HTTP port
- "80:80"
- "443:443"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes :
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
- "./letsencrypt:/letsencrypt"
networks :
# traefik_proxy is only needed if you are splitting your services up
- traefik_proxy
- default
On each service you want to expose, add this (for this example, we'll use nozomi):
services :
nozomi :
image : ghcr.io/espeon/muse/nozomi:latest
ports :
- "3031:3031"
env_file :
- ".env"
depends_on :
- "maki"
# Add these labels
labels :
- "traefik.http.routers.nozomi.rule=Host(`muse.your.domain`)"
- "traefik.http.routers.nozomi.tls.certresolver=dns"
- "traefik.docker.network=traefik_proxy"
networks :
- traefik_proxy
- default
# Add these networks if your traefik instance is in a separate file
networks :
traefik_proxy :
external : true
name : traefik_proxy
default :
driver : bridge