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 的版本高 ...
随机推荐
- 又拍云张聪:OpenResty 动态流控的几种姿势
2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...
- .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...
- 中国.NET:各地微软技术俱乐部汇总(更新中...)
与微软技术的发展历程相似,微软俱乐部的发展同样经历着沉沉浮浮.2002年周庆麒先生创办的著名Office技术论坛Excel Home的上线,各种线上技术社区在中国的互联网世界中萌发.接着以鞠海洋(广州 ...
- SpringSecurity自定义AuthenticationProvider和AuthenticationFilter
AuthenticationProvider 默认实现:DaoAuthenticationProvider 授权方式提供者,判断授权有效性,用户有效性,在判断用户是否有效性,它依赖于UserDetai ...
- 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】
1.[基础]redis能带给我们什么福利 Redis(Remote Dictionary Server)官网:https://redis.io/ Redis命令:https://redis.io/co ...
- SiftGPU在Ubuntu和Windows下的编译与使用
Sift特征应该是使用最多的局部特征了,但是相比其他的一些特征描述符,计算sift特征描述符的时间较长.Changchang Wu使用GPU加速,实现了GPU版的sift特征提取SiftGPU. Si ...
- 详解mybatis配置文件
在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...
- Rekit
本文转自:http://rekit.js.org/docs/get-started.html Get started The easiest way to try out Rekit is creat ...
- (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤
当我们使用安卓手机通过数据线链接到Pc的时候,或者使用的有些app比如我们公司营销小组当使用的app引号精灵,之前的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试 ...
- jsp页面中include静态html出现乱码问题的解决方式
这个问题出现过两次,上次没有做好记录,今天又出现了.不过这两次的情景也不完全一致. 今天通过搜索找到这篇文章的解决方式很好,可供参考.原博客地址http://blog.csdn.net/izgnaw/ ...