| Component |
Role |
database-manager |
Central admin app (Nette/PHP) |
iot-node-manager |
Host-local instance management GUI (Nette/PHP) |
iot-api |
Host-local API server (JSON-RPC, ArcView, Catalog) (Nette/PHP) |
| PostgreSQL + TimescaleDB |
Database engine |
| Nginx |
Reverse proxy |
All three apps share the app/Shared git submodule.
- Deploy DBM with its own PostgreSQL database
- Deploy host(s) — each with:
- Catalog database (versioned schema)
- IoT Node Manager
- IoT API
- Register host in DBM → triggers catalog synchronization
- Configure Nginx reverse proxy (TLS, routing)
- Create instance on the host via DBM
- Enable services (JSON-RPC, ArcView, etc.) for the instance
- Use
127.0.0.1 loopback for internal Nginx → app proxy
- Keep DB roles and services host-local
- Use PostgreSQL role-based access, not shared credentials
¶ Wildcard-domain routing
For multi-host deployments with subdomain-based routing:
- DBM exposes Gateway API with routing table data
- Each host exposes Node API with local service routing
- IoT Nginx Updater periodically regenerates Nginx config from both sources
See: Gateway API · Internal API · IoT Nginx Updater