3.0 KiB
3.0 KiB
kind, name, category, scope, source_files
| kind | name | category | scope | source_files | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| configuration_system | 后端环境变量与配置加载体系 | configuration_system |
|
|
系统概述
本项目的配置系统基于 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 基地址
设计约定与约束
- 禁止硬编码敏感信息:所有密钥、密码、URL 必须来自环境变量,
.env已在.gitignore中排除。 - 默认值兜底:每个
process.env读取都提供合理默认值,保证本地开箱即用。 - 按域拆分配置文件:数据库、Redis、日志等基础设施各自独立文件,便于扩展新依赖。
- Docker 优先:生产环境推荐通过 compose
env_file注入而非挂载.env文件。 - 新增配置项流程:先在
.env.example添加注释说明,再在各消费处补充process.env.XXX || default。