Node.js同服务器多环境(Dev/Live)凭据管理方案咨询
Node.js同一服务器多环境管理方案
下面是几种实用的多环境管理方法,可根据你的需求组合使用:
1. 环境变量文件拆分 + 加载工具
为每个环境创建独立的环境变量文件,配合工具加载对应配置:
- 创建
.env.dev、.env.prod等文件,分别存放各环境的凭据(如数据库链接、API密钥)和配置(端口、日志级别):# .env.dev NODE_ENV=development PORT=3000 DB_URL=mongodb://localhost:27017/dev_db API_KEY=dev_xxxxxx# .env.prod NODE_ENV=production PORT=3001 DB_URL=mongodb://localhost:27017/prod_db API_KEY=prod_xxxxxx - 使用
dotenv加载指定环境文件,配合cross-env统一设置环境变量(兼容Windows/Linux):
先安装依赖:npm install dotenv cross-env --save-dev - 在
package.json中添加启动脚本:"scripts": { "start:dev": "cross-env NODE_ENV=development node -r dotenv/config app.js dotenv_config_path=.env.dev", "start:prod": "cross-env NODE_ENV=production node -r dotenv/config app.js dotenv_config_path=.env.prod" } - 在应用中直接通过
process.env读取配置:const express = require('express'); const app = express(); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Running in ${process.env.NODE_ENV} mode on port ${port}`); });
2. 配置文件模块化拆分
将配置逻辑抽离为独立模块,根据环境自动加载对应配置:
- 在项目根目录创建
config文件夹,包含各环境配置文件和入口文件:// config/config.dev.js module.exports = { nodeEnv: 'development', port: 3000, db: { url: 'mongodb://localhost:27017/dev_db' }, apiKey: 'dev_xxxxxx' };// config/config.prod.js module.exports = { nodeEnv: 'production', port: 3001, db: { url: 'mongodb://localhost:27017/prod_db' }, apiKey: 'prod_xxxxxx' };// config/index.js const env = process.env.NODE_ENV || 'development'; module.exports = require(`./config.${env}.js`); - 在应用中引入配置模块使用:
const express = require('express'); const config = require('./config'); const app = express(); app.listen(config.port, () => { console.log(`Running in ${config.nodeEnv} mode on port ${config.port}`); }); - 启动时通过
cross-env指定环境:"scripts": { "start:dev": "cross-env NODE_ENV=development node app.js", "start:prod": "cross-env NODE_ENV=production node app.js" }
3. 用PM2统一管理多环境进程
如果需要后台运行多环境实例,PM2是高效的进程管理工具:
- 安装PM2:
npm install pm2 -g - 创建
ecosystem.config.js配置文件,定义各环境的应用实例:module.exports = { apps: [ { name: 'my-app-dev', script: 'app.js', env: { NODE_ENV: 'development', PORT: 3000, DB_URL: 'mongodb://localhost:27017/dev_db', API_KEY: 'dev_xxxxxx' } }, { name: 'my-app-prod', script: 'app.js', env: { NODE_ENV: 'production', PORT: 3001, DB_URL: 'mongodb://localhost:27017/prod_db', API_KEY: 'prod_xxxxxx' } } ] }; - 启动指定环境的实例:
pm2 start ecosystem.config.js --only my-app-dev # 启动开发环境 pm2 start ecosystem.config.js --only my-app-prod # 启动生产环境 - 查看进程状态:
pm2 list,停止进程:pm2 stop my-app-dev
4. 端口隔离 + Nginx反向代理
为不同环境分配独立端口,通过Nginx实现域名/路径映射,方便外部访问:
- 确保各环境应用使用不同端口(如dev用3000,prod用3001)
- 配置Nginx,添加如下规则(示例):
server { listen 80; server_name dev.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name example.com; location / { proxy_pass http://localhost:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 重启Nginx生效,这样用户访问
dev.example.com就会指向开发环境,example.com指向生产环境
内容的提问来源于stack exchange,提问作者joy praba
相关产品推荐
相关产品推荐

