利用PM2部署node.js项目的方法教程


Posted in Javascript onMay 10, 2017

前言

大家在开发中应该发现了,如果直接通过node app来启动,如果报错了可能直接停在整个运行,supervisor感觉只是拿来用作开发环境的。再网上找到pm2.目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种。下面本文将详细介绍利用PM2部署node.js项目的方法教程,需要的朋友们下面来一起看看详细的介绍:

使用场合:

  • supervisor是开发环境用。
  • forever管理多个站点,每个站点访问量不大,不需要监控。
  • pm2 网站访问量比较大,需要完整的监控界面。

PM2的主要特性:

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

安装

npm install -g pm2

用法

$ npm install -g pm2 命令行全局安装pm2

$ pm2 start app.js 启动app项目

$ pm2 list 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。

利用PM2部署node.js项目的方法教程

$ pm2 monit 监视每个node进程的CPU和内存的使用情况

利用PM2部署node.js项目的方法教程

$ pm2 logs 显示所有进程日志

$ pm2 stop all 停止所有进程

$ pm2 restart all 重启所有进程

$ pm2 reload all 0秒停机重载进程 (用于 NETWORKED 进程)

$ pm2 stop 0 停止指定的进程

$ pm2 restart 0 重启指定的进程

$ pm2 startup 产生 init 脚本 保持进程活着

$ pm2 web 运行健壮的 computer API endpoint (http://localhost:9615)

$ pm2 delete 0 杀死指定的进程

$ pm2 delete all 杀死全部进程

运行进程的不同方式:

$ pm2 start app.js -i max 根据有效CPU数目启动最大进程数目

$ pm2 start app.js -i 3 启动3个进程

$ pm2 start app.js -x 用fork模式启动 app.js 而不是使用 cluster

$ pm2 start app.js -x -- -a 23 用fork模式启动 app.js 并且传递参数 (-a 23)

$ pm2 start app.js --name serverone 启动一个进程并把它命名为 serverone

$ pm2 stop serverone 停止 serverone 进程

$ pm2 start app.json 启动进程, 在 app.json里设置选项

$ pm2 start app.js -i max -- -a 23 在--之后给 app.js 传递参数

$ pm2 start app.js -i max -e err.log -o out.log 启动 并 生成一个配置文件

配置pm2启动文件

在项目根目录添加一个processes.json:

内容如下:

{
 "apps": [
 {
  "name": "mywork",
  "cwd": "/srv/node-app/current",
  "script": "bin/www",
  "log_date_format": "YYYY-MM-DD HH:mm Z",
  "error_file": "/var/log/node-app/node-app.stderr.log",
  "out_file": "log/node-app.stdout.log",
  "pid_file": "pids/node-geo-api.pid",
  "instances": 6,
  "min_uptime": "200s",
  "max_restarts": 10,
  "max_memory_restart": "1M",
  "cron_restart": "1 0 * * *",
  "watch": false,
  "merge_logs": true,
  "exec_interpreter": "node",
  "exec_mode": "fork",
  "autorestart": false,
  "vizion": false
 }
 ]
}

说明:

  • apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
  • name:应用程序名称
  • cwd:应用程序所在的目录
  • script:应用程序的脚本路径
  • log_date_format:
  • error_file:自定义应用程序的错误日志文件
  • out_file:自定义应用程序日志文件
  • pid_file:自定义应用程序的pid文件
  • instances:
  • min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
  • max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
  • cron_restart:定时启动,解决重启能解决的问题
  • watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
  • merge_logs:
  • exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
  • exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
  • autorestart:启用/禁用应用程序崩溃或退出时自动重启
  • vizion:启用/禁用vizion特性(版本控制)

可以通过pm2 start processes.json来启动。

也可以把命令写在package.json里。如下:

利用PM2部署node.js项目的方法教程

通过npm run pm2来启动。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js解析与序列化json数据(三)json的解析探讨
Feb 01 Javascript
jQuery ajax serialize() 方法使用示例
Nov 02 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
May 28 Javascript
JavaScript统计网站访问次数的实现代码
Nov 18 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
vue绑定的点击事件阻止冒泡的实例
Feb 08 Javascript
微信小程序自定义可滑动日历界面
Dec 28 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
使用apifm-wxapi快速开发小程序过程详解
Aug 05 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
全面解析vue中的数据双向绑定
May 10 #Javascript
利用forever和pm2部署node.js项目过程
May 10 #Javascript
javascript简单链式调用案例分析
May 10 #Javascript
Angular.JS通过指令操作DOM的方法
May 10 #Javascript
JS实现队列的先进先出功能示例
May 10 #Javascript
BootStrap的两种模态框方式
May 10 #Javascript
微信小程序之购物车功能
Sep 23 #Javascript
You might like
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
php判断当前操作系统类型
2015/10/28 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python中adb有什么功能
2020/06/07 Python
python实现马丁策略的实例详解
2021/01/15 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
培训楼经理岗位责任制
2014/02/10 职场文书
税务会计岗位职责
2014/02/18 职场文书
协议书范本
2014/04/23 职场文书
小摄影师教学反思
2014/04/27 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
2014年派出所工作总结
2014/11/21 职场文书
python tkinter模块的简单使用
2021/04/07 Python
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL