You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:36