Opinionated, batteries-included starter kit to build your Unified Namespace with UMH Core. One docker compose up -d and you're running. Community contribution — not affiliated with UMH.
For official UMH documentation, configuration, and support: docs.umh.app This repo only adds opinionated defaults, addons, and data flow templates on top of the official stack.
| Layer | Services |
|---|---|
| UMH Official | UMH Core, TimescaleDB, PgBouncer, Grafana |
| Addons | HiveMQ CE (MQTT), Node-RED, Portainer, NGINX, PostgreSQL MCP |
| Data Flows | Historian bridge, ERP dedup + history, MQTT bridge + feedback |
| Schema | asset, tag, tag_string hypertables (UMH ships empty DB) |
git clone https://github.com/SheetMetalConnect/UMH-Core-Stack.git
cd UMH-Core-Stack
cp .env.example .env
# Edit .env — paste your AUTH_TOKEN from https://management.umh.app
docker compose up -d
docker compose ps| Service | URL | Credentials |
|---|---|---|
| Grafana | http://localhost:3000 | admin / changeme |
| Node-RED | http://localhost:1880 | — |
| Portainer | http://localhost:9000 | set on first login |
| MQTT | mqtt://localhost:1883 | — |
| PostgreSQL | localhost:5432 | postgres / changeme |
| MCP (Postgres) | http://localhost:3003 | — |
| NGINX | http://localhost:80 | — |
Data does not automatically persist to TimescaleDB — you need a DataFlow:
- Open Management Console → your instance → Data Flows → Stand-alone
- Click Add, paste contents of
examples/databridges/flows/historian.yaml - Deploy
All default passwords are changeme. Find and replace before production:
grep -r "changeme" . --include="*.yaml" --include="*.example" --include="*.sh"├── docker-compose.yaml # Full stack
├── .env.example # Environment template — start here
├── nginx.conf # Reverse proxy config
├── configs/
│ ├── nodered/settings.js
│ ├── grafana/provisioning/
│ └── timescaledb-init/ # Historian schema (auto-runs on first boot)
├── examples/
│ ├── databridges/flows/ # Generic DataFlows (historian, ERP, OPC-UA)
│ ├── databridges/sql/ # ERP schema extensions
│ ├── simulator/ # MetalFab simulator overlay + flows
│ ├── historian/ # Reference overlay (not required)
│ └── mcp/ # Standalone MCP overlay
└── docs/ # Extended docs (data modeling, networking, etc.)
- Replace all
changemepasswords (see above) - Set
AUTH_TOKENfrom Management Console - Configure TLS — place certs in
./certs, uncomment HTTPS block innginx.conf - Restrict NGINX CORS headers (currently allows
*) - Set up database backups
Want to see data flowing end-to-end? Add the MetalFab UNS Simulator — 22 simulated machines publishing sensor data through the full pipeline:
docker compose -f docker-compose.yaml -f examples/simulator/docker-compose.simulator.yaml up -dSimulator → HiveMQ → UMH Core → historian flow → TimescaleDB → Grafana. The simulator publishes both _raw (unvalidated) and _energy-monitor_v1 (validated data contract) topics — see docs/data-modeling.md for the difference. Includes browser-based dashboards via MQTT WebSocket.
Community-driven deployment package for UMH. Contributions welcome.
- Test with fresh
.envfrom.env.example - Verify:
docker compose up -d && docker compose ps - Validate:
docker compose config
Built on the official UMH Docker Compose template. All components, docs, and licenses remain with their respective owners.
Maintained by Luke van Enkhuizen — independent, not affiliated with UMH.
- UMH Documentation — start here for official guides
- Management Console
- UMH Core Repository