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
启动
直接启动的命令: pm2 start *** --watch (修改名称 --name="")
以前启动 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
windows下创建服务
npm i pm2 -g
npm i pm2-windows-service -g
安装服务:pm2-service-install -n niumowangya (安装后在windows服务中多了一个 niumowangya 的服务); ##卸载pm2-service-uninstall
- 设置环境变量:
PM2_SERVICE_SCRIPTS= PM2的配置文件( .pm2) or PM2_HOME=D:\.pm2(自己安装的PM2配置的路径); - windows服务中重新启动myservice服务
linux下创建服务
nodejs部署方式-pm2的更多相关文章
- nodejs高大上的部署方式-PM2
1.最常用的属nohup了,其实就是在后台执行进程,末尾加个& [zhoujie@ops-dev ~]$ nohup node /home/zhoujie/ops/app.js & ...
- nodejs部署配置pm2
高大上先上部署node方式: 直接通过node app来启动,如果报错了可能直接停在整个运行, supervisor感觉只是拿来用作开发环境的. 目前似乎最常见的线上部署nodejs项目的有forev ...
- nodejs在Liunx上的部署生产方式-PM2
先安装:npm install -g pm2 (注意:使用它要先安装它,用root账号和全局模式安装一下) 安装完成使用:pm2 -v 查看版本信息 安装成功之后,启动nodejs项目:pm2 sta ...
- node程序的部署神器pm2的基本使用
pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs.当然了,也可以用nohup来做这件事情的. 前言 众所周知,Node.js运行在Chrome的JavaScript运 ...
- 介绍几种SSIS部署方式
介绍 如果你已经开发完一个不错的SSIS包并且能够在你的本地完美的运行,每个任务都亮起绿色的通过标志.这时为了能够让这个包处理能够在指定时间运行,你需要将其发布到一个服务器上,并做好相关配置.作为开发 ...
- 到底应该选择那种Linux.NET的部署方式?
当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名L ...
- 使用Kylin构建企业大数据分析平台的4种部署方式
本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...
- .NET Core应用程序的2种部署方式
1. Portable 共享.NET Core运行时环境与程序集依赖,部署的目标机器上需要事先安装.NET Core SDK,这是.NET Core的默认部署方式. 2. Self-contained ...
- ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式
/** * ThinkPHP version 3.1.3 */ ThinkPHP ( 官方网站:http://www.thinkphp.cn/ ) 目前最新版本是 3.2.2,它要求 PHP 的版本高 ...
随机推荐
- Hangfire源码解析-如何实现可扩展IOC的?
一.官方描述 These projects simplify the integration between Hangfire and your favorite IoC Container. The ...
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.7.3)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo将百度语音SDK(其中一部分功能)和自定义的UI对话框封装到一个module中,便于后续的SDK版本更新以及调用. 本De ...
- vue-cli3安装过程
作为一个本来是java开发的搬运工,在公司前端人员缺乏的时候,就直接顶上来开发前台页面了(话说我已经很久很久没写java代码了(:′⌒`)) 好吧言归正传,刚开始弄前台就是vue,vue2还没弄熟,老 ...
- SmartSql Map
SmartSqlMap 属性 说明 Scope 域,用于SqlMap定义Sql声明范围 Statement标签 属性 说明 Id 唯一性编号 Cache 缓存策略编号,引用自Cache标签 State ...
- 分享基于 websocket 网页端聊天室
博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...
- C#列表页面
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx ...
- CDN的简单理解
百度百科上的解释:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...
- es6 for of 循环
es6 新增了 for of 循环,只要继承了Iterator 接口的数据集合都可以使用 for of 去循环 for of 循环,统一数据集合的循环方法,解决了forEach循环的不能使用break ...
- ThinkPHP 5.0/5.1 自定义404界面的配置
★ 背景还要啥背景,就是觉得不可能用框架自带的 404 界面呗.可能跟之前的版本配置方法有点区别,在此做一下简单的笔记 框架:ThinkPHP 5.1,ThinkPHP5.0.20 ★ 配置过程♩. ...
- CSS HACK 如何书写
什么是css hank 由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中 ...