Disclaimer: The main branch contains v3, which is in active development and not ready for production use. For production-ready deployments, see tagged releases. If you are using v2, see the
v2branch.
This repository provides cloud and on-premises deployment configurations for v3 components including Console, mps-router, and related services. Use this README to try out the currently supported deployment options. Documentation for v3 will be updated as planned features are completed.
This branch contains v3 (in development).
- Using v2? See the
v2branch for all v2 maintenance and updates. v2 receives security updates, critical fixes, and minor improvements while v3 is being built. - v3 Status: The replacement for the historical MPS+RPS split. Not yet ready for production.
- Production Releases: Check tagged releases for production-ready versions. All other commits are in-development.
git clone --recursive https://github.com/device-management-toolkit/deployment.gitThe --recursive flag is required β this repository uses git submodules under services/.
There are two auth modes. Simple (the default) uses Console's built-in login. Keycloak swaps in a bundled Keycloak OIDC IdP (a stand-in for a 3rd-party IdP like Auth0 / Entra). The Keycloak stack is layered on top of the simple one via docker-compose.keycloak.yml.
Linux / macOS / WSL:
make up # simple console auth (default)
make up-keycloak # bundled Keycloak OIDCWindows (PowerShell):
./scripts/bootstrap-env.ps1
# simple (default):
docker compose up -d --build
# keycloak:
docker compose -f docker-compose.yml -f docker-compose.keycloak.yml up -d --buildThe bootstrap step (run automatically by make, or ./scripts/bootstrap-env.ps1 on Windows) creates .env from .env.template if missing, auto-detects your host's LAN IP for MPS_COMMON_NAME (so AMT devices reach this host over CIRA and TLS certs match β getting this wrong is a common gotcha), and fills any blank password fields with random values. Override MPS_COMMON_NAME in .env if you have a DNS name or want a different IP.
make down stops either mode. make clean (or docker compose -f docker-compose.yml -f docker-compose.keycloak.yml down -v; Remove-Item -Recurse generated) also wipes volumes and generated material β switching modes is cleanest after a make clean. In Keycloak mode an init container generates a per-deployment TLS cert + RSA token-signing keypair into ./generated/ (gitignored) before Keycloak starts.
Once the stack is up, make opens your browser at https://<MPS_COMMON_NAME>/ (the app is served over HTTPS via Kong with a self-signed cert, so accept the browser warning). On Windows, open that URL manually after docker compose up.
If you'd rather configure manually: copy .env.template to .env, fill the fields yourself, then run the compose command for your mode.
Console handles authentication itself. Log in at https://<MPS_COMMON_NAME>/ (accept the self-signed cert warning) with standalone / the value of AUTH_ADMIN_PASSWORD in .env (auto-generated by bootstrap).
Authentication is handled by the bundled Keycloak instance. On first start it imports a realm export and creates a console realm.
Two distinct logins, two different realms β don't mix them up:
| Where | URL | Realm | Credentials |
|---|---|---|---|
| Console / sample-web-ui (the app) | https://<MPS_COMMON_NAME>/ |
console |
standalone / value of CONSOLE_USER_PASSWORD in .env |
| Keycloak admin console | https://<MPS_COMMON_NAME>:8443/admin/ |
master |
admin / value of KEYCLOAK_ADMIN_PASSWORD in .env |
The admin user only exists in the master realm. Using it on the app's login screen will fail β the app sends you to the console realm, which only contains the standalone user.
Keycloak mode serves two self-signed certs β accept both, or login will hang:
https://<MPS_COMMON_NAME>:8443/β Keycloak. Login redirects here and the SPA makes silent token fetches to it; until the cert is accepted those fail and the page appears to stall.make up-keycloakopens this URL first for that reason.https://<MPS_COMMON_NAME>/β the app, via Kong.
Each cert is unique per clone. Console's server-side OIDC discovery skips TLS verification (AUTH_TLS_SKIP_VERIFY=true) so it doesn't need the cert trusted; the browser still does. Don't reuse this skip-verify behavior in production.
Alternatively, use Azure CLI:
az group create --name dmt-console --location eastus
az deployment group create --resource-group dmt-console --template-file azureDeploy.jsonARM template retained for compatibility. Migration to Bicep is planned.
helm install console ./charts -f ./charts/values-cloud.yamlEnables headless Console + sample-web-ui + kong API gateway + mps-router.
helm install console ./charts -f ./charts/values-onprem.yamlConsole with built-in UI; no kong, no sample-web-ui, no mps-router.
See installers/ for native installer status.
services/β git submodules (Console, RPS, sample-web-ui, mps-router).azureDeploy.jsonβ Azure ARM deployment.charts/β Helm chart withvalues-cloud.yamlandvalues-onprem.yamloverlays.installers/β Console native installers (on-prem).docker-compose.ymlβ local-dev / cloud-style stack.
main(this branch) β v3, active development. Replaces the historical MPS+RPS split.v2β Previous release. Receives security updates, critical fixes, and minor improvements.
- Documentation for v3 will be updated as planned features are completed. For v2 documentation, see the docs site
- Open a new issue
- Security policy
- Discord