nodejs部署方式-pm2

目前Nodejs开发中有很多痛点,其中有一个是修改完代码以后需要我们重启服务才能看到效果。这样一次次的杀进程、重启,杀进程、重启很让人头大。程序员是最痛恨重复工作的物种,之前有了解过的同学可能知道 forever 。 forever 可以帮我们解决上面的问题,通过对资源变化的检测做到变化后自动重启。开发阶段我们使用 node file.js 来启动另外由于Nodejs的单线程,任何异常都会导致整个服务中断,这对于生产上长时间提供服务的程序来讲是不可以的, forever 可以帮我们在异常后重启,保证服务一直在线,我想这也就是它名字的由来吧。但我想说的是 forever 不够“高!大!上!”。接下来我要介绍一个足够高大上的神器– pm2

简介

pm2 = P (rocess) M (anager)2,是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。下面我将把我的使用过程分享出来,Nodejs应用是一个基于Express 4.x的应用,名称是 Wolverine 。

安装

环境清单:

  • windows7 x64
  • node v5.0.0
  • npm 3.3.6

全局安装 pm2

$ npm install pm2 -g

更新

$ pm2 update

启动

以前启动 Wolverine 是利用package.json的 scripts 来实现的,只需要执行 npm run start 就可以启动,配置如下:

"scripts": {
    "start": "node ./bin/www",
    "debug": "node debug ./bin/www"

  },

使用 pm2 我们可以在start处配置成 pm2 ./bin/www ,命令后面支持加参数来实现watch、cluster多进程模式等功能。我不太喜欢一大串的命令,于是我使用了配置文件的方式。

在 Wolverine 的根目录,我创建了一个 processes.json 配置文件,配置文件内容如下,注释写的也很清楚了

{
  "apps" : [{
    "name" : "Wolverine",  //名称
    "script": "./bin/www", //程序入库
    "cwd": "./",           //根目录
    "watch":[
		"bin",
		"common",
		"configs",
		"public",
		"routes",
		"views"
	],//需要监控的目录
    "error_file":"./logs/app-err.log",//错误输出日志
    "out_file":"./logs/app-out.log",  //日志
    "log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
    }]
}

随后,我在package.json中增加了一条

"pm2": "pm2 start processes.json"

在启动就直接输入如下命令就好:

$ npm run pm2

看到下面的界面,就启动成功了,然后我们就可以关掉这个窗口了,服务不会因此停止,是不是高大上多了。

管理和监控

启动成功的界面会展示App name和id,这两个值很重要。当然这两个值都可以在processes.json配置文件进行配置。

打开命令行,在任何路径下,输入

$ pm2 list

就能看到启动时的图表界面,方便我们查看所有通过pm2管理的Nodejs服务。

输入,下面命令配合id或者name可以查看某一个进程的详细信息

$ pm2 show Wolverine 或者
$ pm2 show 0

内容涉及重启次数、运行时间、脚本路径、参数、日志路径、运行模式等等信息

输入

$ pm2 monit

停止、重启等命令

$ pm2 stop [app-name|id]  #停止某一个进程,可以使用app-name或者id
$ pm2 stop all            #停止所有进程

$ pm2 restart all         #重启所有的进程

$ pm2 delete [app-name|id]#删除并停止进程
$ pm2 delete all          #删除并停止所有进程

可以进一步查看每一个服务的cpu、内存动态占用情况。

日志监控

如果你一直使用 tail -f log_file.log log_error.log 来查看日志,你可能会爱上下面的这个功能。

$ pm2 logs
$ pm2 logs [app-name]

我们可以实时查看全部进程的日志,或者只查看某一个。我们甚至可以使用json格式查看日志。

$ pm2 logs --json

Web API

如果你不仅仅想监控被pm2管理的进程,还需要监控进程所运行的机器的信息,你可以使用下面这个API

$ pm2 web

pm2会启动一个叫做pm2-http-interface的进程提供web服务。你打开浏览器输入http://127.0.0.1:9615,是不是被看到的结果惊艳到了。

pm2提供的web api通过json输出了很多信息。大致结构可以看截图:

拿出你的想象力,我们可以开发一个应用来调用此api,就可以开发出一个图形界面的监控软件了。。。

时间: 2024-08-29 11:01:08

nodejs部署方式-pm2的相关文章

nodejs高大上的部署方式-PM2

今天坐在右边的同事忽然欣喜的跟我说:嘿,推荐你个好东西,用PM2试试,比forever高端多了.表示一向落后于时尚的科技前沿的我认真的回答:什么?PM2.5还这么严重,PM2又出来了! 要不是都已习惯了我的二,这气氛还真要囧好一会儿~~呵呵…… 先说说平时我都是怎么部署程序的吧 1.最常用的属nohup了,其实就是在后台执行进程,末尾加个& [[email protected] ~]$ nohup node /home/zhoujie/ops/app.js & [1] 31490nohup

nodejs在Liunx上的部署生产方式-PM2

先安装:npm install -g pm2 (注意:使用它要先安装它,用root账号和全局模式安装一下) 安装完成使用:pm2 -v 查看版本信息 安装成功之后,启动nodejs项目:pm2 start app.js --项目名称 使用命令启动程序:pm2 start <app_name|id|all> 列举进程:pm2 list 退出程序:pm2 stop <app_name|id|all> 重起应用:pm2 restart 程序信息:pm2 describe id|all 监

node程序的部署神器pm2的基本使用

pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs.当然了,也可以用nohup来做这件事情的. 前言 众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎.不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心处理器的系统中并不能发挥其最大的性能. Node.js的cluster模块 幸运的是,Node.js给我们提供了cluster模块,它可以生成多个工作线程来共享同一个TCP

python web服务常见的部署方式

引自 - 全面解读python web 程序的9种部署方式 python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web server ---->application -----> DB server 主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis application,中文名叫做应用服务,就是你基于某个web framework写的应用代码 DB server 泛指存储服务,web开发中用

到底应该选择那种Linux.NET的部署方式?

当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名Linux.NET的初学者来说,我们又该如何选择?下面,本文将对这几种的安装方式进行优缺点的比较,从而协助各位读者选择出最佳的部署方式. 本文中,我们将对下列的部署方式展开讨论: 1.源码编译 2.一键安装脚本 3.RPM包 4.绿色包 一.源码编译 通过源代码编译安装部署Linux.NET可谓是最传

Apache Spark探秘:三种分布式部署方式比较

目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配).本文将介绍这三种部署方式,并比

全面解读python web 程序的9种部署方式

python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web server ---->application -----> DB server 主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis application,中文名叫做应用服务,就是你基于某个web framework写的应用代码 DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache

服务器负载均衡的部署方式

作者:virtualadc链接:http://virtualadc.blog.51cto.com/3027116/611592著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 负载均衡的部署方式,简单的可分为串接路由,单臂,透明和服务器直接返回4类. 1. 串接路由模式 (Routed) 路由部署方式中,通常服务器的网关需要指向负载均衡设备,这种情况下的流量处理最简单,负载均衡只做一次目标地址NAT(选择服务器时)和一次源地址NAT(响应客户端报文时) 2. 单臂模式 (On

剖析微软Hyper-V的最佳部署方式

剖析微软Hyper-V的最佳部署方式 2014-04-24 10:53 布加迪编译 51CTO.com 字号:T | T 微软Hyper-V有两种不同的版本.既可以安装到Windows Server的上面,又可以作为一种独立式虚拟机管理程序来下载和安装.那么,哪种方法更好呢?本文中将权衡每种部署方式的优缺点. AD:51CTO网+ 首届中国APP创新评选大赛火热招募中…… [51CTO精选译文]最近,人们似乎重新对微软的Hyper-V产生了兴趣.这种虚拟机管理程序终于开始成熟起来,它所提供的功能