3bf1537ea0
P8-7: docker/README.md and docker-env2/README.md still listed the retired scadabridge-ldap container. Verified against the running config (central-node-*/appsettings.Central.json): both rigs actually bind to the local redundant GLAuth pair (zb-ldap-primary :3893 + zb-ldap-backup :3894 on host.docker.internal, source of truth scadaproj/infra/glauth-redundant), not the shared 10.100.0.35 GLAuth the infra/docker-compose.yml retirement comment claimed — that binding is itself stale, its serviceaccount password having been rotated away by SEC-36. Corrected all three docs to name the actual config each rig uses. P8-10: docker-env2 mapped no host port for the central gRPC control plane (docker/ maps 9013/9014->8083); added 9113/9114->8083 on both env2 centrals, matching the free 91XX slots, plus the README port table. teardown.sh's "preserved in node directories" data note predates the named-volume migration; rewrote it honestly and added an explicit `docker volume rm` recipe scoped to the env2 volume prefix, clearly labeled destructive, mirroring docker/teardown.sh's existing pattern. Gate: bash docker-env2/deploy.sh from this worktree — both centrals + both site-x nodes recreated and came up with the new 9113/9114 ports open. The simultaneous force-recreate split both pairs into independent 1-node clusters (expected: BootstrapGuard is default-OFF on docker-env2, per CLAUDE.md); a single restart of the b-side of each pair joined it to its already-formed peer and both pairs converged (central: memberCount=2, leader=central-a; site-x: node-b Welcome + singleton Younger). docker/ (the primary rig) was not touched.
133 lines
3.7 KiB
YAML
133 lines
3.7 KiB
YAML
services:
|
|
opcua:
|
|
image: mcr.microsoft.com/iotedge/opc-plc:latest
|
|
container_name: scadabridge-opcua
|
|
ports:
|
|
- "50000:50000"
|
|
- "8080:8080"
|
|
volumes:
|
|
- ./opcua/nodes.json:/app/config/nodes.json:ro
|
|
command: >
|
|
--autoaccept
|
|
--unsecuretransport
|
|
--sph
|
|
--sn=5 --sr=10 --st=uint
|
|
--fn=5 --fr=1 --ft=uint
|
|
--gn=5
|
|
--nf=/app/config/nodes.json
|
|
--pn=50000
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
opcua2:
|
|
image: mcr.microsoft.com/iotedge/opc-plc:latest
|
|
container_name: scadabridge-opcua2
|
|
ports:
|
|
- "50010:50010"
|
|
- "8081:8080"
|
|
volumes:
|
|
- ./opcua/nodes.json:/app/config/nodes.json:ro
|
|
command: >
|
|
--autoaccept
|
|
--unsecuretransport
|
|
--sph
|
|
--sn=5 --sr=10 --st=uint
|
|
--fn=5 --fr=1 --ft=uint
|
|
--gn=5
|
|
--nf=/app/config/nodes.json
|
|
--pn=50010
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
# RETIRED 2026-06-04: originally superseded by the shared dev GLAuth on
|
|
# 10.100.0.35:3893 (scadaproj/infra/glauth/). That binding is itself now stale —
|
|
# the shared GLAuth's serviceaccount password was rotated (SEC-36) and is no
|
|
# longer valid, so both docker/ and docker-env2 central nodes now bind to the
|
|
# local redundant GLAuth pair instead: zb-ldap-primary on
|
|
# host.docker.internal:3893 with zb-ldap-backup on host.docker.internal:3894 as
|
|
# FallbackServers (source of truth: scadaproj/infra/glauth-redundant; see each
|
|
# central node's appsettings.Central.json). Kept here, commented, for rollback —
|
|
# uncomment + `docker compose up -d ldap` and point the central-node Server back
|
|
# at "scadabridge-ldap".
|
|
# ldap:
|
|
# image: glauth/glauth:latest
|
|
# container_name: scadabridge-ldap
|
|
# ports:
|
|
# - "3893:3893"
|
|
# volumes:
|
|
# - ./glauth/config.toml:/app/config/config.cfg:ro
|
|
# networks:
|
|
# - scadabridge-net
|
|
# restart: unless-stopped
|
|
|
|
mssql:
|
|
image: mcr.microsoft.com/mssql/server:2022-latest
|
|
container_name: scadabridge-mssql
|
|
ports:
|
|
- "1433:1433"
|
|
environment:
|
|
ACCEPT_EULA: "Y"
|
|
MSSQL_SA_PASSWORD: "ScadaBridge_Dev1#"
|
|
MSSQL_PID: "Developer"
|
|
volumes:
|
|
- scadabridge-mssql-data:/var/opt/mssql
|
|
# NOTE: the official mssql/server image does NOT run
|
|
# /docker-entrypoint-initdb.d — these mounts are informational only;
|
|
# infra/reseed.sh applies the scripts explicitly via sqlcmd.
|
|
- ./mssql/setup.sql:/docker-entrypoint-initdb.d/setup.sql:ro
|
|
- ./mssql/machinedata_seed.sql:/docker-entrypoint-initdb.d/machinedata_seed.sql:ro
|
|
- ./mssql/setup-env2.sql:/docker-entrypoint-initdb.d/setup-env2.sql:ro
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
smtp:
|
|
image: axllent/mailpit:latest
|
|
container_name: scadabridge-smtp
|
|
ports:
|
|
- "1025:1025"
|
|
- "8025:8025"
|
|
environment:
|
|
MP_SMTP_AUTH_ACCEPT_ANY: 1
|
|
MP_SMTP_AUTH_ALLOW_INSECURE: 1
|
|
MP_MAX_MESSAGES: 500
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
restapi:
|
|
build: ./restapi
|
|
container_name: scadabridge-restapi
|
|
ports:
|
|
- "5200:5200"
|
|
environment:
|
|
API_NO_AUTH: 0
|
|
PORT: 5200
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
playwright:
|
|
image: mcr.microsoft.com/playwright:v1.58.2-noble
|
|
container_name: scadabridge-playwright
|
|
ports:
|
|
- "3000:3000"
|
|
command: >
|
|
npx -y playwright@1.58.2 run-server
|
|
--host 0.0.0.0
|
|
--port 3000
|
|
ipc: host
|
|
networks:
|
|
- scadabridge-net
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
scadabridge-mssql-data:
|
|
|
|
networks:
|
|
scadabridge-net:
|
|
name: scadabridge-net
|
|
external: true
|