Files
rogee b6d0af1a56
management-images / build-and-publish (push) Successful in 9m15s
docs: add one-click management deployment and image workflow
2026-09-16 17:57:05 +08:00

3.6 KiB

SIP 管理后台

独立于仓库其它业务的管理项目:Go 负责最终鉴权、版本/CAS、发布屏障、Cell 状态和统计;TanStack Start 只负责管理页面。运行时不导入 agent_call、不读取其它项目数据库、不代理 Python API,也不会因启动而拨打真实电话。

技术栈与固定基座

  • 后端:Go 1.26、Fiber v3、Viper、Cobra、Logrus、SQLite、sqlc。
  • 前端:上游 Kiranism/tanstack-start-dashboard,锁定提交 f3375fcce5d2b2fbc35caef776e5a1c61b030439;许可证保留在 frontend/LICENSE,依赖和 bun.lock 随项目发布。
  • 契约:docs/contracts/ 是唯一来源;contracts/ 是打包后的生成快照,使用 scripts/sync-contracts.sh --check 校验。

本地运行

cd management/backend
go test -race ./...
go vet ./...
go run ./cmd/management serve

默认监听 127.0.0.1:8080,默认 SQLite 为 backend/data/management.db。首次演示数据:

MANAGEMENT_DB_PATH=/tmp/agent-call-management.db go run ./cmd/management seed-demo
curl -H 'Authorization: Bearer dev-admin-token' http://127.0.0.1:8080/admin/v1/sip-status

演示数据仅使用合成的 TEST-NET SIP 地址;dev-* 令牌仅适用于 mock 本地开发,生产必须通过受控环境注入专用令牌和 mTLS 文件。可用令牌域隔离:dev-admin-tokendev-config-tokendev-publisher-tokendev-observer-tokendev-audit-tokendev-saas-token。调度器令牌不会被管理 API 接受。

前端另开终端:

cd management/frontend
bun install --frozen-lockfile
VITE_MANAGEMENT_API_URL=http://127.0.0.1:8080 bun run dev

页面首次打开后在当前浏览器会话输入管理令牌;令牌不写入源码、URL、localStorage 或日志。

独立验证

# contract source/snapshot
management/scripts/sync-contracts.sh --check

# backend
cd management/backend
gofmt -w .
go test -race ./...
go vet ./...

# frontend
cd ../frontend
bun run lint
bun run format:check
bun run build

后端测试覆盖鉴权域隔离、资源范围、幂等重放、CAS 冲突、全 Cell 发布屏障、Mock 意图恢复、观察 boot/sequence、新鲜度和统计事实语义。默认 mock 发布不声称 Cell 已应用;需要协议 Mock 完整验收时显式设置 MANAGEMENT_MOCK_CELL_APPLY=true

模式与安全边界

MANAGEMENT_MODE=mock 只处理合成/协议 Mock 数据;MANAGEMENT_MODE=real 发布前要求 HTTPS Cell Agent、mTLS 客户端证书、CA 和主机白名单,失败时保留原活动版本并保持 admission barrier,绝不静默回退 Mock。SIP 凭据只能是 secret-store reference,管理读取、审计和统计均不返回密钥或完整被叫号码。

real 模式不会把 123.56.71.98 当 SIP 服务端;该地址只作为固定出口白名单事实。真实供应商、MQ/OSS、云资源和真实呼叫验收需要另行安排,不是本项目启动前置。

一键 Compose 部署

从仓库根目录执行:

docker compose -f management/deploy/compose.yaml up -d --build

打开 http://localhost:3000/dashboard/overview,输入 dev-admin-token。健康检查和日志:

curl http://localhost:8080/healthz/live
docker compose -f management/deploy/compose.yaml logs -f management-api

停止服务:

docker compose -f management/deploy/compose.yaml down

默认仍是隔离 Mock。使用 Gitea Registry 镜像时,将 MANAGEMENT_API_IMAGEMANAGEMENT_UI_IMAGE 传给 deploy/compose.images.yaml;镜像由根目录 .gitea/workflows/management-images.yml 在 PR 构建、在 main/版本标签推送。不要将示例令牌和 Mock 配置用于生产。