diff --git a/CLAUDE.md b/CLAUDE.md index 6d11099..2c4a8b8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -112,9 +112,30 @@ go vet ./... # 静态分析 > **注意**:前端目前没有测试基础设施(无 vitest 配置、无测试文件)。后端使用 `testing` + `testify`(assert/require/mock)测试,编译期接口检查 `var _ Interface = (*Impl)(nil)`。 +## 配置环境切换 + +项目通过 `APP_ENV` 环境变量控制配置文件加载: + +- **本地开发**(默认):`APP_ENV=dev` → 加载 `config/config.dev.yaml` + - Debug 日志、关闭限流、允许所有 CORS + - 使用 `backend/.env` 中的远程 Redis/PostgreSQL 地址 + +- **生产部署**:`APP_ENV=prod` → 加载 `config/config.prod.yaml` + - Info/JSON 日志、启用限流、严格 CORS 白名单 + - Docker Compose 自动设置,使用容器内网地址 + +**配置优先级**:环境变量 > config.{env}.yaml > config.yaml > 默认值 + +**手动切换环境**(测试用): +```bash +cd backend +APP_ENV=prod go run ./cmd/server # 本地测试生产配置 +APP_ENV=dev go run ./cmd/server # 显式指定开发配置 +``` + ## 配置系统 -配置文件:`backend/config.yaml`(默认值),可被 `config.{env}.yaml` 覆盖。 +配置文件:`backend/config/config.yaml`(基础配置),可被 `config/config.{env}.yaml` 覆盖。 **优先级(从低到高)**:默认值 → `config.yaml` → `config.{env}.yaml`(由 `APP_ENV` 环境变量决定加载哪个 env 特定文件)→ `.env` 文件 → 环境变量 diff --git a/backend/.env.example b/backend/.env.example index 93177ea..092827d 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,5 +1,7 @@ # 运行环境 -# dev / prod,决定加载 config.dev.yaml 或 config.prod.yaml(可选) +# dev:本地开发环境(debug 日志、关闭限流、允许所有 CORS) +# prod:生产环境(info 日志、启用限流、严格 CORS 白名单) +# 本地开发保持 dev,生产部署会被 docker-compose.yml 覆盖为 prod APP_ENV=dev # AI 服务 API Key diff --git a/docker-compose.yml b/docker-compose.yml index 74c04bd..f2e5ff1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,6 +20,8 @@ services: env_file: - /opt/camtalk/.env environment: + # 运行环境(强制生产环境) + - APP_ENV=prod # 三级存储配置(敏感信息通过 env_file 注入) - CAMTALK_STORAGE_REDIS_ENABLED=${CAMTALK_STORAGE_REDIS_ENABLED:-true} - CAMTALK_STORAGE_PERSISTENCE_ENABLED=${CAMTALK_STORAGE_PERSISTENCE_ENABLED:-true}