Files
tyapi-server/internal/config/README.md
2025-07-11 21:05:58 +08:00

308 lines
6.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 TYAPI 配置系统文档
## 📋 目录
- [配置策略概述](#配置策略概述)
- [文件结构](#文件结构)
- [配置加载流程](#配置加载流程)
- [环境配置](#环境配置)
- [配置验证](#配置验证)
- [使用指南](#使用指南)
- [最佳实践](#最佳实践)
- [故障排除](#故障排除)
## 🎯 配置策略概述
TYAPI 采用**分层配置策略**,支持多环境部署和灵活的配置管理:
```
📁 配置层次结构
├── 📄 config.yaml (基础配置模板)
└── 📁 configs/
├── 📄 env.development.yaml (开发环境覆盖)
├── 📄 env.production.yaml (生产环境覆盖)
└── 📄 env.testing.yaml (测试环境覆盖)
```
### 配置加载优先级(从高到低)
1. **环境变量** - 用于敏感信息和运行时覆盖
2. **环境特定配置文件** - `configs/env.{environment}.yaml`
3. **基础配置文件** - `config.yaml`
4. **默认值** - 代码中的默认配置
## 📁 文件结构
### 基础配置文件
- **位置**: `config.yaml`
- **作用**: 包含所有默认配置值,作为配置模板
- **特点**:
- 包含完整的配置结构
- 提供合理的默认值
- 作为所有环境的基础配置
### 环境配置文件
- **位置**: `configs/env.{environment}.yaml`
- **支持的环境**: `development`, `production`, `testing`
- **特点**:
- 只包含需要覆盖的配置项
- 继承基础配置的所有默认值
- 支持嵌套配置的深度合并
## 🔄 配置加载流程
### 1. 环境检测
```go
// 环境变量检测优先级
CONFIG_ENV > ENV > APP_ENV > 默认值(development)
```
### 2. 配置文件加载顺序
1. 读取基础配置文件 `config.yaml`
2. 查找环境配置文件 `configs/env.{environment}.yaml`
3. 合并环境配置到基础配置
4. 应用环境变量覆盖
5. 验证配置完整性
6. 输出配置摘要
### 3. 配置合并策略
- **递归合并**: 支持嵌套配置的深度合并
- **覆盖机制**: 环境配置覆盖基础配置
- **环境变量**: 最终覆盖任何配置项
## 🌍 环境配置
### 开发环境 (development)
```yaml
# configs/env.development.yaml
app:
env: development
database:
password: Pg9mX4kL8nW2rT5y
jwt:
secret: JwT8xR4mN9vP2sL7kH3oB6yC1zA5uF0qE9tW
```
### 生产环境 (production)
```yaml
# configs/env.production.yaml
app:
env: production
server:
mode: release
database:
sslmode: require
logger:
level: warn
format: json
```
### 测试环境 (testing)
```yaml
# configs/env.testing.yaml
app:
env: testing
server:
mode: test
database:
password: test_password
name: tyapi_test
redis:
db: 15
logger:
level: debug
jwt:
secret: test-jwt-secret-key-for-testing-only
```
## ✅ 配置验证
### 验证项目
- **数据库配置**: 主机、用户名、数据库名不能为空
- **JWT 配置**: 生产环境必须设置安全的 JWT 密钥
- **服务器配置**: 超时时间必须大于 0
- **连接池配置**: 最大空闲连接数不能大于最大连接数
### 验证失败处理
- 配置验证失败时,应用无法启动
- 提供详细的中文错误信息
- 帮助快速定位配置问题
## 📖 使用指南
### 1. 启动应用
```bash
# 使用默认环境 (development)
go run cmd/api/main.go
# 指定环境
CONFIG_ENV=production go run cmd/api/main.go
ENV=testing go run cmd/api/main.go
APP_ENV=production go run cmd/api/main.go
```
### 2. 添加新的配置项
1.`config.yaml` 中添加默认值
2.`internal/config/config.go` 中定义对应的结构体字段
3. 在环境配置文件中覆盖特定值(如需要)
### 3. 环境变量覆盖
```bash
# 覆盖数据库密码
export DATABASE_PASSWORD="your-secure-password"
# 覆盖JWT密钥
export JWT_SECRET="your-super-secret-jwt-key"
# 覆盖服务器端口
export SERVER_PORT="9090"
```
### 4. 添加新的环境
1. 创建 `configs/env.{new_env}.yaml` 文件
2.`getEnvironment()` 函数中添加环境验证
3. 配置相应的环境特定设置
## 🏆 最佳实践
### 1. 配置文件管理
-**基础配置**: 在 `config.yaml` 中设置合理的默认值
-**环境配置**: 只在环境文件中覆盖必要的配置项
-**敏感信息**: 通过环境变量注入,不要写在配置文件中
-**版本控制**: 将配置文件纳入版本控制,但排除敏感信息
### 2. 环境变量使用
-**生产环境**: 所有敏感信息都通过环境变量注入
-**开发环境**: 可以使用配置文件中的默认值
-**测试环境**: 使用独立的测试配置
### 3. 配置验证
-**启动验证**: 应用启动时验证所有必要配置
-**类型检查**: 确保配置值的类型正确
-**逻辑验证**: 验证配置项之间的逻辑关系
### 4. 日志和监控
-**配置摘要**: 启动时输出关键配置信息
-**环境标识**: 明确显示当前运行环境
-**配置变更**: 记录重要的配置变更
## 🔧 故障排除
### 常见问题
#### 1. 配置文件未找到
```
❌ 错误: 未找到 config.yaml 文件,请确保配置文件存在
```
**解决方案**: 确保项目根目录下存在 `config.yaml` 文件
#### 2. 环境配置文件未找到
```
未找到环境配置文件 configs/env.development.yaml将使用基础配置
```
**解决方案**:
- 检查环境变量设置是否正确
- 确认 `configs/env.{environment}.yaml` 文件存在
#### 3. 配置验证失败
```
❌ 错误: 配置验证失败: 数据库主机地址不能为空
```
**解决方案**:
- 检查 `config.yaml` 中的数据库配置
- 确认环境配置文件中的覆盖值正确
#### 4. JWT 密钥安全问题
```
❌ 错误: 生产环境必须设置安全的JWT密钥
```
**解决方案**:
- 通过环境变量设置安全的 JWT 密钥
- 不要使用默认的测试密钥
### 调试技巧
#### 1. 查看配置摘要
启动时查看配置摘要输出,确认:
- 当前运行环境
- 使用的配置文件
- 关键配置值
#### 2. 环境变量检查
```bash
# 检查环境变量
echo $CONFIG_ENV
echo $ENV
echo $APP_ENV
```
#### 3. 配置文件语法检查
```bash
# 检查YAML语法
yamllint config.yaml
yamllint configs/env.development.yaml
```
## 📚 相关文件
- `internal/config/config.go` - 配置结构体定义
- `internal/config/loader.go` - 配置加载逻辑
- `config.yaml` - 基础配置文件
- `configs/env.*.yaml` - 环境特定配置文件
## 🔄 更新日志
### v1.0.0
- 实现基础的分层配置策略
- 支持多环境配置
- 添加配置验证机制
- 实现环境变量覆盖功能
---
**注意**: 本配置系统遵循中文规范,所有面向用户的错误信息和日志都使用中文。