pm2管理多个node应用的统一配置

有时候我们的个人服务器里可能会放置多个node服务,由于每个node服务都需要一个端口,如果数量多了都情况下,就容易忘记哪个站点是什么端口,管理起来也很麻烦。

于是,我们可以写个简单的js来进行全局的批量部署。

下面以nuxt的站点为例,打包后的目录结构是这样

bash
/dist
  /public
  /server
  nitro.json
  ecosystem.config.js #用于pm2部署

这个是单个服务的部署,然后会把ecosystem.config.js放在项目的根目录下。

js
module.exports = {
  apps: [
    {
      name: 'NuxtAppName',
      port: '3721',
      exec_mode: 'fork',
      script: './server/index.mjs',
      max_restarts: 8,
      max_memory_restart: '300M',
      restart_delay: 500,
      error_file: './logs/error.log',
      out_file: './logs/out.log',
    }
  ]
}

如果有多个nuxt项目时,目录结构可能会是这样

bash
/web
  /site1
    /public
    /server
    nitro.json
  /site2
  /site3
  ecosystem.config.js #这个将作为控制全局的pm2配置

然后就可以写个通用的脚本来进行管理,其中site2我希望最大重启内存是500M还可以单独进行设置。

js
const common = {
  exec_mode: 'fork',
  max_restarts: 8,
  max_memory_restart: '300M',
  restart_delay: 500,
  error_file: './logs/error.log',
  out_file: './logs/out.log',
  watch: false,
  script: './server/index.mjs',
}

module.exports = {
  apps: [
    { name: 'site1', cwd: './site1', env: { NODE_ENV: 'prod', PORT: '3001' } },
    { name: 'site2', cwd: './site2', env: { NODE_ENV: 'prod', PORT: '3002' }, max_memory_restart: '500M' },
    { name: 'site3', cwd: './site3', env: { NODE_ENV: 'prod', PORT: '3003' } },
  ].map(v => ({ ...common, ...v })),
}

这样管理起来就方便多了,如果你觉得这个pm2的部署方式有用就来试试吧!

最后更新:2024-05-08