node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7

发布于:2025-06-05 ⋅ 阅读:(28) ⋅ 点赞:(0)

前言

我以 Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章,经过五篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs,还有PNPM包管理工具 ,最后,还给服务器 安装和配置 Nginx 和 Mysql 。至此,我们的基于 Ubuntu Server 打造的 NodeJS 服务器的基础已经全部完成了。

今天,我来写这个系列的最后一篇文章,就是 NodeJS 的进程管理软件, pm2 的相关内容。

为什么要使用 pm2 管理 node 进程

当我们在服务器终端内输入 pnpm start 命令,就可以启动 NodeJS 的服务了。但是,随着我们终端的关闭,这个服务也会随之关闭。

为了使进程可以在终端关闭后,依然在后台运行,我们可以使用 nohup pnpm start > /dev/null 2>&1 & 这样的命令来执行。

当然,我们也可以开启一个 tmux 来解决这些问题,在开发环境上这么搞是没有啥的,但是在生产环境,这样搞就有点过于简陋了。

在这里插入图片描述

PM2 是 Node.js 生态中最主流的进程管理工具,主要特性包括:

进程守护‌

  • 自动重启崩溃应用,保障服务高可用性。

‌负载均衡‌

  • 通过集群模式(cluster 模块)充分利用多核 CPU,支持零秒停机重载36。
  • 示例命令‌:pm2 start app.js -i 4(启动 4 个进程)。

日志管理‌

  • 自动收集日志,支持轮转分割与实时查看(pm2 logs)。‌

监控与告警‌

  • 实时监控 CPU/内存使用(pm2 monit),支持异常报警。

‌开机自启动‌

  • 通过 pm2 startup 生成系统服务脚本。

跨语言支持‌

  • 兼容 Python、Ruby 等非 Node.js 应用(需配置虚拟环境)。

通过使用 pm2, 我们可以更方便,更直观的管理我们的 NodeJS 进程。

pm2 的安装

pm2 的官方网站是 https://pm2.keymetrics.io/,我们根据官方网站的介绍,在服务器上运行安装命令,如下:

npm install pm2 -g

PM2 的安装

pm2 运行一个项目

我不能拿我真实的项目来演示,因此,我选择运行我开发并开源的一款前端 Mock 工具来进行演示。

项目地址: https://github.com/fengcms/simple-mock

将项目部署到服务器上

我比较习惯,将我们的代码部署在 /srv 目录上。因为 Linux 的根目录下有众多的目录,各有各的作用,这里不详细介绍。一般情况下,大家都习惯把项目部署在 srvvar 目录下,大家根据自己的习惯部署即可。

但是,Ubuntu 系统默认这些目录,都是 root 用户权限,因此,我们需要将目录的用户权限进行调整,否则,我们就需要一直 sudo 了。

默认是 root 权限目录
我们执行下面的命令,来进行文件夹用户权限的调整

sudo chown fungleo:fungleo /srv

调整后,如下图所示:

调整文件夹用户权限
好,我们进入 srv 目录,并创建 web 文件夹,然后拉取我上面的项目,并安装依赖

# 进入 /srv 目录
cd /srv
# 创建 web 目录,用于存储我们的各种服务
mkdir web
# 进入 web 目录
cd web
# 拉取我准备部署的项目
git clone https://github.com/fengcms/simple-mock
# 进入项目目录
cd simple-mock
# 安装依赖
pnpm install
# 启动项目
pnpm start

运行结果如下图所示:
项目顺利启动

用 pm2 启动项目

通过上面的命令,我们已经顺利的在服务器启动项目了,说明我们的项目没有问题。下面,我们 ctrl + c 终止测试运行,准备用 pm2 来启动项目吧。

启动命令如下:

pm2 start "pnpm start" --name "simple-mock"

其中 pm2 start 为 pm2 的启动命令,"pnpm start" 为我们项目的启动命令,--name "simple-mock" 表示,我们将这个进程命名为 simple-mock

启动后,会立即返回一个当前的进程托管的列表,如下图所示:

pm2 启动后返回的进程列表

从上图,我们可以看到我们命名为 simple-mock 而,id 为 0 的这个进程。

我们打开浏览器,访问服务器上的这个服务,就可以看到,项目已经正常运行了。

项目正常运行

pm2 常用命令

最后,我们来总结一下 pm2 的常用命令:

# 安装
npm install -g pm2
# 更新
pm2 update

## 启动服务
# 启动 app.js  文件
pm2 start app.js  
# 启动 npm 脚本         
pm2 start "npm run start" 
# 启动 Python 脚本
pm2 start python-app.py
# 启动 Shell 脚本
pm2 start bashscript.sh

## 高级参数
# 自定义进程名称
pm2 start app.js --name "my-app"
# 监听文件改动自动重启
pm2 start app.js --watch
# 启动 4 个集群实例
pm2 start app.js -i 4

## 进程管理
# 查看所有进程状态
pm2 list                   
# 停止指定进程
pm2 stop <id|name>         
# 重启进程
pm2 restart <id|name>      
# 删除进程
pm2 delete <id|name>       
# 零停机重载集群应用
pm2 reload all             

## 日志与监控
# 查看实时日志
pm2 logs 
# 查看最近 100 行日志
pm2 logs --lines 100 
# 显示 CPU/内存占用面板
pm2 monit
# 查看进程详细信息
pm2 show <id|name> 

## 系统集成
# 生成开机自启命令
pm2 startup
# 保存当前进程列表
pm2 save 
# 恢复已保存的进程
pm2 resurrect

需要注意的是,zsh 不支持 pm2 命令的 tab 补全,所以,需要各位记住这些常用命令哦!如果记不住的话,收藏这篇博客作为你的肘后方吧!

小结

好的,这一个基于Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章终于到这里是写完了,前前后后写了三四天。虽然都是些基础的东西,但是我相信对于各位看官来说,还是有一定的增益的。

我写博客的目的主要是为了自己和自己团队的成员看,涉及的内容一般都比较基础一些。为了让我团队的新进成员能够一看就明白,可能文风偏啰嗦了一些,希望各位看官见谅。

最后为了鼓励我自己能够继续写下去,各位看看一定要多多点赞收藏,关注留言哈!谢谢大家!

本系列文章导航

《PVE虚拟机 安装 Ubuntu Server 系统》
《SSH 配置,让我们远程连上虚拟机》
《服务器软件更新,以及常用软件安装》
《配置服务器终端环境 zsh , oh my zsh, vim》
《NVM 安装 NodeJS环境,以及 PNPM 的安装》
《Nginx 和 Mysql 的安装和配置》
《pm2 服务端进程管理的使用和配置》