Defines a temporary operating mode that constrains network exposure during recordings by using NAT, loopback-only ports, and SSH tunneling.
| MacBook Pro (MBP) | Hosts the SUT: Ubuntu VM (VirtualBox) + Docker Compose services. VM networking is NAT. Published ports are bound to loopback only. |
| MacBook Pro (MBP) | Local test runner (manual / dev execution). |
| New Mac mini | GitLab CI runner only. No VirtualBox. No direct LAN access to the SUT. |
| Web | http://127.0.0.1:3000 |
| API | http://127.0.0.1:3001/api |
| VM SSH (host access) | ssh -p 2222 sut@127.0.0.1 (MBP only) |
Loopback addresses are intentional. CI access requires an SSH tunnel.
cd ~/conduit
docker compose up -d
docker compose ps
ssh -N \
-L 3000:127.0.0.1:3000 \
-L 3001:127.0.0.1:3001 \
-p 2222 sut@<MBP_HOSTNAME_OR_IP>
nc -z 127.0.0.1 3000
nc -z 127.0.0.1 3001
curl -fsS http://127.0.0.1:3000/ >/dev/null
curl -fsS http://127.0.0.1:3001/api/tags >/dev/null
WEB_BASE_URL=http://127.0.0.1:3000
API_BASE_URL=http://127.0.0.1:3001/api
Symptoms: connection refused on 127.0.0.1:3000/3001 from CI runner.
ps aux | grep "ssh -N" | grep -v grep
Symptoms: tunnel is active but HTTP checks fail.
ssh -p 2222 sut@127.0.0.1
docker compose ps
Symptoms: CI attempts to reach non-loopback addresses.
echo "$WEB_BASE_URL"
echo "$API_BASE_URL"
sut.testlab) restored