代码环境
- 仓库:https://github.com/springvortex/spring-cloud-alibaba.git
- 分支:
release/v1.0.0- JDK:
21- Spring Boot:
4.1.1
部署配置里有一类文件适合进 Git,另一类绝对不适合。这次部署目录把两者拆开:application.yaml.template 是可公开的初始模板,服务器上的 application.yaml 是运行配置,只保存在部署机。
忽略规则很直接:
.env
logs/
config/**/application.yaml
https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/.gitignore
模板只写环境差异,不复制全量配置。Provider 的模板覆盖 Nacos、MySQL、Redis 和 Zipkin 地址:
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.100.128:8848
datasource:
url: jdbc:mysql://192.168.100.128:3306/spring_cloud_alibaba?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&sslMode=REQUIRED
data:
redis:
host: 192.168.100.128
port: 6379
它为什么能覆盖镜像里的配置?因为 Jib 生成的每个镜像都带了这个 JVM 参数:
-Dspring.config.additional-location=optional:file:/app/config/
https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/pom.xml
Compose 再把部署机目录挂载到 /app/config:
volumes:
- ./config/provider:/app/config:ro
https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/docker-compose.yml
于是 /app/config/application.yaml 参与配置加载,模板里的地址覆盖镜像内置 dev 基线;没有写在模板里的路由、线程池、日志等配置继续使用镜像内置值。.template 后缀不会被 Spring Boot 当成配置文件,它只是给人复制的起点。
这次命名也从早期的 application-vm.yaml 收敛为 application.yaml。这不是简单改名:前者需要 vm Profile 配合,后者是通用外置配置。因此 .env 里只需要:
SPRING_PROFILE=dev
https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/.env.example
注意,外置 application.yaml 不是 dev 专属文件。切换到 prod 时也要检查里面是否还有开发 IP、MailHog 或测试端口,避免“Profile 换了,地址却还被外置文件覆盖”的错觉。
经验总结
模板进 Git,运行配置留部署机;模板只写差异,不搬运全量。这样基础设施迁移只需要改服务器上的 application.yaml 并重启服务,业务默认值变化才进镜像。
评论
评论由 GitHub Discussions 承载,需要 GitHub 账号登录。