185 lines
4.0 KiB
Markdown
185 lines
4.0 KiB
Markdown
|
|
# 配置管理说明
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
本项目采用分层配置管理,支持多环境部署。配置系统基于Flask的配置机制,通过环境变量和配置文件实现灵活的配置管理。
|
|||
|
|
|
|||
|
|
## 配置结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
config/
|
|||
|
|
├── __init__.py # 配置工厂和映射
|
|||
|
|
├── base.py # 基础配置类
|
|||
|
|
├── development.py # 开发环境配置
|
|||
|
|
├── production.py # 生产环境配置
|
|||
|
|
├── testing.py # 测试环境配置
|
|||
|
|
└── local.py # 本地配置(git忽略)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 环境变量文件
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
env.example # 环境变量示例
|
|||
|
|
env.test # 测试环境变量
|
|||
|
|
env.production # 生产环境变量
|
|||
|
|
.env # 本地环境变量(git忽略)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 1. 设置环境变量
|
|||
|
|
|
|||
|
|
复制环境变量示例文件:
|
|||
|
|
```bash
|
|||
|
|
cp env.example .env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
编辑 `.env` 文件,设置实际的环境变量值。
|
|||
|
|
|
|||
|
|
### 2. 在应用中使用配置
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from config import get_config
|
|||
|
|
|
|||
|
|
# 获取当前环境的配置类
|
|||
|
|
config_class = get_config()
|
|||
|
|
|
|||
|
|
# 在Flask应用中使用
|
|||
|
|
app.config.from_object(config_class)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 切换环境
|
|||
|
|
|
|||
|
|
通过设置 `FLASK_ENV` 环境变量切换环境:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 开发环境
|
|||
|
|
export FLASK_ENV=development
|
|||
|
|
|
|||
|
|
# 生产环境
|
|||
|
|
export FLASK_ENV=production
|
|||
|
|
|
|||
|
|
# 测试环境
|
|||
|
|
export FLASK_ENV=testing
|
|||
|
|
|
|||
|
|
# 本地环境
|
|||
|
|
export FLASK_ENV=local
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置项说明
|
|||
|
|
|
|||
|
|
### 必需配置项
|
|||
|
|
|
|||
|
|
- `SECRET_KEY`: Flask应用密钥
|
|||
|
|
- `DATABASE_URL`: 数据库连接URL
|
|||
|
|
- `LLM_API_URL`: OpenAI兼容API基础URL
|
|||
|
|
- `LLM_API_KEY`: OpenAI兼容API密钥
|
|||
|
|
- `WX_APPID`: 微信小程序AppID
|
|||
|
|
- `WX_SECRET`: 微信小程序Secret
|
|||
|
|
|
|||
|
|
### 可选配置项
|
|||
|
|
|
|||
|
|
- `FLASK_ENV`: 应用环境(默认:development)
|
|||
|
|
- `CORS_ORIGINS`: 跨域域名(默认:*)
|
|||
|
|
- `LOG_LEVEL`: 日志级别(默认:INFO)
|
|||
|
|
- `CACHE_TYPE`: 缓存类型(默认:simple)
|
|||
|
|
- `SESSION_LIFETIME_HOURS`: 会话生命周期(默认:24小时)
|
|||
|
|
|
|||
|
|
## 环境特定配置
|
|||
|
|
|
|||
|
|
### 开发环境 (development)
|
|||
|
|
- 启用调试模式
|
|||
|
|
- 使用SQLite数据库(如果未设置DATABASE_URL)
|
|||
|
|
- 关闭CSRF保护
|
|||
|
|
- 详细的日志输出
|
|||
|
|
|
|||
|
|
### 生产环境 (production)
|
|||
|
|
- 关闭调试模式
|
|||
|
|
- 启用CSRF保护
|
|||
|
|
- 使用Redis缓存
|
|||
|
|
- 邮件错误报告
|
|||
|
|
- 严格的跨域控制
|
|||
|
|
|
|||
|
|
### 测试环境 (testing)
|
|||
|
|
- 使用内存数据库
|
|||
|
|
- 关闭CSRF保护
|
|||
|
|
- 使用测试密钥
|
|||
|
|
- 最短的缓存时间
|
|||
|
|
|
|||
|
|
### 本地环境 (local)
|
|||
|
|
- 继承开发环境配置
|
|||
|
|
- 可自定义本地特定设置
|
|||
|
|
- 不会被提交到版本控制
|
|||
|
|
|
|||
|
|
## 安全注意事项
|
|||
|
|
|
|||
|
|
1. **敏感信息保护**
|
|||
|
|
- 不要在代码中硬编码敏感信息
|
|||
|
|
- 使用环境变量管理所有敏感配置
|
|||
|
|
- 确保 `.env` 文件不被提交到版本控制
|
|||
|
|
|
|||
|
|
2. **生产环境安全**
|
|||
|
|
- 使用强密码和密钥
|
|||
|
|
- 设置具体的跨域域名
|
|||
|
|
- 启用所有安全功能
|
|||
|
|
|
|||
|
|
3. **配置验证**
|
|||
|
|
- 应用启动时会验证必需配置项
|
|||
|
|
- 缺少必需配置项会抛出异常
|
|||
|
|
|
|||
|
|
## 最佳实践
|
|||
|
|
|
|||
|
|
1. **环境分离**
|
|||
|
|
- 不同环境使用不同的配置
|
|||
|
|
- 避免在代码中硬编码环境特定配置
|
|||
|
|
|
|||
|
|
2. **配置文档**
|
|||
|
|
- 及时更新配置说明
|
|||
|
|
- 记录配置项的用途和影响
|
|||
|
|
|
|||
|
|
3. **配置测试**
|
|||
|
|
- 在测试环境中验证配置
|
|||
|
|
- 确保配置变更不会影响功能
|
|||
|
|
|
|||
|
|
4. **配置备份**
|
|||
|
|
- 备份重要的配置文件
|
|||
|
|
- 记录配置变更历史
|
|||
|
|
|
|||
|
|
## 故障排除
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
1. **配置加载失败**
|
|||
|
|
- 检查环境变量是否正确设置
|
|||
|
|
- 确认配置文件路径正确
|
|||
|
|
|
|||
|
|
2. **敏感信息泄露**
|
|||
|
|
- 检查是否有硬编码的敏感信息
|
|||
|
|
- 确认 `.env` 文件在 `.gitignore` 中
|
|||
|
|
|
|||
|
|
3. **环境切换失败**
|
|||
|
|
- 检查 `FLASK_ENV` 环境变量
|
|||
|
|
- 确认对应的配置类存在
|
|||
|
|
|
|||
|
|
### 调试技巧
|
|||
|
|
|
|||
|
|
1. **查看当前配置**
|
|||
|
|
```python
|
|||
|
|
from config import get_config
|
|||
|
|
config = get_config()
|
|||
|
|
print(config.__dict__)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查环境变量**
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
print(os.environ.get('FLASK_ENV'))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **验证配置项**
|
|||
|
|
```python
|
|||
|
|
# 在应用启动时检查配置
|
|||
|
|
app.logger.info(f"当前环境: {app.config['ENV']}")
|
|||
|
|
app.logger.info(f"调试模式: {app.config['DEBUG']}")
|
|||
|
|
```
|