1.如何上线Node编写的项目?

上线项目需要考虑的几个问题
1.1 服务稳定性, 不会因为程序的某个错误或异常导致项目停止服务
1.2 线上日志记录, 除了记录访问日志以外, 我们还需要记录错误日志和自定义日志
1.3 充分利用服务器资源, Node是单线程的, 服务器是多核的, 一台服务器只运行一个Node程序太浪费资源

2.如何解决上述问题?

通过PM2
2.1 PM2的进程守护可以在程序崩溃后自动重启
2.2 PM2自带日志记录的功能, 可以很方便的记录错误日志和自定义日志
2.3 PM2能够启动多个Node进程, 充分利用服务器资源

3.PM2使用

npm install pm2 -g

pm2 --version

pm2 start app.js

4.常用的PM2命令

pm2 start app.js|config     // 启动应用程序
pm2 list                    // 列出启动的所有的应用程序
pm2 restart appName|appId   // 重启应用程序
pm2 info appName|appId      // 查看应用程序详细信息
pm2 log appName|appId       // 显示指定应用程序的日志
pm2 monit appName|appId     // 监控应用程序
pm2 stop appName|appId      // 停止应用程序
pm2 delete appName|appId    // 关闭并删除所有应用

5.PM2常用配置

5.1 PM2.conf.json

{
  "apps":{
    "name":"应用程序名称",
    "script": "入口文件名称",
    "watch": true,
    "ignore_watch": [   // 修改底下的这些目录,项目不会发生重启
      "node_modules",
      "logs"
    ],
    "error_file": "logs/错误日志文件名称",
    "out_file": "logs/自定义日志文件名称",
    "log_date_format": "YYYY-MM-DD HH:mm:ss"
  }
}

5.2 PM2多进程

在配置文件中增加 instances 配置, 想启动几个Node进程就写几
注意点: 不能超过服务器CPU的核数

PM2.conf.json如下:

{
  "apps":{
    "name":"node",
    "script": "app.js",
    "watch": true,
    "ignore_watch": [
      "node_modules",
      "logs"
    ],
    "error_file": "logs/error.log",   // 错误日志配置
    "out_file": "logs/custom.log",    // 自定义日志配置
    "log_date_format": "YYYY-MM-DD HH:mm:ss",   // 日志时间格式
    "instances": 4    // 服务器几核写几
  }
}

上述配置都配置完成以后,还需要修改package.json中的启动项,将线上的启动改为:

pm2 start pm2.config.json

Last modification:July 29th, 2020 at 08:53 am
来杯coffee吧