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

前言

我以 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/,我们根据官方网站的介绍,在服务器上运行安装命令,如下:

sh 复制代码
npm install pm2 -g

pm2 运行一个项目

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

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

将项目部署到服务器上

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

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

我们执行下面的命令,来进行文件夹用户权限的调整

sh 复制代码
sudo chown fungleo:fungleo /srv

调整后,如下图所示:

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

sh 复制代码
# 进入 /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 来启动项目吧。

启动命令如下:

sh 复制代码
pm2 start "pnpm start" --name "simple-mock"

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

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

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

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

pm2 常用命令

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

sh 复制代码
# 安装
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 服务端进程管理的使用和配置》

相关推荐
来鸟 鸣间27 分钟前
vscode 连接远程服务器
服务器·ide·vscode
伤不起bb1 小时前
Kafka 消息队列
linux·运维·分布式·kafka
Hello.Reader1 小时前
Git 安装全攻略Linux、macOS、Windows 与源码编译
linux·git·macos
龙仔7251 小时前
华为云CentOS配置在线yum源,连接公网后,逐步复制粘贴,看好自己对应的版本即可,【新手必看】
linux·centos·华为云
tiging1 小时前
centos实现SSH远程登录
linux·centos·ssh
Wooden-Flute1 小时前
五、查询处理和查询优化
服务器·数据库·oracle
好多知识都想学2 小时前
Linux 文件处理器 sed 和 awk 详细讲解
linux·运维·ubuntu
Johny_Zhao2 小时前
阿里云数据库Inventory Hint技术分析
linux·mysql·信息安全·云计算·系统运维
FBI HackerHarry浩2 小时前
云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】
linux·运维·云计算·腾讯云
敲键盘的小夜猫3 小时前
RunnablePassthrough介绍和透传参数实战
java·服务器·前端