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