first commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
---
|
||||
name: 配置全面去环境变量化
|
||||
overview: 移除应用配置的环境变量注入机制(viper AutomaticEnv),将所有配置统一收敛到 configs/config.yaml 直接配置,并更新所有相关注释与校验逻辑。
|
||||
todos:
|
||||
- id: remove-viper-env
|
||||
content: 删除 pkg/setting/setting.go 中 SetEnvPrefix、SetEnvKeyReplacer、AutomaticEnv 三行及 strings import,更新函数注释为仅从 config 读取
|
||||
status: completed
|
||||
- id: update-config-comments
|
||||
content: 将 configs/config.yaml 中 13 处环境变量注入注释统一改为直接填写说明,JWT 密钥处标注必填
|
||||
status: completed
|
||||
- id: global-check-verify
|
||||
content: 执行 go build、go vet、lint 检查,全局搜索确认无 os.Getenv、AutomaticEnv、ZT_CLOSET_ 残留
|
||||
status: completed
|
||||
dependencies:
|
||||
- remove-viper-env
|
||||
- update-config-comments
|
||||
---
|
||||
|
||||
## 产品概述
|
||||
|
||||
彻底移除后端配置的环境变量注入机制,所有配置一律从 `configs/config.yaml` 配置文件读取,环境变量不再参与任何配置项的赋值或覆盖。
|
||||
|
||||
## 核心功能
|
||||
|
||||
- **禁用 viper 环境变量覆盖**:删除 `pkg/setting/setting.go` 中 `SetEnvPrefix`、`SetEnvKeyReplacer`、`AutomaticEnv` 三处环境变量绑定,配置仅来自 `configs/config.yaml`。
|
||||
- **更新配置文件说明**:将 `configs/config.yaml` 中 13 处「敏感信息通过环境变量 ZT_CLOSET_XXX 注入」注释统一改为「直接在此填写」说明,并在 JWT 密钥处标注必填要求。
|
||||
- **全局清理与复查**:确保 Go 代码与配置注释中无 `os.Getenv`、`AutomaticEnv`、`ZT_CLOSET_` 残留引用(第三方 Python 推理服务的库级环境变量除外)。
|
||||
- **保持现有校验**:`main.go` 中 JWT SecretKey 为空的启动失败校验继续生效,提醒用户必须在配置文件中填写密钥才能启动。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- 语言:Go
|
||||
- 配置库:spf13/viper(保留 YAML 文件读取,移除环境变量绑定)
|
||||
- 配置文件:`configs/config.yaml`(已被 .gitignore 忽略,不入库)
|
||||
|
||||
## 实现方案
|
||||
|
||||
### 总体策略
|
||||
|
||||
环境变量注入在 Go 侧仅存在于 `pkg/setting/setting.go` 的 `NewSetting` 中,且全仓库已无 `os.Getenv` 调用(CORS 中间件此前已改为读取 `global.ServerSetting.Domain`)。因此本次改动为「单点删除 + 注释更新 + 全局复查」,不引入新机制、不影响其余 viper 读取逻辑。
|
||||
|
||||
### 核心数据流(改造后)
|
||||
|
||||
```
|
||||
启动 main.go init -> setting.NewSetting()
|
||||
-> viper 读取 configs/config.yaml(唯一来源)
|
||||
-> ReadSection 逐节解析到 global.*Setting
|
||||
```
|
||||
|
||||
环境变量不再参与任何环节。
|
||||
|
||||
### 模块改动
|
||||
|
||||
1. **pkg/setting/setting.go**
|
||||
|
||||
- 删除 `vp.SetEnvPrefix("ZT_CLOSET")`、`vp.SetEnvKeyReplacer(...)`、`vp.AutomaticEnv()` 三行。
|
||||
- 更新 `NewSetting` 顶部注释为「仅从 configs/config.yaml 读取配置,不支持环境变量覆盖」。
|
||||
- 删除仅被 `strings.NewReplacer` 使用的 `strings` import(不删会导致 unused import 编译错误)。
|
||||
- 保留 AddConfigPath / SetConfigName / SetConfigType / ReadInConfig 逻辑。
|
||||
|
||||
2. **configs/config.yaml**(13 处注释统一改写,值保持空串待用户填写)
|
||||
|
||||
- Mysql.Password、Redis.Password、Cos.CosSecretID、Cos.CosSecretKey、Cos.CdnDownloadSecretKey、Tokenhub.APIKey、WechatMini.AppSecret:注释改为「# 直接在此填写(config.yaml 已被 .gitignore 忽略,不会提交到仓库)」。
|
||||
- JWT.SecretKey:同上,并追加「必填,为空则启动失败」。
|
||||
- WechatPay.AppID / MchID / APIv3Key / SerialNo / NotifyURL / RefundNotifyURL:注释改为「# 直接在此填写(config.yaml 已被 .gitignore 忽略,不会提交到仓库)」。
|
||||
|
||||
3. **configs/config.example.yaml**:已确认为纯占位符示例、无环境变量表述,保持不动(该文件会入库,绝不可填真实密钥)。
|
||||
4. **main.go**:启动校验逻辑(JWT.SecretKey 非空)无需改动,移除环境变量后仍有效。
|
||||
|
||||
### 范围边界
|
||||
|
||||
- `thirdparty/matting_server/main.py`、`thirdparty/classification_server/main.py` 中的环境变量是 huggingface/transformers 库运行要求(必须在 import 前设置),不属于本应用配置体系,本次不改动。
|
||||
- `README.md` 为空文件,不涉及。
|
||||
|
||||
### 验证要点
|
||||
|
||||
- `go build ./...`、`go vet ./...`、`read_lints` 无新增错误。
|
||||
- 全局搜索确认 Go 代码与配置文件中无残留 `os.Getenv`、`AutomaticEnv`、`ZT_CLOSET_` 引用(thirdparty Python 除外)。
|
||||
|
||||
### 安全说明
|
||||
|
||||
- `configs/config.yaml` 已被 `.gitignore` 忽略,敏感信息写入不会入库;提醒用户注意本地文件权限与备份安全。
|
||||
- `configs/config.example.yaml` 会随代码入库,必须保持占位符示例值。
|
||||
Reference in New Issue
Block a user