Node.js 项目的部署配置/环境设置该怎么存?

Node.js 配置管理四种方式:环境变量(敏感信息首选)、配置文件(JSON/YAML,按环境分文件)、配置管理库(config/convict)、云密钥服务(生产密钥)。本文对比选型与安全红线。

最佳实践
文件、模块与依赖组织示意

**主流答案:敏感信息走环境变量,结构化配置走配置文件,两者组合使用。**按敏感度分层是核心原则。

方案一:环境变量(敏感信息首选)

// 开发期用 dotenv 加载 .env
require('dotenv').config();

const apiKey = process.env.API_KEY;
const dbUrl = process.env.DATABASE_URL;

优点:不进代码库、与 12-Factor 方法论一致、所有部署平台(Docker/K8s/Serverless)原生支持。红线:.env 必须进 .gitignore。

方案二:配置文件(结构化配置)

// config/default.json + config/production.json 按环境分层
const config = require('./config/' + (process.env.NODE_ENV || 'default') + '.json');

优点:层级清晰、可校验、非敏感配置进版本库有历史可追。适合端口、超时、功能开关这类"安全但随环境变"的项。

方案三:配置管理库

  • config:config/ 目录按 default.json、production.json 自动按 NODE_ENV 层叠合并;
  • convict:带 Schema 校验的配置,启动时就能发现配置错误;
  • dotenv-flow:dotenv 的多环境增强版。

方案四:密钥管理服务(生产推荐)

数据库密码、第三方密钥这类高机密配置,生产环境用 AWS Secrets Manager / HashiCorp Vault / 云厂商 KMS,应用启动时拉取,而不是落盘成文件。

组合实践(推荐)

非敏感配置(端口、超时、开关)→ config 文件,进 Git
敏感配置(密码、密钥)        → 环境变量 / 密钥服务,不进 Git
本地开发                      → .env(gitignore)+ .env.example(示例入库)

提供一个 .env.example(只有键名没有真实值)提交到仓库,新人照着填,是协作体验的关键细节。

常见问题(FAQ)

Q:配置文件能注释吗?
JSON 不支持注释。需要注释用 YAML、JSON5 或 .js 配置文件(module.exports = {...})。

Q:多环境配置怎么避免重复?
用层叠模式:default 放全量默认值,production.json 只写差异项(config 库自动合并)。

Q:Docker 里怎么注入配置?
docker run -e KEY=value,或 compose 的 env_file。K8s 用 ConfigMap(非敏感)+ Secret(敏感)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台