PM2是node进程管理工具,能够利用它来简化不少node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,并且使用很是简单。php
平时在本地进行node项目开发时通常直接使用node app.js启动服务,虽然能够用这种方式启动服务,可是这种方式只能应对一些访问量较少的形式,并且若是当node遇到错误致使线程挂掉会形成网站的没法访问,所以须要一种工具帮助node管理繁琐任务,当node进程挂掉时可以帮助机器自动重启、或者当node服务部署在多台机器时能够帮助机器实现负载均衡,所以须要使用pm2来进行node进程管理。vue
项目的运行环境可能会有多个,如线上的生产环境、测试的test环境、开发的dev环境及本地的local环境,使用vue进行项目构建时须要区分不一样环境,所以使用pm2进行node进程管理时也须要区分不一样的环境,所以pm2须要一个全局的配置文件进行项目的配置。 经过在项目根目录建立pm2.json配置文件。node
{
"apps": [
// dev环境配置
{
"name": "YUANNODE-DEV-SERVER",
"cwd": "./dist",
"script": "app.js",
"watch": false,
"ignore_watch": ["node_modules", "build", "logs"],
"log_date_format": "YYYY-MM-DD HH:mm Z",
"out_file": "/data/logs/yuan-node/out.log", // 日志输出
"error_file": "/data/logs/yuan-node/error.log", // 错误日志
"max_memory_restart": "2G", // 超过多大内存自动重启,仅防止内存泄露有意义,须要根据本身的业务设置
"env": {
"NODE_ENV": "dev"
},
"exec_mode": "cluster", // 开启多线程模式(集群),用于负载均衡
"instances": "max", // 启用多少个实例,可用于负载均衡
"autorestart": true // 程序崩溃后自动重启
},
// 生产环境pm2配置
{
"name": "YUANNODE-PROD-SERVER",
"cwd": "./dist",
"script": "app.js",
"watch": false,
"ignore_watch": ["node_modules", "build", "logs"],
"log_date_format": "YYYY-MM-DD HH:mm Z",
"out_file": "/data/logs/yuan-node/out.log", // 日志输出
"error_file": "/data/logs/yuan-node/error.log", // 错误日志
"max_memory_restart": "2G", // 超过多大内存自动重启,仅防止内存泄露有意义,须要根据本身的业务设置
"env": {
"NODE_ENV": "prod"
},
"exec_mode": "cluster", // 开启多线程模式,用于负载均衡
"instances": "max", // 启用多少个实例,可用于负载均衡
"autorestart": true // 程序崩溃后自动重启
}
]
}
复制代码
经过配置不一样环境的env来区分不一样环境,为了更好区分环境能够设置不一样name,在package.json中根据不一样名称来运行不一样环境的服务。python
"pm2-dev": "pm2 start pm2.json --only YUANNODE-DEV-SERVER --watch",
"pm2-prod": "pm2 start pm2.json --only YUANNODE-PROD-SERVER --watch",
复制代码
经过配置pm2能够设置不一样环境下log存放的位置,能够配置pm2启动模式,经过设置"exec_mode": "fork"/"cluster"设置不一样的pm2启动模式,pm2默认为fork模式。nginx
"fork"/"cluster"启动模式:web
fork模式,单实例多进程,经常使用于多语言混编,好比php、python等,不支持端口复用,须要本身作应用的端口分配和负载均衡的子进程业务代码。json
缺点就是单服务器实例容易因为异常会致使服务器实例崩溃。bash
cluster模式,多实例多进程,可是只支持node,端口能够复用,不须要额外的端口配置,0代码实现负载均衡。 优势就是因为多实例机制,能够保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。服务器
部署到线上的服务通常须要监控系统,能够时刻帮助开发者了解服务运行状况,pm2提供了pm2 Monitoring进行pm2监控,或者使用pm2-web进行监控,若是只是进行常见的服务器异常重启或者过载等监控能够直接使用pm2 monit进行监控,因为不一样环境须要监控的服务不一样,所以也须要区分监控的命令。多线程
"pm2-monitor-dev": "pm2 link -- -- YUANNODE-DEV-SERVER",
"pm2-monitor-prod": "pm2 link -- -- YUANNODE-PROD-SERVER"
复制代码
经过pm2启动node,再使用nginx作反向代理(通常运维能够帮忙配置)
upstream my_nodejs_upstream {
server 127.0.0.1:3001;
}
server {
listen 80;
server_name my_nodejs_server;
root /home/www/project_root;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://my_nodejs_upstream/;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
复制代码
pm2有不少使用命令,能够经过查看pm2命令来了解