How mipo is built
Traffic flows through Traefik to the manager and ingest nodes; the dispatcher orchestrates scans; one TimescaleDB cluster with three purpose-built schemas lives on an isolated network. The public website runs on separate infrastructure.
Edge, services, data — and a detached public site
The public website (this site) is static HTML/CSS/JS deployed to its own host. It shares no runtime, no database, and no request path with the mipo application.
What each container does
| Service | Role |
|---|---|
manager | GUI + admin API (session cookies). Single instance. |
ingest ×2 | Scanner API (API keys): heartbeats, job dispatch, result collection. |
dispatcher | Scan orchestration: resolves templates, batches jobs, reconciles stalls. Singleton. |
traefik | TLS termination, path routing, load balancing at the edge. |
backup | Encrypted database backup & restore; internal HTTP API. |
db | One TimescaleDB cluster (database mipo) with config / results / jobs schemas, on an isolated internal network. Hypertables live only in the results schema. |
Two Docker networks, isolated databases
external (mipo_external)
Bridge with outbound NAT. Traefik, manager, ingest, dispatcher, backup. Services that need internet or external-facing ports.
internal (mipo_internal)
Isolated, no outbound internet. The database cluster only — it cannot be reached from outside or reach out. Defense-in-depth.
Multi-network containers (manager, ingest, dispatcher, backup) bridge both: external for HTTP, internal for DB access.
Provision → heartbeat → dispatch → report → reconcile
- Provision — the manager generates a one-time install command; the scanner exchanges the token for a permanent API key.
- Heartbeat — every 60s the scanner reports liveness + system metrics to ingest; 2 minutes of silence marks it offline.
- Dispatch — the dispatcher fans fully-resolved jobs out to the right scanners (one job per scanner for groups).
- Report — scanners stream results back through ingest; scanners never write the database directly.
- Reconcile — a background reconciler flags stalled jobs and emits recovery events.
Read the architecture guide
A long-form reference covers the topology, request path, and trust boundaries in depth.