Tour Mate 项目 - Docker + Spring Boot + 多服务 配置踩坑与最佳实践笔记
最后更新:2026-02
1. 核心原则(必须记住)
- 敏感信息(密码、密钥、token)绝不能硬编码在 docker-compose.yml / application.yml / git 仓库
- 配置应遵循 12-Factor App:代码与配置分离,运行时注入
- Spring Boot 推荐运行时通过环境变量激活 profile(而非构建时 Maven profile)
- Docker 网络 subnet 必须用内网私有段(172.16–172.31、10.、192.168.),不能写公网 IP
2. .env 文件体系(最重要部分)
文件作用对比
| 文件 | 是否提交 Git | 用途 | 典型存放位置 | 启动方式 |
|---|---|---|---|---|
| .env.example | 是 | 模板 + 注释 + 安全提示 | 项目根目录 | 手动 cp → .env |
| .env | 否 | 开发/本地真实值 | docker/ 或根目录 | docker-compose 自动加载(同级) |
| .env.prod | 否 | 生产真实值(强密码、公网IP等) | 项目根目录 | --env-file .env.prod 或 env_file |
| .env.infra / .env.dev | 否 | (可选)基础设施专用 | — | 不推荐区分,易混乱 |
推荐做法(2025–2026 主流)
- 只保留 一份 .env.prod(生产用)
- 开发也尽量用同一套变量结构,只是值不同
- 两个 compose 文件都写:
yaml
env_file:
- ../.env.prod # 或 ./../.env.prod 看实际层级