2018.07.12 17:07

nuxt配合pm2的优雅部署方式

pm2支持配置文件启动,西门互联nuxt博客采用的是pm2的高级部署功能,在项目目录下创建一个pm2.json文件



创建项目时,会在项目目录下创建名为 pm2.json 的配置文件,内容类似如下:

{
 "apps": [{
  "name": "testnuxt502error-server",
  "script": "server.js",
    "out_file" : "/logs/nuxt_out.log",
  "error_file" : "/logs/nuxt_error.log",
  "cwd": "/home/nuxt-text-blog",
  "max_memory_restart": "200M",
  "autorestart": true,
  "node_args": [],
  "args": [],
	"instances": 4, 
  "exec_mode": "cluster",
  "env": {
	  NODE_ENV: "production"
	}
 }]
}

将 name 字段改为项目名,cwd 字段改为线上项目的具体路径。


项目重启

由于 Node.js 是自身启动服务运行的,所以当有代码更新后,需要重启服务才能让其生效。


最简单的办法可以通过 pm2 restart pm2.json 重启服务,但这种方式会导致服务临时性的中断(重启服务需要时间,重启过程中会导致无法处理用户的请求从而导致服务中断)。如果不想服务中断,那么可以通过发送信号的方式来重启方式,具体命令为:


pm2 sendSignal SIGUSR2 pm2.json


通过发送 SIGUSR2 信号,pm2 会将这个信号派发给框架,框架主进程捕获到这个信号后,会 fork 一个新的子进程提供服务,然后逐渐将之前的子进程重启,从而达到不中断服务重启的目的。


cluster 模式

框架会强制使用 cluster,然后使用 master/worker 的方式提供服务,所以就不能开启 pm2 中的 cluster 模式(如果开启,那么启动服务会直接报错退出)。


项目部署启动

可以在项目根目录下执行 pm2 start pm2.json 会导致部署过程通信中断(不推荐)


pm2 startOrRestart pm2.json(推荐使用)


ENABLE_NODE_LOG=YES  阿里云性能监控具体实现可以自行百度


alinode性能监控可以实时监控进程 及时查看到内存泄露等错误导致进程被killed





可以把node监控带上 用pm2.json启动 cluster 模式
echo "pm2方式部署"
npm run build
ENABLE_NODE_LOG=YES pm2 startOrRestart pm2.json 
echo "重启任务成功"

## [root@VM_134_103_redhat nuxt-text-blog]# ENABLE_NODE_LOG=YES pm2 startOrRestart pm2.json 
pm2 list 
 testnuxt502error-server         │ 29 │ cluster │ 22956 │ online  │ 21629m    │ 0%  │ 90.6 MB   │ root │ disabled │
│ testnuxt502error-server-sitemap │ 38 │ fork    │ 23089 │ online  │ 027m    │ 0%  │ 26.6 MB   │ root │ disabled │



在根目录创建一个pm2.sh 每次去重启这个脚本达到部署更新

[root@VM_134_103_redhat nuxt-text-blog]# cat pm2.sh 
echo "pm2方式部署"
npm run build
ENABLE_NODE_LOG=YES pm2 startOrRestart pm2.json 
echo "重启任务成功"
[root@VM_134_103_redhat nuxt-text-blog]#




DIY表情

(添加http或https协议)

提交评论

留言区 1