Javascript node.js+;pm2--根据环境配置节点参数
下面是一个非常简单的Javascript node.js+;pm2--根据环境配置节点参数,javascript,node.js,docker,pm2,Javascript,Node.js,Docker,Pm2,下面是一个非常简单的过程。json启动带有pm2的js应用程序 我的目标是让流程启动以下节点参数,但仅限于非产品启动。因此,例如,如果某个环境变量以某种方式设置,则触发node_args,否则忽略它们 这可能吗?如果没有,我能做些什么 { apps : [ { name : 'API', script : './app.js', node_args: ["--inspect","--debug=0.0.0.0:7000"],
过程。json
启动带有pm2的js
应用程序
我的目标是让流程启动以下节点参数
,但仅限于非产品启动。因此,例如,如果某个环境变量以某种方式设置,则触发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”]
您可以定义同一应用程序的多个声明,具体取决于其环境设置
在您的情况下,流程文件定义可以如下所示:
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'
}
}
]
}
然后,如果要运行应用程序的开发
版本,CMD
将显示Dockerfile
条目
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" ]
您可以定义同一应用程序的多个声明,具体取决于其环境设置 在您的情况下,流程文件定义可以如下所示: 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'
}
}
]
}
然后,如果要运行应用程序的开发
版本,CMD
将显示Dockerfile
条目
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" ]
谢谢因此,似乎由于不同的
CMD
条目,我需要单独的图像?如果有相同的源映像就好了,那么在启动容器时可以设置环境-这可能吗?我不是docker方面的专家,但我理解的是,在执行docker run
命令时,您希望向CMD
条目传递不同的值。那样的话,我想会解决问题的谢谢。因此,似乎由于不同的CMD
条目,我需要单独的图像?如果有相同的源映像就好了,那么在启动容器时可以设置环境-这可能吗?我不是docker方面的专家,但我理解的是,在执行docker run
命令时,您希望向CMD
条目传递不同的值。那样的话,我想问题就解决了