# 配置与部署规范落地说明
## 变更概述
本次更新根据 [`架构设计规范.md 第7章`](file:///home/along/MyCode/wanjiabuluo/worklog/doc/规范/架构设计规范.md) 的要求,完善了配置文件分离架构和部署相关文件,提高了配置管理的灵活性和可维护性。
## 主要变更内容
### 1. 配置文件分离架构(7.1 & 7.2 规范)
**新增配置文件**:
- [`src/main/resources/conf/env.properties`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/conf/env.properties) - 统一环境配置(所有服务共用)
- [`src/main/resources/conf/service.properties`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/conf/service.properties) - 服务个性化配置
- [`src/main/resources/conf/env.properties.example`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/conf/env.properties.example) - 环境配置模板
- [`src/main/resources/conf/service.properties.example`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/conf/service.properties.example) - 服务配置模板
**配置内容说明**:
- **env.properties** 包含:
- 数据库配置(MySQL 连接信息、连接池参数)
- Redis 配置(连接信息、连接池参数)
- Nacos 配置(注册中心和配置中心)
- 文件上传配置
- 日志配置(路径、级别)
- JVM 配置(堆内存、元空间、GC 策略)
- 业务配置(Token、日志内容限制等)
- **service.properties** 包含:
- 服务名称和实例名称
- 服务端口
- 环境标识(dev/test/prod)
- 租户标识(多租户场景)
- 个性化覆盖配置
### 2. 启动脚本增强(7.2 规范)
**更新文件**:[`deploy/scripts/start.sh`](file:///home/along/MyCode/wanjiabuluo/worklog/deploy/scripts/start.sh)
**主要变更**:
1. **新增配置加载函数** `load_properties()`:
- 支持自动加载 properties 文件
- 跳过注释和空行
- 将配置项导出为环境变量
2. **配置加载顺序**(遵循 7.2 规范):
```bash
# 1. 加载统一环境配置
load_properties "${APP_HOME}/conf/env.properties"
# 2. 加载服务个性化配置(覆盖同名参数)
load_properties "${APP_HOME}/conf/service.properties"
```
3. **参数化配置**:
- JVM 参数从环境变量读取(如未设置则使用默认值)
- Spring Boot 配置从环境变量读取
### 3. 状态查看脚本(7.3 规范)
**新增文件**:[`deploy/scripts/status.sh`](file:///home/along/MyCode/wanjiabuluo/worklog/deploy/scripts/status.sh)
**功能特性**:
- 检查应用运行状态
- 显示进程详细信息(PID、启动时间、运行时长、CPU/内存占用)
- 显示端口监听情况
- 显示最近日志(最后 10 行)
- 提供快捷命令提示
### 4. 日志配置集中化(7.4 规范)
**更新文件**:[`worklog-api/src/main/resources/logback-spring.xml`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/logback-spring.xml)
**主要变更**:
1. **从环境变量读取配置**:
```xml
```
2. **日志格式标准化**(强制包含 traceId 和 spanId):
```xml
```
3. **日志文件命名**(遵循 7.4 规范):
- 主日志:`app.log`(所有级别)
- SQL 日志:`sql.log`(MyBatis-Plus 独立输出)
- 所有日志输出到 `logs/` 目录(扁平结构,无子目录)
4. **新增 MyBatis-Plus 框架日志配置**:
```xml
```
### 5. Bootstrap 配置文件(7.5 规范)
**新增文件**:[`worklog-api/src/main/resources/bootstrap.yml`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/bootstrap.yml)
**功能说明**:
- 用于 Nacos 配置中心(可选,默认禁用)
- 支持从环境变量读取 Nacos 配置
- 最先加载,优先级高于 application.yml
### 6. 安全配置管理
**更新文件**:[`.gitignore`](file:///home/along/MyCode/wanjiabuluo/worklog/.gitignore)
**新增忽略项**:
```gitignore
# conf 目录下的实际配置文件(敏感信息)
worklog-api/src/main/resources/conf/env.properties
worklog-api/src/main/resources/conf/service.properties
```
**安全策略**:
- 实际配置文件(包含敏感信息)不提交到仓库
- 仅提交配置模板文件(.example)
- 部署时复制模板并修改实际配置
### 7. 架构设计文档更新
**更新文件**:[`doc/架构设计文档.md`](file:///home/along/MyCode/wanjiabuluo/worklog/doc/架构设计文档.md)
**新增章节**:
- **9.4.5 配置文件分离架构**(新增,遵循架构设计规范第7章)
- 9.4.5.1 配置文件结构
- 9.4.5.2 配置加载顺序
- 9.4.5.3 统一环境配置(env.properties)
- 9.4.5.4 服务个性化配置(service.properties)
- 9.4.5.5 日志配置集中化
- 9.4.5.6 配置文件安全管理
- **9.4.6 环境配置文件管理**(更新,简化为单配置文件策略)
- **9.4.7 安全注意事项**(更新,补充配置文件权限管理)
## 目录结构变化
### 新增目录和文件
**开发阶段**:
```text
worklog-api/src/main/resources/
├── conf/ # 配置文件目录(开发阶段)
│ ├── env.properties # 统一环境配置
│ ├── service.properties # 服务个性化配置
│ ├── env.properties.example # 环境配置模板
│ └── service.properties.example # 服务配置模板
├── bootstrap.yml # 启动配置(新增)
└── logback-spring.xml # 更新:增强日志配置
deploy/ # 项目根目录
└── scripts/
└── status.sh # 新增:状态查看脚本
```
**部署阶段**(打包后):
### 部署目录结构(生产环境)
```text
/opt/worklog/worklog-api/
├── bin/ # 脚本目录
│ ├── start.sh # 启动脚本(已增强)
│ ├── stop.sh # 停止脚本
│ ├── restart.sh # 重启脚本
│ └── status.sh # 状态查看脚本(新增)
├── lib/ # JAR 包目录
│ └── worklog-api.jar
├── conf/ # 配置文件目录(新增)
│ ├── env.properties # 统一环境配置
│ └── service.properties # 服务个性化配置
└── logs/ # 日志目录(扁平结构)
├── app.log # 应用主日志
├── sql.log # SQL 日志
├── console.log # 控制台日志
└── gc.log # GC 日志
```
## 配置规范对照
| 规范章节 | 规范要求 | 落地实现 | 状态 |
|---------|---------|---------|------|
| 7.1 配置文件分离 | env.properties + service.properties | ✅ 已实现 | ✅ |
| 7.2 配置加载顺序 | 先统一配置,后个性化配置 | ✅ start.sh 中实现 | ✅ |
| 7.3 打包目录结构 | bin/ lib/ conf/ | ✅ 已创建 | ✅ |
| 7.3 脚本完整性 | start/stop/restart/status | ✅ 已补充 status.sh | ✅ |
| 7.4 日志文件命名 | app.log 主日志 | ✅ 已配置 | ✅ |
| 7.4 SQL 日志独立 | sql.log 独立输出 | ✅ 已配置 | ✅ |
| 7.4 日志目录结构 | logs/ 扁平结构 | ✅ 已配置 | ✅ |
| 7.4 traceId/spanId | 强制包含 | ✅ 已配置 | ✅ |
| 7.4 配置参数化 | 从环境变量读取 | ✅ logback-spring.xml | ✅ |
| 7.5 Redis 配置 | 环境变量配置 | ✅ env.properties | ✅ |
| 7.5 Nacos 配置 | 环境变量配置 | ✅ env.properties + bootstrap.yml | ✅ |
## 部署指南
### 开发环境
1. 直接使用 [`application.yml`](file:///home/along/MyCode/wanjiabuluo/worklog/worklog-api/src/main/resources/application.yml) 配置
2. 无需配置 env.properties 和 service.properties
### 生产环境
1. **复制配置模板**:
```bash
cd /opt/worklog/worklog-api
cp conf/env.properties.example conf/env.properties
cp conf/service.properties.example conf/service.properties
```
2. **修改实际配置**:
```bash
vim conf/env.properties # 修改数据库、Redis 等配置
vim conf/service.properties # 修改服务名称、端口等
```
3. **设置文件权限**:
```bash
chmod 600 conf/env.properties
chmod 600 conf/service.properties
```
4. **启动应用**:
```bash
./bin/start.sh
```
5. **查看状态**:
```bash
./bin/status.sh
```
## 注意事项
1. **配置文件安全**:
- 实际配置文件包含敏感信息(数据库密码、Redis 密码等)
- 已在 .gitignore 中配置忽略,请勿提交到代码仓库
- 生产环境需设置文件权限为 600
2. **配置加载顺序**:
- env.properties → service.properties → application.yml
- 后加载的配置会覆盖前面的同名配置
3. **日志文件**:
- 主日志:app.log(所有级别)
- SQL 日志:sql.log(MyBatis-Plus 独立输出)
- 所有日志包含 traceId 和 spanId,便于链路追踪
4. **环境变量支持**:
- 启动脚本会自动将 properties 文件的配置导出为环境变量
- Spring Boot 和 Logback 可通过环境变量或 ${} 占位符读取配置
## 后续计划
根据架构设计规范,后续可继续完善:
1. **Maven Assembly 打包配置**(7.3 规范):
- 配置 assembly 插件
- 自动打包为标准目录结构(bin/ lib/ conf/)
2. **多环境配置优化**:
- 如需支持多环境,可创建多套 env.properties(env-dev.properties、env-prod.properties)
- 启动时根据环境参数选择加载不同配置文件
3. **配置中心集成**(可选):
- 启用 Nacos 配置中心
- 将敏感配置迁移到配置中心管理
## 相关文档
- [`架构设计规范.md`](file:///home/along/MyCode/wanjiabuluo/worklog/doc/规范/架构设计规范.md) - 第7章:配置与部署规范
- [`架构设计文档.md`](file:///home/along/MyCode/wanjiabuluo/worklog/doc/架构设计文档.md) - 第9章:部署配置
- [`DEPLOY.md`](file:///home/along/MyCode/wanjiabuluo/worklog/deploy/DEPLOY.md) - 部署指南