pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。

pm2 的用处

  • 监听文件变化,自动重启程序
  • 支持性能监控
  • 负载均衡
  • 程序崩溃自动重启
  • 服务器重新启动时自动重新启动
  • 自动化部署项目

安装

npm install pm2 -g

常用命令

启动

pm2 start app.js

启动进程并指定应用的程序名

pm2 start app.js --name application1

集群模式启动

# -i 表示 number-instances 实例数量
# max 表示 PM2将自动检测可用CPU的数量 可以自己指定数量
pm2 start start.js -i max

添加进程监视

# 在文件改变的时候会重新启动程序
pm2 start app.js --name start --watch

列出所有进程

pm2 list
pm2 ls # 简写

删除进程

# pm2 delete [appname] | id
pm2 delete app  # 指定进程名删除
pm2 delete 0    # 指定进程id删除
pm2 delete all  # 删除所有进程

查看某个进程的详细情况

pm2 describe app

重新启动

pm2 restart app.js

查看进程的资源消耗情况

pm2 monit

查看进程日志

pm2 logs app  # 查看该名称进程的日志
pm2 logs all  # 查看所有进程的日志

设置开机启动

开启启动设置,此处是CentOS系统,其他系统替换最后一个选项(可选项:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)

pm2 startup centos

然后按照提示需要输入的命令进行输入

最后保存设置

pm2 save

远程部署

准备工作

  • 服务器安装 pm2
  • 服务器安装并配置 git, 确保可以从指定的 repo 拉取到最新的代码
  • 可以免密登录到服务器(这个不是必须的, 但是实际工作中,必然要设置, 不然每次部署都要输入好几次密码, 会疯掉的)

pm2 的远程部署配置

详细配置可参考官方文档-deploy ecosystem.json

{
  "apps": [
    {
      "name": "lottery-api",
      "script": "dist/server.js",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {
      "user": "root",
      "host": [
        "xxx.xxx.xxx.xxx"
      ],
      "port": 22,
      "ref": "origin/master",
      "repo": "git@gitee.com:shiquan/lottery-api.git",
      "ssh_options": "StrictHostKeyChecking=no",
      "path": "/root/workspace/lottery/lottery-api",
      "pre-deploy": "git fetch --all ",
      "post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

首次部署

pm2 deploy deploy.yaml production setup

部署完成后,既可登陆服务器查看配置的目录下是否从git上拉取了项目

再次部署

pm2 deploy deploy.yaml production upddate

这种操作也适合前端代码部署