# DECT Relay Agent — one-command deploy for the data center. # # Deploy flow: # 1. Unzip the bundle produced by scripts/packageDectRelayAgent.js. # 2. `cp .env.example .env` and fill it in (bot URL, shared token, # DECT serviceability password). The .env file lives NEXT TO # this compose file and is git-ignored. # 3. `docker compose up -d --build` # 4. `docker compose logs -f` and confirm you see the bot log # "Agent connected from ..." on the other side. # # The agent is an OUTBOUND client (it dials the bot at # DECT_RELAY_BOT_URL). No ports are exposed and no inbound firewall # rules are needed on the DC host — only egress to: # - the bot's public HTTPS/WSS URL # - every DBS-210 base station on 10.0.0.0/8 (TCP 443) services: dect-relay-agent: build: context: . dockerfile: Dockerfile image: dect-relay-agent:latest container_name: dect-relay-agent # Restart on any exit (crash, host reboot, `docker stop` doesn't # count). Matches how the rest of the collabSupport stack is run. restart: unless-stopped # All runtime config comes from .env — never bake secrets into # the image. .env is created by the operator from .env.example # and is git-ignored by convention. env_file: - .env # No `ports:` block on purpose — see header comment. # Cap log volume so a chatty reconnect loop can't fill /var/log. # 10MB * 5 files = 50MB per container is plenty for # troubleshooting a week's worth of activity at info level. logging: driver: json-file options: max-size: "10m" max-file: "5" # Health check hits the agent's own process. Since the agent # doesn't expose an HTTP port, we probe by looking for the node # process — sufficient to catch crashes that the restart policy # will then fix. A future v2 could expose a tiny /healthz on a # localhost-only port with connection-state details. healthcheck: test: ["CMD-SHELL", "pgrep -f 'node index.js' > /dev/null || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 10s # Optional: uncomment if your DC network requires host networking # for the agent to reach the 10.x bases (e.g. because a routed # docker bridge isn't set up). Adding host mode means the agent # inherits the host's routing table and IP stack directly. # network_mode: host