Deployment Overview · id-prod / id-test

部署总览:每个服务在哪台 ECS、哪条流水线

印尼生产环境按角色拆分成独立进程、独立机器、独立流水线(点按钮即发)。本页是全貌:服务 → ECS 内网 IP → 端口 → 一键发布流水线。★ 标注的是管理后台相关。
Region ap-southeast-5(雅加达) 跨可用区 5a / 5c 部署走 RunCommand-by-tag(不依赖云效主机组)
① 生产全貌图 ② 生产 · 服务→ECS→流水线 ③ 管理后台是哪几个 ④ 测试环境 ⑤ 并发发布规则 ⑥ 部署机制

① 生产全貌图

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 + 一键发布

服务 / 作用角色ECS 实例内网 IP端口发布流水线
App / H5 用户主接口apiid-prod-api-a
id-prod-api-c
172.27.107.15
172.27.87.12
7002打开 api 流水线 ▶
WhatsApp:登录 / 消息 / 客服 / 裂变waid-prod-edge-a
id-prod-edge-c
172.27.107.16
172.27.87.11
7010打开 wa 流水线 ▶
三方回调:Xendit / TikTok / Shopee / 飞书webhookid-prod-edge-a
id-prod-edge-c
与 wa 同机·独立 jar
172.27.107.16
172.27.87.11
7030打开 webhook 流水线 ▶
后台任务:订单同步 / 分佣 / 结算 / 通知 / 发券workerid-prod-worker-a
id-prod-worker-c
172.27.107.17
172.27.87.10
7020打开 worker 流水线 ▶
★ 管理后台后端(admin-api-id.beexofficial.com)adminid-prod-admin-c172.27.87.97003打开 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 无对外入口。

③ 哪几个是"管理后台"

管理后台组成类型位置流水线
★ 后端 APIECS 服务id-prod-admin-c · 172.27.87.9 : 7003admin 后端流水线 ▶
★ 前端页面静态站 OSS/CDNadmin.beexofficial.com(beex-admin-page)admin-page 流水线 ▶
PRD 文档站静态站 OSS/CDNprd.beexofficial.combeex-id-test-doc(雅加达 oss-ap-southeast-5beex-release web docs --allow-direct-static
统一登录 SSO内部服务sso.beexofficial.com(beex-sso)sso 流水线 ▶

④ 测试环境(id-test)

测试只有一台 beex-id-test-service(2C8G · 172.27.87.8),五个角色作为独立进程跑在这台机上(单元名和路径与生产不同)。每个服务同样是独立流水线,可单独发布。
角色systemd 单元端口发布流水线
apibeex-api7002test-api ▶
wabeex-wa-service7010test-wa ▶
workerbeex-worker7020test-worker ▶
webhookbeex-webhook7030test-webhook ▶
★ adminseahub-x-admin-service7003test-admin ▶

⑤ 并发发布规则(已优化,可放心并发)

任意流水线都可以同时点,安全且并行。edge 机上的 wawebhook 已拆成各自独立的 jar 文件/opt/seahub-x-wa/seahub-x-wa.jar/opt/seahub-x-webhook/seahub-x-webhook.jar,各自 systemd drop-in 指向自己的 jar),所以它们互不共享文件、可真正并行部署,不再需要错开点、不再排队。
部署脚本仍保留按 jar 路径的 flock 兜底:只有当两条流水线真的写同一个 jar 文件时才会串行——现在每个角色 jar 都独立,所以不会触发。结论:所有流水线随意并发,安全又快。

⑥ 部署机制(RunCommand-by-tag)

1
构建

云效流水线里 mvn package 出 jar(admin 需先装共享模块 seahub-core)。

2
上传 + 预签名

jar 传到 OSS beex-id-prod-deploy,生成 1 小时有效的预签名下载 URL(机器端免密下载)。

3
按标签找机器

用 ECS 标签定位:生产按 Role=api|edge|worker|admin + Env=id-prod;测试按 Role=service-split-test + Env=id-test

4
逐台滚动

一台一台:下载 jar → 端口安全重启该角色单元(先释放端口再起)→ 健康检查该端口 /actuator/health任一台失败即回滚该台并中止,不动下一台(跨可用区,零停机)。

安全:部署凭证用受限 RAM 子账号 beex-ci-deploy(只有 RunCommand + 部署桶 OSS),并由加密变量组 beex-service-ci-deploy-secrets 注入。账号级超级 AK 和任何 AK/SK 明文都不得写进仓库或流水线脚本。