obmp-docker/docs/handoff/01-DEPLOY-SCRIPT.md
Sam 9e67ef10ba docs: consolidate all markdown under docs/, archive the handoff packets
Repo root keeps only README.md; DOCS.md and DB_SCHEMA.md move to docs/ with
their cross-references updated. The chat-session handoff packets land in
docs/handoff/ as point-in-time records with a README marking the repo docs
as the live source of truth.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 16:04:40 -07:00

2.7 KiB

deploy.sh — what it is and how it behaves

An interactive wrapper around the repo's setup.sh. Its job: reconcile host-specific values in .env for THIS host before setup.sh renders config from them, then bring the stack up in stages. It exists because copying a populated .env between hosts silently propagates stale values (see 02-FINDINGS.md, finding 2/3).

Flow (what happens on a run)

  1. Detect host type (WSL vs native Linux); let user override.
  2. Guard: refuse/warn if the active daemon is Docker Desktop (bind mounts break under it — see findings).
  3. Resolve deployment type (menu with descriptions + resource estimates).
  4. Resolve HOST_IP (internal bind), router-facing IP+port (separate — what bmp server targets), auth mode, and for remote type the central Kafka.
  5. On WSL: auto-detect the Windows LAN IP via powershell.exe interop for the router-facing default (with graceful fallback to a placeholder).
  6. Port-collision preflight — checks host ports the type will bind (ss/netstat//proc), warns/refuses on conflict.
  7. Show a plan; one confirmation.
  8. Write reconciled values to .env.
  9. Clear stale volume handles → run setup.sh → verify bind dirs exist → clear handles again → staged bring-up → verify.
  10. Print post-deploy notes (WSL: netsh portproxy commands; native: firewall + router bmp server snippet).

Deployment types (also in DEPLOYMENT-TYPES.md)

  • full-stack — collector + Kafka + Postgres + Grafana + feeders, one host.
  • remote — collector + local Kafka only, forwards to a central store's Kafka. Needs --central-kafka HOST:PORT. No local store.
  • central-store — store + Grafana + feeders, NO local collector; ingest via remotes.

Old scope names (core/feeders/full/standalone) are accepted as aliases.

Flags

--wsl|--prod, --host-ip, --router-ip, --router-port (default 1790, the IANA BMP port — collector still listens 5000 internally, mapped), --auth local|authelia, --scope full-stack|remote|central-store, --central-kafka HOST:PORT, --reset, --yes.

Notes for repo integration

  • It calls ./setup.sh and checks its exit status. It does NOT reimplement setup.sh's provisioning — it drives it with correct inputs.
  • It assumes .env.example, setup.sh, docker-compose.yml are in the same dir. If setup.sh key names change, update deploy.sh's get_env/set_env references.
  • Router port default was changed to 1790; the lab routers are currently configured to send BMP to 5000, so until they're reconfigured, deploy with --router-port 5000 OR update the routers. This is an open decision (see 03-NEXT-STEPS.md).