生产环境部署Seata 2.0.0必须落实四件事:一是启用store.mode=db模式,用MySQL持久化事务状态,确保重启不丢数据;二是全部配置上Nacos,通过独立命名空间和SEATA_GROUP实现动态更新与环境隔离;三是使用带SHA256校验的官方镜像seataio/seata-server:2.0.0(摘要含0cf5ea82efab...);四是配置健康检查、资源限制及日志挂载,保障服务可观测与稳定性。

用 Docker 部署 Seata 到生产环境,核心不是“能不能跑”,而是“重启不丢数据、配置可动态更新、服务能自动发现、故障能快速隔离”。Seata 2.0.0 的稳定性提升明显,但默认配置完全不适合上线——文件模式存事务日志?容器一重启全局事务全丢;硬编码数据库地址?换库就得重打镜像;没接配置中心?改个超时时间得停服。下面直接讲清楚生产必须落地的四件事。
必须用数据库模式持久化事务状态
Seata 默认 store.mode=file,只适合本地调试。生产必须切到 store.mode=db,把全局事务、分支事务、锁记录等全部写进 MySQL,确保容器重建、节点宕机后事务状态不丢失。
- 提前建好专用数据库(如
seata),字符集强制设为utf8mb4,隔离级别设为READ-COMMITTED - 执行官方
script/server/db/mysql.sql脚本初始化表结构,注意检查global_table、branch_table、lock_table三张核心表是否创建成功 - 在 Nacos 中配置项里明确填写 JDBC 连接参数:
store.db.url、store.db.user、store.db.password,密码建议用 Nacos 加密功能托管
必须通过 Nacos 统一管理配置与服务发现
把 registry.conf 和 file.conf 拆解后全部上 Nacos,是实现配置热更新和多环境隔离的关键。Seata Server 启动时只从 Nacos 拉取配置,不再依赖挂载文件。
- 在 Nacos 创建独立命名空间(如
seata-prod),避免和业务配置混在一起 - 新建配置项
seataServer.properties,Group 设为SEATA_GROUP,内容填入完整配置(包括store.mode=db、service.vgroupMapping.my_test_tx_group=default等关键项) - 启动容器时通过环境变量指定 Nacos 地址:
-e SEATA_CONFIG_NAME=nacos:seataServer.properties,并确保nacos.server-addr可达
必须使用校验过的官方镜像并固定版本
别用 :latest,也别随便拉第三方构建的镜像。生产环境必须锁定 SHA256 摘要,防止镜像被篡改或缓存污染。
- 拉取后立即校验:
docker inspect --format='{{.RepoDigests}}' seataio/seata-server:2.0.0,确认输出含sha256:0cf5ea82efab238c48f72f44001c5de56f23e8f64a857b4653135e78c5359e09 - 内网部署先
docker save -o seata-2.0.0.tar seataio/seata-server:2.0.0,再docker load -i导入,跳过网络拉取环节 - 容器启动命令中显式指定镜像 ID 或带摘要的 tag,杜绝版本歧义
必须配置健康检查与资源限制
Docker 编排工具(如 Docker Compose 或 K8s)需要知道 Seata 是否真正就绪,不能只看端口通。同时要防止单个容器吃光宿主机资源。
- 在
docker run或compose.yml中添加健康检查:--health-cmd="curl -f http://localhost:7091/actuator/health || exit 1"(Seata 2.0+ 内置 Actuator) - 限制内存上限:
--memory=1g --memory-swap=1g,CPU 配额按需设置(如--cpus=1.5) - 挂载日志目录到宿主机(如
-v /data/seata/logs:/seata-server/logs),方便排查事务卡顿、回滚失败等问题


















