node项目部署说明

180 阅读2分钟

1. 介绍

使用nodejs提供http/https服务, 使用pm2启动服务, 监控node进程的 cpu、 内存。

  • PM2node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

  • PM2教程

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服务

  1.  package.json中增加 express, morgan

  2. 使用本文件(www) 启动http服务,修改 

    app.use(express.static(path.join(__dirname, ``'../build'``), {})); 中的 ../build 为 静态文件的目录。

  3. 如果不要morgan,则删除文件中的这两行代码

var logger = require('morgan');
...
app.use(logger('dev'));