11 KiB
测试环境单机部署与配置契约
更新日期:2026-09-29。当前只有 test,没有开发/生产环境。本文定义目标部署、切换与验收;具体路由、认证、投递契约唯一见统一认证与服务通信契约。
状态:目标已确认,实现仍在迁移。第 0A 批资金消费者本地修复已完成;新 Gateway/Token/投递/Compose 尚未落地或发布。运行服务器、Nacos 发布值、主机资源和真实 MySQL 故障恢复尚未验证。
结论与范围
按“头程和海外仓不再分区域部署、所有服务同机运行、取消独立事件接收服务与海外网关”设计。这里将“事件接收”对应为当前 event-bridge-service,不推定要删除业务通知、异步任务或消息队列。
建议目标:一个 Gateway、一套 Auth/IAM 登录与权限体系、一个测试 Nacos 命名空间和一套测试内部容器网络。保留 Firstleg、Lastleg、Warehouse、Warehouse Overseas 等业务服务,各自拥有数据表与业务规则。同机可以共用 MySQL 实例,继续按服务分 Schema;不要求合并为一个数据库或一个 Java 进程。
最终移除 gateway-overseas 与 event-bridge-service 部署单元及其区域分支。服务名称中的海外业务含义可以保留;仓库类型、仓管角色、仓绑定和客户数据隔离仍有业务用途。
测试环境目标部署清单
| 类别 | 目标 |
|---|---|
| 环境 | 仅 test,所有服务同一台宿主机 |
| 用户端 | Admin、Client、国内 PDA、海外 PDA 共用一个业务 API 入口;页面和作业职责保留 |
| 入口 | Nginx/反向代理接统一 Gateway,业务内部端口不作为客户端访问入口 |
| 认证 | Auth、IAM、统一 JWT 与 Redis 会话,按平台/客户/PDA 校验权限 |
| 业务 | Order、Firstleg、Lastleg、Warehouse、Warehouse Overseas、Finance |
| 公共能力 | File、Print、Audit、Integration 按现有职责保留 |
| 配置与发现 | 一套 Nacos,使用实际 Namespace ID 的单一测试命名空间,不再分 test-cn/test-overseas |
| 数据与缓存 | 一套测试 MySQL 实例,按服务分 Schema;统一可访问的测试 Redis,保留必要键隔离 |
| 消息 | 保留现有 RocketMQ 用于导出、通知和审计等已发现用途 |
| 服务协同 | 同机内部调用;需要可靠交付的业务采用本地事务记录加直接投递和消费幂等 |
| 退出部署 | gateway-overseas、CN/OVERSEAS 两个 Event Bridge 实例及专用配置 |
服务名、Schema、端口、数据卷和实际中间件配置在改造前做一次清单核对;当前表是目标部署结构,不是对服务器现状的确认。旧 development/production 配置不再作为本次发布入口,也不要求新建对应环境。
分批实施与交付门槛
| 批次 | 工作 | 完成依据 |
|---|---|---|
| 0:文档与基线 | 确认仅 test 的目标、唯一接口路径、统一认证、直接投递职责;列出当前配置与服务清单 | 新目标、当前实现、待办三者明确区分 |
| 0A:资金消费前置修复 | 区分临时执行失败与最终业务拒绝;补齐并发 Inbox 抢占后的摘要校验和一致结果处理 | 临时故障原事件重试、并发同 hash/异 hash、执行成功后结果保存失败的恢复验证通过;修复规则见统一认证与服务通信契约;本地已通过,实库待验证 |
| 1:入口与认证 | Gateway 接入全部业务;Auth/common-security/海外服务统一认证;各端共用入口;解决仓库路由冲突 | 本地编译、认证测试、路由合同及受影响前端测试通过 |
| 2:业务通信 | 替换装柜、船节点、卸柜、暂扣、派送、费用和资金链;补齐直接投递重试及失败处置 | 各链路有直接消费者,成功确认、重复投递和故障恢复测试通过 |
| 3:部署收敛 | 单套 test Compose/Nacos/Jenkins;清理两个废弃服务和专用配置、SQL 初始化引用、安全投影依赖 | 构建与配置合同通过;形成唯一测试发布清单及启动依赖 |
| 4:测试环境验证 | 发布一致的新版本,以新造数据执行 API 全链路和各端实际操作 | 下表业务验收全部通过,保留报告及未通过项 |
改造批次可以分别完成代码检查;仅入口批次完成时,不把测试环境视为已跑通。正式测试部署须使用接口、认证、通信与配置相互匹配的一组版本,避免先停 Bridge 导致现有业务失联。
本地编译和离线检查只是开发工具使用,不代表存在独立“开发环境”。最低检查包括相关 Maven 测试编译/测试、网关路由与拓扑合同、前端类型检查及受影响测试;不以构建成功代替测试环境闭环通过。
测试环境跑通的验收标准
所有项目初始状态均为“待实施、待验证”。
| 验收项 | 操作与预期 |
|---|---|
| 部署与发现 | 所有保留服务启动健康,统一命名空间中可发现;客户端无需访问海外 Gateway 或 Bridge |
| 登录与权限 | Admin、Client、两类 PDA 使用统一认证;刷新有效、退出后失效;停用账号/客户和越权访问被拒绝 |
| PDA 仓绑定 | 未绑定拒绝作业,绑定仓限制正确,换仓后旧会话失效 |
| 仓库路由 | 仓库主档、库位、托盘访问正确服务,原重复前缀不再造成路由歧义 |
| 订单到装柜 | 新造客户与订单走审核、入仓、测量、分柜和装柜;完成后正确生成尾程数据 |
| 海外履约 | 船节点同步、接柜、卸柜、入仓、库存、排车、出库、派送形成闭环;签收按来源回写 Firstleg/Order |
| 状态协同 | 暂扣/解除、卸柜事实、分单签收作用于正确单据,不误推进同柜或同车其他订单 |
| 费用与资金 | 费用准确入 Finance;资金指令与结果对应;重复请求不重复入账、冻结或扣款 |
| 可靠性 | 消费服务短时停止、重启、响应超时、重复和乱序投递后可恢复,失败可查且可重试,无永久丢单 |
| 公共能力 | 文件上传下载、标签打印、异步导出、消息通知、审计正常 |
| 客户与作业界面 | Admin/Client 和 PDA 实际操作完成核心流程;HTTP 通过不能替代页面/设备验证 |
每次验收记录版本、测试数据业务编号、覆盖场景、结果及错误诊断信息。修复失败项后执行受影响回归,再给出整体是否跑通的结论。
D. 唯一测试环境的整体切换与失败恢复
本次采用测试停机窗口一次切换,允许测试数据按明确范围重建,不做新旧协议并行。实际部署、SQL、清理操作不在本文编写过程中执行。
| 顺序 | 操作 | 放行条件/记录 |
|---|---|---|
| D0 版本准备 | 记录各后端/前端/PDA 仓库提交、镜像 tag/digest、APK/WGT 版本、Nacos 配置版本与 SQL 基线 | 各端对应同一架构契约;本地检查通过 |
| D1 运行清单 | 列出当前容器、Compose 项目、网络、服务注册、Nacos Data ID/Group/Namespace、Redis DB/key、MQ topic/group、DB/文件卷引用 | 填实际标识,不输出凭据;确认主机容量和端口 |
| D2 停止写入 | 公告测试窗口、停止正在进行的验收/造数、阻断业务写入;停止旧业务容器、Relay 和相关消费任务 | 没有旧进程继续发消息、续写数据库或向旧 Nacos 注册 |
| D3 应用基线与配置 | 按逐项对象清单处理测试业务数据/旧投递、会话、必要 MQ 测试消息与文件引用;发布统一 test Nacos/Compose 配置 | 数据一致;不整机清空 Redis/MQ/文件,不触碰不在清单中的资源 |
| D4 启动新服务 | 中间件健康 → IAM/Auth 及公共能力 → 所有业务消费者与生产者 → Gateway → 前端;写入口保持关闭 | 健康检查通过且消费者就绪;无循环依赖导致的启动等待;旧网关/Bridge 不再启动 |
| D5 端侧切换 | 发布 Admin/Client 新构建,更新两类 PDA,清除旧登录态后重新登录 | 验收设备构建版本与配置正确;原生地址不再指向海外入口 |
| D6 冒烟 | 统一登录、主档/资源查询、越权拒绝、文件上传,加一条装柜→尾程链与一条资金指令→结果回传 | 无路由误投、认证失效或严重业务错误 |
| D7 完整验收 | 开放本轮验收写入,按前述矩阵新造数据执行完整 API、页面、PDA 及故障恢复 | 所有阻断项关闭才声明跑通 |
| D8 清理退役资源 | 核对旧容器、注册、配置及专用卷/库引用,形成明确清理清单 | 新链路通过、没有残余调用;删除动作单独按范围执行 |
启动顺序是依赖就绪原则,不允许写死为某服务必须业务调用另一未启动服务后才能健康。生产端 Outbox 可先记录并有限重试,不能在业务消费者启动前产生验收写入;冒烟前以实际健康状态确认。
停止条件:认证/客户隔离错误、资金重复执行、必需消费者不可达、投递无法恢复、数据库基线不匹配,任何一项即关闭测试写入并停止本轮验收,不用跳过场景换取整体通过。
失败恢复默认选择:保留故障证据,环境继续停写,修复新架构后用匹配版本重新部署并重建本轮失败测试数据。只有确需恢复原测试工作时,整体恢复旧镜像/前端/PDA、旧 Nacos/Compose 和匹配旧 Schema 基线,清理新旧会话及消息交叉引用;不恢复已经放弃的测试业务数据。单服务镜像回滚仅适用于确认契约和 Schema 未变的情况,不能代替本次架构整体恢复。
待部署准备时填写的运行值:测试窗口、发布清单、实际 Namespace ID、Data ID/Group、域名与端口、Redis DB/key 前缀、MQ 范围、SQL/卷操作清单、主机资源预算、验收数据编号。不得用猜测值替代运行检查;这些值未填写不进入 D2。
基线与范围
测试数据可以按明确对象重建,不设计存量迁移、双写、旧协议兼容或生产发布。本地编译不是独立开发环境。执行初始化、清理和部署前落实具体对象清单与适用授权,本契约不表示这些动作已执行。
配置收敛必须覆盖 Compose、Jenkins、deploy/service-map.yml、发布脚本、Nacos Data ID/Group/Namespace、前端代理与构建变量、PDA 地址、SQL 初始化引用、服务发现和健康检查。容器内不能用 localhost 代替其他服务名。保留文件数据卷及仍被导出/通知/审计使用的 RocketMQ。
不新增中间件,不合并业务服务、Schema、两类 PDA 或领域状态机;旧 development/production 退出当前发布入口,不顺手删除无关历史文件。模块旧指引中双区域部署、双 Token 或必须经海外 Gateway 的强制描述属于迁移前实现,后续实现以本契约和统一认证契约为准,并随对应批次更新模块说明。
验收记录保存各仓库提交、镜像/配置版本、业务编号、覆盖场景与失败项。本地检查、H2 事务测试与真实 MySQL/HTTP/页面/PDA 验收分别记录,不能互相代替。