PM2 部署 nodejs 项目
在网上找到pm2.目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种。
使用场合:
- 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 或者 pm2 start bin/www 启动node项目
$ pm2 stop bin/www 停止pm2服务$ pm2 list 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。
$ pm2 monit 监视每个node进程的CPU和内存的使用情况
$ 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里。如下:
通过npm run pm2来启动。
PM2 部署 nodejs 项目的更多相关文章
- pm2部署nodejs项目
安装: 最新的PM2稳定版可通过NPM进行安装: npm install pm2@latest -g 用法: 启动,守护和监控应用程序的最简单的方法是使用以下命令行: pm2 start app.js ...
- linux服务器部署nodejs项目
一.安装nodejs 1.去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通 ...
- nginx+ssl+pm2 部署 nodejs 服务
nginx+pm2 部署 nodejs 服务 最近在 centos 上部署 nodejs 服务,记下来步骤: 注意都是使用 root 用户. 下载 nvm: curl -o- https://raw. ...
- 在Linux系统中部署NodeJS项目
在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...
- 在阿里云创建子域名,配置nginx,使用pm2部署node项目到ubuntu服务器
配置域名 在阿里云找到主域名 进入主域名之后,右上角添加解析,添加子域名, 记录类型选择cname,主机记录填写子域名的名称,记录值为主域名,至此阿里云已经配置好了. 检查nginx安装 首先检查服务 ...
- centOS7下 安装nodejs+nginx+mongodb+pm2部署vue项目
一.购买服务器并远程连接 1.购买服务器和域名 可以选择阿里云或者是其他的厂商的服务器.然后会获得服务器ip地址,用户名和密码. 购买域名,将域名绑定到ip地址上. 2.下载xshell,winscp ...
- 使用pm2离线部署nodejs项目
1.下载https://npm.taobao.org/mirrors/node/v8.11.1/node-v8.11.1-linux-x64.tar.xz 比如安装到/opt目录 xz -d node ...
- PM2 部署 nodejs API项目
PM2的主要特性: 内建负载均衡(使用Node cluster 集群模块) 后台运行 0秒停机重载,我理解大概意思是维护升级的时候不需要停机. 具有Ubuntu和CentOS 的启动脚本 停止不稳定的 ...
- docker部署nodejs项目应用
之前笔者弄了一套nestjs项目放在自己服务器上,并用pm2管理进程. 现在要把pm2停止,尝试一下用docker容器,那么首先要安装docker 一.安装docker 由于笔者服务器的系统是cent ...
随机推荐
- Rabbit安装(windows)
安装rabbit后,启动服务,浏览器打开控制台找不到.查百度说是要装插件.翻了好几篇都是互相抄,没有能用到. 多翻了几篇终于找到一个靠谱的.可以打开控制台了.记录下: 首先要安装Erlang语言支持, ...
- Core.Java.Volume.I.Fundamentals.10th.Edition 14.5.8 Volatile域 中文版 章节勘误
今天重扫了corejava 14 并发的一章,在谈到volatile域代替synchronized 应用于并发更新时,看到如下内容,并发更新可用内部锁的方式但会带来阻塞问题,可用volatile域替代 ...
- JavaScript & jQuery & Bootstrap
一.前言 javascript 简称 JS 与java编程语言 没有什么关系 JavaScript: {核心(ECMAScript) 文档对象模型(DOM) Document object mode ...
- CF954I Yet Another String Matching Problem
传送门 每次操作可以把两个字符串中所有同一种字符变成另外一种 定义两个长度相等的字符串之间的距离为:使两个字符串相等所需要操作的次数的最小值 求 \(s\) 中每一个长度为 \(|t|\) 的连续子串 ...
- along.js
平时写代码用到的方法,就给封装了一下.需要的拿走不谢... 1.数组去重 并判断一个元素出现的次数 handle(str){ let arr=str.split('') var newarr=[]; ...
- 已有Web项目添加Maven支持
IDE:MyEclipse 当我们在现有的Web开发项目中集成 Maven 的时候,需要修改以下几个地方: 1.将以下代码拷贝到工程根路径下的 .project 文件中的 <buildSpec& ...
- Java 社区论坛 - Sym 1.5.0 发布
简介 Sym 是一个用 Java 写的实时论坛,欢迎来 体验!(如果你需要搭建一个企业内网论坛,请使用 SymX) 非常详细的 Sym 功能点脑图 如果你在搭建或者二次开发时碰到问题,欢迎加 Q 群 ...
- 【vue】混合模式
因为工作的分配,写财务的对账部分,因为3个页面的设计和功能基本相同,都是查询筛选表格,所以用混合模式优化了部分代码.用混合把一些共用的东西抽离了出来. 具体使用方法参照文档. https://cn.v ...
- Http请求超时的一种处理方法
URLConnection类常见的超时处理就是调用其setConnectTimeout和setReadTimeout方法: setConnectTimeout:设置连接主机超时(单位:毫秒) setR ...
- 在小程序中修改上一个页面里data中的数据调用上一个页面的方法
//获取已经打开的页面的数组 var pages = getCurrentPages(); //获取上一个页面的所有的方法和data中的数据 var lastpage = pages[pages.l ...