1. 介绍
使用nodejs提供http/https服务, 使用pm2启动服务, 监控node进程的 cpu、 内存。
-
PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。
2. 操作
在项目的根目录下新建项目启动的配置文件:prod.config.json,代码如下:
{
"apps": [
{
"name": "自己取一个项目名字",
"script": "./bin/www",
"env": {
"NODE_ENV": process.env.NODE_ENV,
"PORT": process.env.NPMPORT
},
"log_date_format": "YYYY-MM-DD HH:mm:SS",
"error_file": "./pm2/logs/error.log",
"out_file": "./pm2/logs/out.log",
"pid_file": "./pm2/logs/pm_id.pid",
"instances": "1",
"exec_mode": "cluster",
"max_memory_restart": "512M"
}
]
}
参数说明:
name: 项目的名字
script: 项目的启动文件
env: 在启动时要写入的环境变量, 该变量在执行 script时可以使用 process.env.xxx 来读取
log_date_format: 日志时间戳格式
error_file: 错误日志存放文件
out_file: 日志存放文件
pid_file: 进程号存放文件
instances: 启动多少个进程
exec_mode: 进程之间的模式
max_memory_restart: 一个进程在内存使用到该值时将会重启。
exec_mode: 进程之间的模式说明:
-
fork模式:单实例多进程,常用于多语言混编,比如php、python等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。 缺点就是单服务器实例容易由于异常会导致服务器实例崩溃。 -
cluster模式,多实例多进程,但是只支持node,端口可以复用,不需要额外的端口配置,0代码实现负载均衡。 优点就是由于多实例机制,可以保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。 -
共同点,由于都是多进程,都需要消息机制或数据持久化来实现数据共享。
3. nginx 代理静态文件 转 node服务
-
package.json中增加express, morgan -
使用本文件(www) 启动
http服务,修改app.use(express.static(path.join(__dirname, ``'../build'``), {}));中的../build为 静态文件的目录。 -
如果不要
morgan,则删除文件中的这两行代码
var logger = require('morgan');
...
app.use(logger('dev'));