- Download or run DMRHub (see options below)
- On first launch, the setup wizard opens automatically in your browser
- Follow the wizard to configure the application and create your first admin user
- DMRHub restarts into normal operation — you're done!
For advanced configuration options, see the Configuration Guide.
DMRHub ships with SQLite as the default database, so no external services are required for a basic deployment. Optionally, you can use:
- PostgreSQL or MySQL as the database backend (for larger or multi-server deployments)
- Redis for distributed pub/sub (for multi-instance scaling)
See the Configuration Guide for database setup instructions.
Docker images are published at ghcr.io/usa-reddragon/dmrhub.
Supported architectures: linux/amd64, linux/arm64, linux/arm/v7, linux/arm/v6.
Tags follow Git releases. For example, v1.0.4 produces tags :v1.0.4, :1.0.4, :1.0, and :1. Using a less specific tag like :1 lets you receive updates automatically.
sudo docker run \
-d \
--restart unless-stopped \
-p 3005:3005 \
-p 62031:62031/udp \
-v dmrhub-data:/data \
--name dmrhub \
ghcr.io/usa-reddragon/dmrhub:1On first run, open http://localhost:3005 in your browser to complete the setup wizard.
To provide a pre-configured YAML file:
sudo docker run \
-d \
--restart unless-stopped \
-p 3005:3005 \
-p 62031:62031/udp \
-v /path/to/config.yaml:/config.yaml:ro \
-v dmrhub-data:/data \
--name dmrhub \
ghcr.io/usa-reddragon/dmrhub:1sudo docker run \
-d \
--restart unless-stopped \
-e SECRET=your-random-secret \
-e PASSWORD_SALT=your-random-salt \
-e HTTP_CANONICAL_HOST=https://dmrhub.example.com \
-p 3005:3005 \
-p 62031:62031/udp \
-v dmrhub-data:/data \
--name dmrhub \
ghcr.io/usa-reddragon/dmrhub:1To adjust port mappings, change the host-side port number (before the :).
Binary releases are available at GitHub Releases.
Binaries are released for many platforms including:
- linux/amd64, linux/arm64, linux/arm, linux/386, linux/riscv64
- darwin/amd64, darwin/arm64
- windows/386, windows/amd64
- freebsd, openbsd, netbsd variants
Only Linux is officially supported. On other platforms, ensure the configuration is provided appropriately.
sudo mkdir /etc/dmrhub
sudo groupadd --system dmrhub
sudo useradd --home-dir /etc/dmrhub --no-create-home --no-user-group \
--system --shell /sbin/nologin dmrhub
sudo chown dmrhub:dmrhub /etc/dmrhub
sudo chmod 770 /etc/dmrhubsudo mv DMRHub /usr/local/bin/
sudo chmod a+x /usr/local/bin/DMRHubPlace a config.yaml in /etc/dmrhub/:
sudo -u dmrhub nano /etc/dmrhub/config.yamlSee the Configuration Guide for the full reference. At minimum, you need:
secret: "your-random-secret-here"
password-salt: "your-random-salt-here"
http:
canonical-host: "https://dmrhub.example.com"Alternatively, leave the config empty and use the setup wizard on first launch.
The repository includes a SystemD unit file at hack/dmrhub.service.
sudo cp hack/dmrhub.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now dmrhub.servicejournalctl -f -u dmrhub.service| Port | Protocol | Purpose |
|---|---|---|
| 3005 | TCP | HTTP server (web UI, API, WebSocket) |
| 50000 | UDP | IPSC server (if enabled) |
| 62031 | UDP | MMDVM DMR server |
| 62035 | UDP | OpenBridge server (if enabled) |
| 9000 | TCP | Metrics server (if enabled) |
| 6060 | TCP | PProf server (if enabled) |
- MMDVM repeaters/hotspots connect via UDP to the DMR port (default 62031)
- Users access the web interface via HTTP on the configured port (default 3005)
- If deploying behind a reverse proxy, set
http.trusted-proxiesandhttp.canonical-hostappropriately