如何利用pm2 管理 node 应用

1、pm2是什么?

pm2, 全称是process manager 2,是一个进程管理工具,维护一个进程列表,可以用它来管理node进程

官网地址:pm2.keymetrics.io/

node应用需要用 pm2 的日志管理、进程管理、负载均衡、性能监控等功能。

分别对应 pm2 logs、pm2 start/restart/stop/delete、pm2 start -i、pm2 monit等命令。

2、pm2可做什么事情?

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

3、pm2安装

3.1 全局安装

ruby 复制代码
$ npm install pm2@latest -g
# or
$ yarn global add pm2

3.2 查看版本

ruby 复制代码
$ pm2 -v

4、pm2 基础命令使用

1. 启动

(1)启动应用程序

ruby 复制代码
$ pm2 start app.js
  • 您还可以启动任何类型的应用程序,如 bash 命令、脚本、二进制文件:
ruby 复制代码
$ pm2 start "npm run start"
$ pm2 start "ls -la"
$ pm2 start app.py

(2)启动并显示日志流

  • 要启动应用程序并显示日志流,使用--attach选项
  • 通过 Ctrl-C 退出时,该应用程序仍将在后台运行。
sql 复制代码
$ pm2 start app.js --attach

(3)传递参数

  • --之后传递的所有选项都将作为参数传递给应用程序
sql 复制代码
$ pm2 start app.js -- arg1 arg2

(4)配置文件

  • 当同时管理多个应用程序或必须指定多个选项时,可以使用配置文件。

执行 pm2 ecosystem,会创建一个配置文件:

apps 部分就是配置应用的,scripts 就是应用的启动路径:

  • 然后可以通过配置文件同时启动两个应用程序:
arduino 复制代码
$ pm2 start ecosystem.config.js

2、restart

ruby 复制代码
$ pm2 restart app_name        # 重启应用
$ pm2 restart all      		  # 重启所有应用
$ pm2 restart app1 app3 app4  # 重启多个应用

3、停止

  • stop 停止应用
ruby 复制代码
$ pm2 stop app_name        # 停止应用
$ pm2 stop [process_id]    # 停止应用
$ pm2 stop all             # 停止所有应用
$ pm2 stop app1 app3 app4  # 停止多个应用

4、删除

  • delete停止和删除应用
perl 复制代码
$ pm2 delete app_name     # 停止和删除应用 
$ pm2 delete all          # 停止和删除所有应用 

5、列表

  • 列出所有应用
shell 复制代码
$ pm2 list
# Or
$ pm2 [list|ls|l|status]
  • 指定您希望应用程序列出的顺序
shell 复制代码
$ pm2 list --sort name:desc
# Or
$ pm2 list --sort [name|id|pid|memory|cpu|status|uptime][:asc|desc]

6、资源仪表板

  • PM2 为您提供了一种监视应用程序资源使用情况的简单方法。

  • Ctrl+C可以退出。

    pm2 monit

7、显示应用详情

ruby 复制代码
$ pm2 show app_name

8、重置重启计数

css 复制代码
$ pm2 reset all

9、集群模式启动(可作为负载均衡)

arduino 复制代码
// -i 表示 number-instances 实例数量
// 指定max或者0,表示PM2将自动检测可用CPU的核数量(如下,使用的cpu为8核),当然可以自己指定数量
pm2 start start.js -i max

5、Dockerfile中使用pm2 去代替node

如下Nest为例: 之前我们写的 Nest 的 dockerfile 是这样的:

bash 复制代码
# build stage
FROM node:18 as build-stage

WORKDIR /app

COPY package.json .

RUN npm config set registry https://registry.npmmirror.com/

RUN npm install

COPY . .

RUN npm run build

# production stage
FROM node:18 as production-stage

COPY --from=build-stage /app/dist /app
COPY --from=build-stage /app/package.json /app/package.json

WORKDIR /app

RUN npm install --production

EXPOSE 3000

CMD ["node", "/app/main.js"]

现在要改成这样:

使用pm2-runtime?

pm2 与 pm2-runtime的区别:

pm2-runtime是为 Docker 容器而设计的,它将应用程序保持在前台,从而使容器保持运行

pm2专为在后台发送或运行应用程序的正常使用而设计

docker 容器的生命周期就是 CMD 或 entrypoint 的生命周期。在这种情况下,使用 pm2 start 容器将在运行过程后立即死亡,导致无法访问,所以我们需要采用 docker-runtime start 的方式来启动。

6、通过pm2配置文件来自动部署项目

相关推荐
customer087 分钟前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
2402_8575893617 分钟前
SpringBoot框架:作业管理技术新解
java·spring boot·后端
理想不理想v19 分钟前
vue经典前端面试题
前端·javascript·vue.js
不收藏找不到我20 分钟前
浏览器交互事件汇总
前端·交互
YBN娜34 分钟前
Vue实现登录功能
前端·javascript·vue.js
阳光开朗大男孩 = ̄ω ̄=34 分钟前
CSS——选择器、PxCook软件、盒子模型
前端·javascript·css
一只爱打拳的程序猿35 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
minDuck39 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
小政爱学习!1 小时前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
魏大帅。1 小时前
Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析
前端·javascript·ajax