如何利用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配置文件来自动部署项目

相关推荐
GetcharZp17 小时前
玩转 Linux 机器视觉:手把手带你搞定 Ubuntu 下海康工业相机 C++ SDK
后端
橙子家18 小时前
浏览器缓存之【基础键值存储】:Local storage 和 Session storage
前端
星星在线20 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒21 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x21 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
京东云开发者1 天前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
袋鱼不重1 天前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户8356290780511 天前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还1 天前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy881 天前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api