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

时间:2017-12-01 23:32:52

标签: javascript node.js docker pm2

以下是使用pm2启动process.json应用的非常简单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,但目标是在docker中运行它,其中“run”命令对源映像是静态的,因此不可行。

以下是我的Dockerfile中的CMD条目:

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

1 个答案:

答案 0 :(得分:2)

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

在您的情况下,您的流程文件定义如下:

<强> 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版本,CMD的{​​{1}}条目将

Dockerfile

如果您不喜欢重复项,可以使用CMD [ "pm2-docker", "start", "process.json", "--only", "API-DEV", "--auto-exit", "--watch" ] 文件而不是.config.js并定义您的配置

process.config.js

json

然后,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
相关问题