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
条目传递不同的值。那样的话,我想问题就解决了