Deploy Muon with Docker Compose
Docker Compose is the fastest way to self-host Muon — backend, dashboard and PostgreSQL in one command.
How do I deploy Muon with Docker?
Clone the repo and run docker compose up -d. It starts the Muon backend, the Muon frontend and PostgreSQL — three services, one command.
Docker Compose is recommended for local testing, small teams, single-server deployments and migration from Umami. When you outgrow one box, the same images scale to Kubernetes without changing tools.
Prerequisites
You only need two things installed on the host — your laptop or a single server:
- Docker — the container runtime.
- Docker Compose — bundled with recent Docker Desktop and Docker Engine as the
docker composesubcommand.
No Rust toolchain, no Node.js and no separate database install are required — everything runs inside containers.
Three commands to a running stack
Clone the repository, enter it, and bring the stack up in the background:
# clone the Muon repository git clone https://github.com/runmuon/muon # enter the project directory cd muon # start backend, frontend and PostgreSQL docker compose up -d
Once the containers are healthy, open the dashboard in your browser:
http://localhost:3000
Port 3000 is the default frontend port. Create your account on first visit and you are ready to start collecting events.
Services
The Compose file defines three services that work together.
Point your tracker at Muon
Muon speaks the same tracking protocol as Umami, so the setup is a single script tag.
Drop the tracking script into your site's <head>, pointing src at your Muon host and setting your website's ID:
<script defer src="http://localhost:3000/script.js" data-website-id="your-website-id"></script>
Events are delivered to the Umami-compatible /api/send endpoint on the backend. Because the wire format matches Umami, an existing Umami tracker keeps working — just change its src to your Muon host.
Recommended for
- Local testing — spin up the full product on your laptop in minutes.
- Small teams — a single Compose stack is plenty for early traffic.
- Single-server deployments — one VM, one command, your data stays with you.
- Migration from Umami — Umami-compatible tracking plus an importer make the switch low-risk.
Need high availability, horizontal scaling or a managed database? Move to the Kubernetes deployment — the backend is stateless and scales horizontally behind PostgreSQL.
Next steps
- Scale up with the Kubernetes deployment guide.
- Read the Muon vs Umami benchmark and its methodology.
- Compare editions and features in Muon vs Umami.
Questions, answered directly.
What do I need to run Muon?
What services run?
How do I upgrade?
Can I use my own Postgres?
How do I migrate from Umami?
Run your own analytics tonight.
Clone it, docker compose up -d, and open the dashboard. When you outgrow one box, scale to Kubernetes with the same images.