Adds a one-command packager (`npm run package:relay`) that produces a
self-contained zip ready to transfer into the data center and start
with `docker compose up -d --build`. Three commands on the DC host:
unzip, edit .env, docker compose up.
Why a packager instead of `docker build` in the repo:
The agent's index.js imports the shared cisco-dect + httpDigestAuth
modules via `../integrations/...` paths, so a naive
`docker build dect-relay-agent/` would fail because those files live
outside the build context. The packager copies them into a
`workspace/` tree inside the bundle so the Dockerfile sees them as
local paths without any source rewriting.
Docker artifacts (in dect-relay-agent/):
- Dockerfile: multi-stage node:20-alpine build (~55MB final image),
non-root `dect` user (UID/GID 1500), tini as PID 1 for clean
SIGTERM propagation to node's graceful-shutdown path,
`npm install --omit=dev --ignore-scripts` in the deps stage.
- docker-compose.yml: restart:unless-stopped, JSON log rotation
(10MB × 5 files), pgrep-based health check. No `ports:` block
because the agent is outbound-only (dials the bot).
- .dockerignore: defensive — the bundle already excludes cruft, but
this hardens against a stray manual build.
Packager (scripts/packageDectRelayAgent.js):
- Assembles agent code + shared modules + deploy artifacts into a
timestamped staging dir (.package-relay-tmp/, git-ignored).
- Generates a bundle README with three-command deploy instructions,
ongoing-ops table, no-internet-DC fallback (docker save/load), and
troubleshooting for the most common failure modes.
- Generates BUNDLE_INFO.txt with build metadata (git sha + dirty
flag + timestamp + size) so the DC operator can trace deployed
bundles back to source.
- Emits `dist/dect-relay-agent-bundle-<YYYYMMDD-HHMMSS>.zip` (30KB).
- Cleans staging in a finally block so failed runs don't leak.
Bundle layout (matches Dockerfile expectations):
dect-relay-agent-bundle-<version>/
Dockerfile, docker-compose.yml, .dockerignore
.env.example, README.md, BUNDLE_INFO.txt
workspace/dect-relay-agent/{package.json, index.js}
workspace/integrations/cisco-dect/{client,probes,statusXml}.js
workspace/utils/httpDigestAuth.js
Wiring:
- package.json: new `package:relay` and `test` npm scripts.
- .gitignore: `scripts/` changed to `scripts/*` so `!scripts/
packageDectRelayAgent.js` can re-include just the packager
(git forbids re-including files under a fully-excluded directory,
hence the glob form).
- dect-relay-agent/README.md: rewrites deployment section to show
the Docker path as the recommended production route, with the
node-directly path kept for local dev.
Verified end-to-end: `npm run package:relay` produces a valid zip
that unpacks to the expected layout in <2s. All 113 existing tests
still pass.
83 lines
1.8 KiB
Text
83 lines
1.8 KiB
Text
# Dependencies
|
|
node_modules/
|
|
|
|
# Environment & Secrets
|
|
.env
|
|
.env.local
|
|
.env.*.local
|
|
*.pem
|
|
*.cer
|
|
*.key
|
|
debug_cert_*.pem
|
|
|
|
# The rotating service token file must be provided locally for Docker mounts (and runtime writes).
|
|
# Never commit real tokens.
|
|
config/webex-service-tokens.json
|
|
|
|
# Logs & Runtime data
|
|
logs/
|
|
*.log
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
|
|
# Storage / Certificates / Debug artifacts (provide aeoroots.cer etc. locally for your clone; volume mounted in Docker)
|
|
storage/
|
|
|
|
# Dev / test artifacts (local only)
|
|
characterization-runs/
|
|
# NOTE on ordering: `scripts/*` (glob) rather than `scripts/` (dir
|
|
# exclusion) because git gitignore semantics forbid re-including a
|
|
# file inside an excluded directory. Using `scripts/*` still excludes
|
|
# every file inside scripts/ by default, but leaves the door open for
|
|
# `!` overrides below.
|
|
scripts/*
|
|
# Un-ignored: the DECT relay packager is part of the deploy workflow
|
|
# and needs to be tracked so anyone with a fresh clone can build the
|
|
# data-center bundle via `npm run package:relay`.
|
|
!scripts/packageDectRelayAgent.js
|
|
characterize-*.js
|
|
|
|
# Backup & temp files
|
|
*.bak
|
|
*~
|
|
*.swp
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# IDE / Editor
|
|
.idea/
|
|
.vscode/
|
|
*.sublime-project
|
|
*.sublime-workspace
|
|
.history/
|
|
|
|
# Build / Output
|
|
dist/
|
|
build/
|
|
coverage/
|
|
.nyc_output/
|
|
# Temporary staging dir created by scripts/packageDectRelayAgent.js.
|
|
# The script cleans this up in a finally block, but a SIGKILL can
|
|
# leave it behind. Ignoring means an interrupted run doesn't leak
|
|
# staged files into future git commits.
|
|
.package-relay-tmp/
|
|
|
|
# Docker / Misc
|
|
docker-compose.override.yml
|
|
|
|
# OS generated
|
|
.AppleDouble
|
|
.LSOverride
|
|
._*
|
|
.Spotlight-V100
|
|
.Trashes
|
|
|
|
# Misc project artifacts
|
|
testobjects.json
|
|
meraki-store-topology-demo.html
|
|
config/config.json
|
|
config/config.bak
|
|
|
|
# Local spike samples pulled from lab DBS-210 (never commit)
|
|
.dect-samples/
|