1.9 KiB
RMM OpenWrt Server
MVP backend for OpenWrt RMM.
Run
RMM_INSECURE_DEV_MODE=true go run ./server/cmd/rmm-server
Environment variables:
RMM_ADDR- listen address, default:8080RMM_DB_PATH- SQLite database path, defaultrmm.dbRMM_OPERATOR_PASSWORD- required bootstrap administrator passwordRMM_OPERATOR_TOKEN- optional emergency/API bearer tokenRMM_OPERATOR_USERNAME- web UI username, defaultadminRMM_COOKIE_SECURE- defaults totrueoutside explicit development modeRMM_DEVICE_DOMAIN- wildcard device domain, for examplerouters.example.comRMM_ALLOW_LEGACY_ENROLLMENT- opt-in shared enrollment compatibility modeRMM_METRIC_RETENTION_DAYS- metric history retention, default30RMM_WEB_DIR- static web UI directory, defaultweb
Docker Compose
The repository includes a Compose stack with the RMM server and a reverse SSH tunnel sidecar:
docker compose up -d --build
See docs/docker-compose.md for router key installation and remote access setup.
MVP API
Agent API:
POST /api/agent/enrollPOST /api/agent/heartbeatPOST /api/agent/commands/nextPOST /api/agent/commands/{id}/result
Operator API:
-
POST /api/auth/login -
GET /api/auth/me -
GET|POST /api/users(administrator only) -
POST /api/enrollment-grants -
GET /api/devices -
GET /api/devices/{id} -
POST /api/devices/{id}/commands -
GET /api/devices/{id}/commands -
GET /api/devices/{id}/commands/{command_id} -
POST /api/devices/{id}/commands/{command_id}/cancel -
GET /api/audit-events
The web UI uses revocable, server-side sessions. Each normal user only sees and controls devices enrolled with their own one-time grants. The optional bootstrap bearer token is administrator-scoped:
Authorization: Bearer <RMM_OPERATOR_TOKEN>
See KeenDNS-like cloud mode for wildcard DNS, wildcard TLS, and the isolated LuCI access flow.