node.js + pm2 – 根据环境configurationnode_args

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

我的目标是让这个过程启动下面的node_args但是只能用于非prod启动 。 所以,例如,如果某个环境variables是以某种方式设置的,则触发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"]

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

在你的情况下,你的stream程文件定义如下:

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并像这样定义你的configuration

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" ]