【架构师(第四十四篇)】 服务端开发之 pm2 和 nginx 介绍

2022-12-10 13:52:37 浏览数 (1)


pm2

特点

  • 进程守护 - 稳定
  • 多进程 - 高效
  • 日志记录 - 问题可追溯

指令

  • 启动:pm2 start xxx.js
  • 重启:pm2 restart <id/name>
  • 重载:pm2 reload
  • 列表:pm2 list
  • 日志:pm2 logs <id/name>
  • 停止:pm2 stop <id/name>
  • 删除:pm2 delete <id/name>
  • 监控:pm2 monit

安装

代码语言:javascript复制
npm i pm2 -g

配置文件

默认配置

代码语言:javascript复制
// binpm2AppConf.js

const os = require('os')

const cpuCoreLength = os.cpus().length // CPU 几核

module.exports = {
  name: 'biz-editor-server', // 服务名称
  script: 'bin/www', // 服务启动入口
  // watch: true, // 无特殊情况,不用实时监听文件,否则可能会导致很多 restart
  ignore_watch: ['node_modules', '__test__', 'logs'], // 监听排除目录
  instances: cpuCoreLength, // 进程数量  本地测试 一个即可
  error_file: './logs/err.log', // 错误日志目录
  out_file: './logs/out.log', // 日志目录
  log_date_format: 'YYYY-MM-DD HH:mm:ss Z', // Z 表示使用当前时区的时间格式
  combine_logs: true, // 多个实例,合并日志
  max_memory_restart: '300M', // 内存占用超过 300M ,则重启
}

开发环境配置

代码语言:javascript复制
// binpm2-prd-dev.config.js

const appConf = require('./pm2AppConf')

// 为了测试方便,pm2 进程设置为 1
appConf.instances = 1

module.exports = {
  apps: [appConf],
}

添加命令,临时改为 NODE_ENV=dev

代码语言:javascript复制
// package.json

  "scripts": {
    "prd-dev": "cross-env NODE_ENV=dev pm2 start bin/pm2-prd-dev.config.js",
  },

指令演示

启动服务 npm run prd-dev

查看列表 pm2 list

日志 pm2 logs

监控 pm2 monit

停止 pm2 stop 0

删除 pm2 delete 0

pm2 日志拆分

安装插件

使用 pm2 进行安装

代码语言:javascript复制
pm2 install pm2-logrotate

安装完以后, 通过 pm2 list 可以查看到 pm2-logrotate 的进程。

rotateInterval 的设置遵循 crontab 的定时规则。

nginx

nginx 介绍

nginx 一直是 web server 的必备神器,以稳定和高性能著称。

  • 静态服务(htmlcssjs 等静态资源访问)
  • 反向代理
  • 负载均衡(课程用不到)
  • Access log

安装 nginx

0 人点赞