具有多个进程的PM2配置

时间:2019-01-23 04:38:37

标签: javascript node.js reactjs pm2

我正在尝试配置PM2配置文件以在启动时启动两项服务。我想在8080上的端口80广告Node api服务器上启动React。当它运行时,API在80上运行,而8080没有任何运行。我的文件中缺少什么。我使用默认的create react设置来创建我的React结构,但不确定脚本应指向哪个文件。这是我创建的文件:

module.exports = {
  apps : [
    {
      name: 'REACTJS',
      script: 'client/src/index.js',
  
      args: "port=80 sitename='React.js Website'",
      instances: 0,
      autorestart: true,
      watch: true,
      max_memory_restart: '1G',
      env: {
        NODE_ENV: 'development'
      },
      env_production: {
        NODE_ENV: 'production'
      }
    },
    {
      name: 'NODEJS',
      script: 'server/node.js',
      args: "port=8080 sitename='Node.js API Server'",

      // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
      instances: 0,
      autorestart: true,
      watch: true,
      exec_mode: 'cluster'
  }
]
};

1 个答案:

答案 0 :(得分:0)

在您的配置中,您也可以通过PORT,也可以通过args或通过ENV来传递[推荐], 为此, 在您的节点应用程序中,您正在执行以下操作: app.listen(<PORT>)。 确保您是从PORT提取ENV的,像这样:process.env.PORT

在这种情况下,您的配置应如下所示:

//process.js

module.exports={
  apps : [
    {
      name: 'REACTJS',
      script: 'client/src/index.js',
      instances: 1, 
      autorestart: true,
      watch: true,
      max_memory_restart: '1G',
      env: {
        NODE_ENV: 'development',
        port:80,
        sitename:'React.js Website'
      },
      env_production: {
        NODE_ENV: 'production',
        port:80,
        sitename:'React.js Website'
      }
    },
    {
      name: 'NODEJS',
      script: 'server/node.js',
      instances: 1,
      autorestart: true,
      watch: true,
      exec_mode: 'cluster',
      env: {
        NODE_ENV: 'development',
        PORT:8080,
        //... all you ENV vars goes here for development mode
      },
      env_production: {
        NODE_ENV: 'production',
        PORT:8080,
         //... all you ENV vars goes here for production mode
      }
  }
]
};

要运行,

DEV: pm2 start process.js //默认情况下,它会考虑开发模式

产品: pm2 start process.js --env production

注意:请确保您在节点应用中从环境中获取PORT,例如process.env.PORT

再次在您的React应用中,即client/src/index.js,请检查您是否正在使用process.env.portprocesss.env.PORT这样的端口号,并相应地更改pm2配置。