# Isolated MTConnect live-gate overlay (Task 21). # # Runs the MAIN central pair ONLY, from this worktree's image, under its own # compose project + offset host ports, so the shared `otopcua-dev` rig and the # three sibling driver worktrees that share `otopcua-host:dev` are untouched. # Mirrors how the mqtt-sparkplug worktree isolated itself (`otopcua-host:mqtt`, # project `otopcua-mqtt`, ports 9210/4850). # # docker build -f docker-dev/Dockerfile --target runtime -t otopcua-host:mtconnect . # docker compose -p otopcua-mtc -f docker-dev/docker-compose.yml \ # -f docker-dev/docker-compose.mtconnect.yml \ # up -d sql migrator cluster-seed central-1 central-2 # # AdminUI -> http://localhost:9220 (login disabled; auto-admin) # OPC UA -> opc.tcp://localhost:4860 (central-1) / :4861 (central-2) # SQL -> localhost,14340 # # Both MAIN nodes run because `cluster-seed` declares MAIN as a 2-node cluster: # ConfigPublishCoordinator sources its expected-ack set from enabled ClusterNode # rows, so deploying with one node down fails at the apply deadline. # # Traefik is deliberately not started — central-1 publishes its AdminUI port # directly, which removes the :9200 round-robin that otherwise makes it # ambiguous which node served a request. # NOTE: `!override` is required on every `ports` list. Compose MERGES list-valued # keys by appending, so a plain re-declaration would keep the base file's # "14330:1433" / "4840:4840" alongside the offsets and collide with the running # `otopcua-dev` rig ("Bind for 0.0.0.0:14330 failed: port is already allocated"). services: sql: ports: !override - "14340:1433" central-1: image: otopcua-host:mtconnect ports: !override - "4860:4840" - "9220:9000" central-2: image: otopcua-host:mtconnect ports: !override - "4861:4840"