繁体   English   中英

node.js + pm2 —根据环境配置node_args

[英]node.js + pm2 — Configuring node_args depending on environment

下面是一个非常简单的process.json用于使用pm2启动js应用程序。

我的目标是让进程从下面的node_args但仅适用于非产品启动 因此,例如,如果以某种方式设置了某个环境变量,则触发node_args,否则将其忽略。

这可能吗? 如果没有,我可以采取任何解决方法?

{
  apps : [
    {
      name      : 'API',
      script    : './app.js',
      node_args: ["--inspect","--debug=0.0.0.0:7000"],
      env: {
        NODE_ENV: 'development'
      }
    }
  ]
}

我知道有可能在命令行上抛出node_args ,但是目标是在node_args上运行它,其中“ run”命令对于源映像而言是静态的,因此实际上并不可行。

这是我的Dockerfile中的CMD条目:

CMD [ "pm2-docker", "--auto-exit", "--watch", "process.json"]

您可以根据同一应用程序的环境设置定义多个声明。

在您的情况下,您的过程文件定义可以如下:

process.json

{
  apps : [
    {
      name      : 'API-DEV',
      script    : './app.js',
      node_args: ["--inspect","--debug=0.0.0.0:7000"],
      env: {
        NODE_ENV: 'development'
      }
    },
    {
      name      : 'API-PROD',
      script    : './app.js',
      env: {
        NODE_ENV: 'production'
      }
    }
  ]
}

然后,如果您要运行该应用程序的development版本,则Dockerfile CMD条目将为

CMD [ "pm2-docker", "start", "process.json", "--only", "API-DEV", "--auto-exit", "--watch" ] 

如果您不喜欢重复,则可以使用.config.js文件而不是json并按如下方式定义配置

process.config.js

const appDefs = [
  {
    "suffix": "prod",
    "node_args": [],
    "env": {
      "NODE_ENV": "production"
    }
  },
  {
    "suffix": "dev",
    "node_args": ["--inspect","--debug=0.0.0.0:7000"],
    "env": {
      "NODE_ENV": "development"
    }
  }
];

module.exports = {
  "apps": appDefs.map(appDef => ({
    "name": `API-${appDef.suffix}`,
    "script": "./app.js",
    "node_args": appDef.node_args,
    "env": appDef.env
  }))
};

然后,将输入CMD

CMD [ "pm2-docker", "start", "process.config.js", "--only", "API-DEV", "--auto-exit", "--watch" ] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM