Files
dashboard/.qoder/repowiki/knowledge/zh/后端环境变量与配置加载体系/后端环境变量与配置加载体系.md
T
eafonyang 003b44e2bd ui 优化
2026-07-14 18:56:13 +08:00

52 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
---
kind: configuration_system
name: 后端环境变量与配置加载体系
category: configuration_system
scope:
- '**'
source_files:
- backend/src/config/loadEnv.js
- backend/src/config/env.js
- backend/src/config/database.js
- backend/src/config/redis.js
- backend/src/config/logger.js
- .env.example
- backend/src/app.js
---
## 系统概述
本项目的配置系统基于 Node.js 的 `dotenv` + 进程环境变量(`process.env`)实现,采用「根目录 `.env` 文件 + Docker compose env_file 注入」的双源模式,通过统一的入口在应用启动时完成加载。
## 核心机制
- **统一入口**`backend/src/app.js` 首行 `require('./config/loadEnv')` 触发配置加载,确保所有后续模块都能读到环境变量。
- **本地开发**`loadEnv.js` 解析项目根目录 `dashboard/.env`(相对 `__dirname` 向上四层),使用 `dotenv.config({ path })` 注入到 `process.env`;若文件不存在则静默跳过。
- **Docker 部署**:容器内无 `.env` 文件,由 `docker-compose.yml``env_file` 直接注入环境变量,`fs.existsSync` 判断避免覆盖已有值。
- **环境判断**`config/env.js` 暴露 `APP_ENV``isDevelopment``isProduction` 三个常量,供各模块按环境切换行为(如 Sequelize SQL 日志开关)。
## 配置项组织
所有可配置项集中在根级 `.env.example`,按功能域分组注释:
- 数据库:`DATABASE_HOST/PORT/NAME/USER/PASSWORD`
- 应用:`APP_NAME``APP_ENV``PORT`
- JWT 与初始管理员:`JWT_SECRET``DASHBOARD_ADMIN_USERNAME/PASSWORD`
- Meilisearch`MEILISEARCH_URL/API_KEY/INDEX`
- AWS S3`AWS_REGION/ACCESS_KEY_ID/SECRET_ACCESS_KEY/S3_OTA_BUCKET/S3_MEASUREMENT_BUCKET`
- OTA URL 与上传目录:`OTA_X8_PUBLIC_BASE``OTA_X9_URL_BASE``OTA_UPLOAD_DIR`
- Curve API`CURVE_API_BASE_URL`
- Redis EQ 缓存:`REDIS_HOST/PORT/PASSWORD/EQ_DB`
## 配置消费方式
各模块直接通过 `process.env.XXX || '默认值'` 读取,形成「分散式消费」模式:
- `config/database.js` → MySQL 连接参数
- `config/redis.js` → ioredis 客户端(含密码可选、错误监听)
- `config/logger.js` → winston 输出级别与文件路径
- `services/otaStorage.js` → OTA 包上传目录与 S3 配置
- `services/measurementStorage.js` → 频响测量文件 S3 存储
- `routes/models.js` → Meilisearch 搜索索引
- `services/curveClient.js` → 曲线查询外部 API 基地址
## 设计约定与约束
1. **禁止硬编码敏感信息**:所有密钥、密码、URL 必须来自环境变量,`.env` 已在 `.gitignore` 中排除。
2. **默认值兜底**:每个 `process.env` 读取都提供合理默认值,保证本地开箱即用。
3. **按域拆分配置文件**:数据库、Redis、日志等基础设施各自独立文件,便于扩展新依赖。
4. **Docker 优先**:生产环境推荐通过 compose `env_file` 注入而非挂载 `.env` 文件。
5. **新增配置项流程**:先在 `.env.example` 添加注释说明,再在各消费处补充 `process.env.XXX || default`