必须包含nacos、seata server、mysql和业务微服务四大组件,按nacos→mysql→seata→业务服务顺序启动,统一自定义网络、正确配置depends_on与健康检查,并完成数据库初始化与安全加固。

直接用 Docker Compose 编排,把 Seata Server、Nacos、各微服务、MySQL 等全部声明在一份 docker-compose.yml 里,执行 docker-compose up -d 即可一键拉起——关键不是“能不能”,而是配置是否对齐、网络是否互通、依赖顺序是否合理。
必须包含的四大核心组件
一个带分布式事务能力的高安全微服务集群,不能只跑业务服务。以下四个组件缺一不可,且需按逻辑顺序启动:
- Nacos:作为注册中心 + 配置中心,所有服务(包括 Seata)都得先连上它才能发现彼此;
-
Seata Server:事务协调器(TC),必须独立部署,建议用
nacos模式注册,并启用db存储模式(非 file)保证事务日志持久化; -
MySQL:为 Nacos 和 Seata 提供底层存储,需提前初始化
nacos_config和seata_server两个库(含对应表结构); -
业务微服务(如 order-service、storage-service):每个服务需引入
seata-spring-cloud-starter,配置指向 Seata Server 的地址,并开启 AT 模式代理数据源。
docker-compose.yml 关键配置要点
不是堆服务就行,几个易错细节决定成败:
- 所有服务统一使用自定义网络(如
micro-net),禁用默认 bridge,避免 DNS 解析失败; - Seata Server 启动前必须
depends_onMySQL 和 Nacos,且加健康检查(curl -f http://localhost:7091/actuator/health)防止早启; - Nacos 要显式设置
MODE=cluster或至少MODE=standalone+SPRING_DATASOURCE_PLATFORM=mysql,确保配置可持久化; - 每个业务服务的
application.yml中,seata.registry.type=nacos,seata.registry.nacos.server-addr=nacos:8848(注意用服务名,不是 localhost); - MySQL 容器挂载初始化 SQL 脚本(如
/docker-entrypoint-initdb.d/init-seata.sql),避免手动导入遗漏。
安全加固不能只靠 HTTPS
高安全不止是加个网关 TLS,要从容器层就设防:
- 所有镜像优先用官方或可信源(如
nacos/nacos-server:v2.3.2、seataio/seata-server:2.1.0),禁用latest标签; - MySQL 和 Nacos 的密码通过
environment注入,不写死在配置文件里,更不要用默认密码; - Seata Server 默认开放 7091 管理端口,生产环境务必通过
extra_hosts或反向代理限制访问来源,或关闭metrics端点; - 业务服务 Dockerfile 中用非 root 用户运行(
USER 1001),并删掉构建阶段的敏感工具(如 curl、vim)。
验证事务是否真正生效
启动成功 ≠ 分布式事务可用。上线前必须实测回滚场景:
- 调用一个跨服务接口(如“下单”),在 storage-service 中人为抛出异常;
- 检查 order-service 是否回滚了订单插入,storage-service 是否未扣减库存;
- 登录 Seata 控制台(
http://localhost:7091)查看全局事务状态(UNDO_LOG表是否有记录); - 查 Nacos 配置中心,确认各服务的
seata.enabled=true和分组(default_tx_group)一致。











