1.0 前言

平常我们写项目线上部署这个步骤是少不了的,常常用到的有 类似阿里云里面的 ECS 机器(可以理解成一台Liunix),或者 公司内部的 Docker 容器,部署完成,我们会面临一个线上的 机器监控问题,比如 CPU 使用率飙升,请求太多,服务器响应不过来,日志太多,需要切割问题,这节我们就讲讲这些方面,最后我们实现一个域名绑定,访问服务的实现。

2.0 ECS 环境

ECS 就是云 Lunix 服务器,前置条件是,我们需要先安装 Node 环境,以下是参考文档:

这样基本环境搭建好了,我们学习的时候,肯定是没有这些环境的,想着在自己本地试试就好,那本地安装好 Node 环境就好了。

3.0 PM2 介绍

我们在服务器上部署的时候,在 ssh 切换到对应目录然后 执行 node app.js 命令,这个时候项目跑起来了,可以访问了,但是问题也出来,只要退出这个命令窗口,服务就不能访问了,这个时候我们就需要守护进程来启动 服务,这样退出窗口,服务还可以访问,这个时候我们就需要 PM2 上场了。

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

上面这句话简介的总结了 PM2 包含的功能,接下来我们看看 PM2 简单使用。

3.0.1 安装

  1. npm install pm2 -g

全局安装,简单的不能再简单,安装好后会自动创建以下目录,看文件名基本就知道干嘛的。

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

3.0.2 基本使用

之前我们启动命令如下:

  1. "scripts": {
  2. "start:prod": "cross-env NODE_ENV=prod && node bin/www",
  3. "lint": "lint-staged"
  4. },

我们执行 npm run start:prod,启动项目,现在我们改成 pm2 启动

  1. "scripts": {
  2. "start:prod": "cross-env NODE_ENV=prod && pm2 start ./bin/www --watch --name koa-test",
  3. "lint": "lint-staged"
  4. },

现在我们执行 npm run start:prod 服务就运行起来了,这个时候我们关闭命令行,http://localhost:3000/ 服务还是可以访问的,接下来我们执行下 pm2 list
image.png

3.0.2 启动相关常用参数

  • --watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
  • -i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。
  • --ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如--ignore-watch="test node_modules "some scripts""
  • -n --name:应用的名称。查看应用信息的时候可以用到。
  • -o --output <path>:标准输出日志文件的路径。
  • -e --error <path>:错误输出日志文件的路径。

完整命令行参数列表,例如:

  1. pm2 start ./bin/www--watch -i 2 --name koa-test

3.0.3 重启

  1. pm2 restart app.js

3.0.4 停止

停止特定的应用。可以先通过pm2 list获取应用的名字(—name指定的)或者进程id。

  1. pm2 stop app_name|app_id

如果要停止所有应用,可以:

  1. pm2 stop all

3.0.5 删除

  1. npm delete koa-test

3.0.7 查看进程状态

  1. pm2 list

大部分时间我们是结合几个命令一起使用的,比如下面命令:

  1. pm2 delete koa-test || true && pm2 start ./bin/www--watch -i 2 --name koa-test

表示删除名称为 koa-test 的服务,然后启动一个服务名称叫 koa-test,类似重启。

当然 PM2 配置项非常多,这里我也不一一列举,大家在使用的时候可以翻看文档,根据文档来定制化自己的需求。

4.0 小结

这节我们讲述了 ECS 的概念,PM2 的基本使用,在 Node 应用中我们部署用的最多就是 PM2 了,大家可以跟着 Demo ,在本地试试,Demo 地址