Spring Cloud 本地基础设施:固定版本的 Docker Compose 学习环境
本文只用于本地学习。生产环境请使用各组件官方部署方式、固定版本、独立凭据、持久化存储和高可用方案。
1. 为什么不使用 latest
latest 会让同一份 Compose 文件在不同时间拉到不同版本,导致配置、数据库脚本、客户端协议和启动行为不可复现。Nacos、Seata、RabbitMQ、MySQL、Elasticsearch 和 Kibana 都应固定版本,且 Elasticsearch/Kibana 必须匹配。
2. 服务拆分
本地环境可以包含:
MySQL 配置和业务数据
Nacos 注册中心与配置中心
Seata 分布式事务协调器
RabbitMQ 消息队列
Elasticsearch/Kibana 可选的日志或检索环境
不要把所有组件配置成默认密码,也不要把管理端口暴露到公网。凭据通过 .env、Docker secret 或本地未提交文件注入。
3. Compose 设计原则
每个服务应有固定 image tag、持久化 volume、独立 network、healthcheck、资源限制和最小权限。depends_on 只表示启动顺序,不表示依赖服务已经可以接受请求;应用仍要做连接重试和就绪检查。
数据库初始化脚本必须来自对应组件版本。尤其是 Seata TC 表和业务库 undo_log,不能从旧教程复制。
4. Nacos 2.x
Nacos 2.x 需要同时关注客户端端口、集群通信端口、数据库初始化表和鉴权。单机学习环境可以关闭不需要的集群能力,生产环境应按官方文档部署鉴权、持久化和高可用。
Spring Cloud Alibaba 客户端版本必须与 Spring Boot、Spring Cloud 和 Nacos 客户端兼容。使用 Config Data Import 时,不要继续把 bootstrap 配置当成默认方案。
5. Seata 2.x
Seata Server 和客户端使用同一兼容方案。TC 使用 file 存储只适合本地验证,生产需要可恢复的数据库或官方支持的高可用存储,并执行同版本数据库脚本。
AT 参与的每个业务库都要有对应版本 undo_log。AT 不能回滚消息、缓存和第三方 API,外部副作用需要幂等、可靠消息或补偿。
6. RabbitMQ
使用受支持的 3.13+ 或 4.x 版本。关键消息配置 publisher confirms、持久化、消费者 ack、有限重试、死信和幂等。默认用户、默认密码和公网管理端口只应出现在临时本地环境。
7. 本地验证清单
- 所有容器固定版本并能重启恢复;
- 数据卷和初始化脚本可重复执行;
- 应用能检测服务未就绪并重试;
- Nacos 注册、配置导入和刷新可验证;
- Seata 能注册 TM/RM 并完成回滚测试;
- RabbitMQ 能确认发布、消费 ack 和死信;
- Compose 文件不含真实密码、token 或生产地址。
这套环境的目标是可复现学习,不是生产架构模板。生产部署前必须重新设计网络、存储、备份、监控、升级和灾备。