# Local Docker deployment of the SCADA family overview dashboard. # # Why this exists rather than just `dotnet run`: the dev rigs publish only some node ports to the # host. OtOpcUa publishes no per-node HTTP port at all (only Traefik's load-balanced :9200, which # round-robins the central pair and so cannot identify a node), and ScadaBridge's site nodes keep # their health port container-internal. A dashboard on the host can therefore see a fraction of the # fleet; one joined to the rig networks sees all of it, addressing each node by container DNS name. # # Registry: appsettings.Docker.json, baked into the image (ASPNETCORE_ENVIRONMENT=Docker below). # # No env_file and no secrets: the dashboard reads anonymous /health endpoints, holds no # credentials, and serves no login. That is a requirement, not an oversight. # # Explicit project name so this stack is isolated from the other compose projects on the host. name: zb-overview services: overview: build: context: . dockerfile: Dockerfile image: zb-overview:local container_name: zb-overview restart: unless-stopped ports: - "5320:5320" # dashboard + /health/* + /metrics environment: ASPNETCORE_ENVIRONMENT: Docker # The endpoint lives in appsettings.Docker.json — ONE authority for the binding. Do NOT add # ASPNETCORE_URLS here; the Dockerfile clears the base image's default for that reason. # No container healthcheck on purpose. aspnet:10.0 ships neither curl nor wget, and adding a # `--healthcheck` mode to the app to work around that would put a second entry point into # production code purely to satisfy Compose. The app's real health surface is HTTP and already # honest — `curl localhost:5320/health/ready` from the host, or scrape /metrics. networks: - otopcua - scadabridge - historiangw # All three are created by the rigs themselves; this stack joins them and never defines them, so # bringing the dashboard up or down cannot disturb a running rig. Start the rigs first. networks: otopcua: name: otopcua-dev_default external: true scadabridge: name: scadabridge-net external: true historiangw: name: zb-historiangw_default external: true