flowchart LR
U["用户 / App / H5 / 三方平台"]:::u
ALB["id-prod-alb 公网入口 ALB"]:::alb
subgraph API["api · 端口 7002"]
A1["id-prod-api-a
172.27.107.15 · 5a"]:::svc
A2["id-prod-api-c
172.27.87.12 · 5c"]:::svc
end
subgraph EDGE["edge 机 · wa 7010 + webhook 7030(同机·各自独立 jar·可并行发布)"]
E1["id-prod-edge-a
172.27.107.16 · 5a"]:::svc
E2["id-prod-edge-c
172.27.87.11 · 5c"]:::svc
end
subgraph WORK["worker · 端口 7020(无对外入口)"]
W1["id-prod-worker-a
172.27.107.17 · 5a"]:::wk
W2["id-prod-worker-c
172.27.87.10 · 5c"]:::wk
end
ADM["★ 管理后台后端 admin · 7003
id-prod-admin-c · 172.27.87.9"]:::adm
DB["RDS 主库 + 只读 · Redis 主备"]:::data
U --> ALB
ALB -->|"/api/**"| API
ALB -->|"/webhooks/whatsapp"| EDGE
ALB -->|"/webhooks/xendit,tiktok,shopee,feishu"| EDGE
API --> DB
EDGE --> DB
WORK --> DB
ADM --> DB
classDef u fill:#f0fdf4,stroke:#15803d,color:#166534;
classDef alb fill:#eff6ff,stroke:#3b82f6,color:#1d4ed8,stroke-width:2px;
classDef svc fill:#fef3c7,stroke:#e07c00,color:#7a4f24;
classDef wk fill:#f5f3ff,stroke:#8b5cf6,color:#5b21b6;
classDef adm fill:#ecfeff,stroke:#0891b2,color:#155e75,stroke-width:2px;
classDef data fill:#fff7ed,stroke:#fb923c,color:#9a3412;
| 服务 / 作用 | 角色 | ECS 实例 | 内网 IP | 端口 | 发布流水线 |
|---|---|---|---|---|---|
| App / H5 用户主接口 | api | id-prod-api-aid-prod-api-c | 172.27.107.15 172.27.87.12 | 7002 | 打开 api 流水线 ▶ |
| WhatsApp:登录 / 消息 / 客服 / 裂变 | wa | id-prod-edge-aid-prod-edge-c | 172.27.107.16 172.27.87.11 | 7010 | 打开 wa 流水线 ▶ |
| 三方回调:Xendit / TikTok / Shopee / 飞书 | webhook | id-prod-edge-aid-prod-edge-c与 wa 同机·独立 jar | 172.27.107.16 172.27.87.11 | 7030 | 打开 webhook 流水线 ▶ |
| 后台任务:订单同步 / 分佣 / 结算 / 通知 / 发券 | worker | id-prod-worker-aid-prod-worker-c | 172.27.107.17 172.27.87.10 | 7020 | 打开 worker 流水线 ▶ |
| ★ 管理后台后端(admin-api-id.beexofficial.com) | admin | id-prod-admin-c | 172.27.87.9 | 7003 | 打开 admin 流水线 ▶ |
beex-service-ci-deploy-secrets 注入受限部署凭证(RAM 子账号 beex-ci-deploy,仅授予部署需要的 RunCommand 与部署桶 OSS 权限),流水线脚本不得内嵌 AK/SK 明文。前面挂 id-prod-alb:/api/**→api,/webhooks/whatsapp→wa,/webhooks/{xendit,tiktok,shopee,feishu}→webhook;worker 无对外入口。| 管理后台组成 | 类型 | 位置 | 流水线 |
|---|---|---|---|
| ★ 后端 API | ECS 服务 | id-prod-admin-c · 172.27.87.9 : 7003 | admin 后端流水线 ▶ |
| ★ 前端页面 | 静态站 OSS/CDN | admin.beexofficial.com(beex-admin-page) | admin-page 流水线 ▶ |
| PRD 文档站 | 静态站 OSS/CDN | prd.beexofficial.com → beex-id-test-doc(雅加达 oss-ap-southeast-5) | beex-release web docs --allow-direct-static |
| 统一登录 SSO | 内部服务 | sso.beexofficial.com(beex-sso) | sso 流水线 ▶ |
beex-id-test-service(2C8G · 172.27.87.8),五个角色作为独立进程跑在这台机上(单元名和路径与生产不同)。每个服务同样是独立流水线,可单独发布。| 角色 | systemd 单元 | 端口 | 发布流水线 |
|---|---|---|---|
| api | beex-api | 7002 | test-api ▶ |
| wa | beex-wa-service | 7010 | test-wa ▶ |
| worker | beex-worker | 7020 | test-worker ▶ |
| webhook | beex-webhook | 7030 | test-webhook ▶ |
| ★ admin | seahub-x-admin-service | 7003 | test-admin ▶ |
wa 和 webhook 已拆成各自独立的 jar 文件(/opt/seahub-x-wa/seahub-x-wa.jar、/opt/seahub-x-webhook/seahub-x-webhook.jar,各自 systemd drop-in 指向自己的 jar),所以它们互不共享文件、可真正并行部署,不再需要错开点、不再排队。云效流水线里 mvn package 出 jar(admin 需先装共享模块 seahub-core)。
jar 传到 OSS beex-id-prod-deploy,生成 1 小时有效的预签名下载 URL(机器端免密下载)。
用 ECS 标签定位:生产按 Role=api|edge|worker|admin + Env=id-prod;测试按 Role=service-split-test + Env=id-test。
一台一台:下载 jar → 端口安全重启该角色单元(先释放端口再起)→ 健康检查该端口 /actuator/health;任一台失败即回滚该台并中止,不动下一台(跨可用区,零停机)。
beex-ci-deploy(只有 RunCommand + 部署桶 OSS),并由加密变量组 beex-service-ci-deploy-secrets 注入。账号级超级 AK 和任何 AK/SK 明文都不得写进仓库或流水线脚本。