有时候我们的个人服务器里可能会放置多个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的部署方式有用就来试试吧!