Ubuntu 22.04 安装 pm2 7.0.4 指南
Ubuntu 22.04 安装 pm2 7.0.4 完整指南:Node.js 22 前置环境、npm 在线安装与 npm pack 离线安装双方案、systemd 托管开机自启(pm2 startup/pm2 save)、验证与卸载清理,全部步骤已在 Ubuntu 22.04 实测通过
Ubuntu 22.04 安装 pm2 7.0.4 指南
目标:在一台全新的 Ubuntu 22.04 服务器上从零安装 pm2 7.0.4(npm registry 当前 latest 稳定版,2026-10-18 实查),覆盖 Node.js 运行时前置、在线/离线两种安装方案、systemd 托管开机自启与卸载清理,全部命令与回显已在 Ubuntu 22.04 实测通过。pm2 的定位与选型背景见《pm2 7.0.4 介绍与选型指南》。
一、环境信息
本章列出实测环境的完整基线,便于读者比对自己服务器的环境。
- 操作系统:Ubuntu 22.04(amd64,代号 jammy)
- Node.js:v22.23.3(NodeSource node_22.x 仓库安装)
- npm:10.9.9(随 Node.js 22.23.3 附带)
- pm2:7.0.4(npm registry latest 稳定版,2026-10-18 实查
npm view pm2 version) - 安装方式:npm 全局安装(在线)+ npm pack tarball 安装(离线)双方案实测
- pm2 数据目录:
/root/.pm2(root 用户) - systemd 服务:
pm2-root.service(/etc/systemd/system/pm2-root.service)
二、前置条件
pm2 是以 npm 包形式分发的 Node.js 应用,安装 pm2 之前必须先有 Node.js 运行时(pm2 7.0.4 要求 Node.js >= 18.0.0,npm registry engines 字段实查)。Ubuntu 22.04 官方 apt 源中的 nodejs 版本过旧(12.x),不满足要求,推荐通过 NodeSource 官方仓库安装 Node.js 22.x。
2.1 安装 Node.js 22.x(NodeSource 仓库)
先更新 apt 索引并安装基础工具:
# 更新软件源索引
sudo apt-get update
# 安装 curl 与证书工具(NodeSource 脚本需要)
sudo apt-get install -y curl ca-certificates
实测回显(输出节选,实测首尾):
Get:17 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [82.9 kB]
Get:18 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [1325 kB]
Fetched 49.0 MB in 5s (9150 kB/s)
Reading package lists...
...
Setting up curl (8.5.0-1ubuntu1) ...
Processing triggers for ca-certificates (20230311ubuntu0.22.04.1) ...
done.
下载并执行 NodeSource 官方配置脚本,添加 Node.js 22.x 仓库,然后安装 nodejs:
# 下载并运行 NodeSource 22.x 配置脚本
curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/setup_22.x
sudo bash /tmp/setup_22.x
# 安装 Node.js
sudo apt-get install -y nodejs
实测回显(输出节选):
2026-10-18 10:18:18 - Repository configured successfully.
2026-10-18 10:18:18 - To install Node.js, run: apt install nodejs -y
...
Setting up nodejs (22.23.3-1nodesource1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
验证 Node.js 与 npm 安装结果:
node -v
npm -v
实测回显:
v22.23.3
10.9.9
再确认 nodejs 包确实来自 NodeSource 仓库(供排查版本来源问题):
apt policy nodejs | head -6
实测回显:
nodejs:
Installed: 22.23.3-1nodesource1
Candidate: 22.23.3-1nodesource1
Version table:
*** 22.23.3-1nodesource1 600
500 https://deb.nodesource.com/node_22.x nodistro/main amd64 Packages
100 /var/lib/dpkg/status
⚠️ 注意:
node -v输出必须 >= v18.0.0,否则后续npm install -g pm2会因 engines 校验失败而报错。Ubuntu 22.04 自带 apt 源的 nodejs 只有 12.x,务必先完成本节再继续。
2.2 网络连通性
在线方案需要能访问 npm registry(https://registry.npmjs.org);离线方案无此要求,在一台能上网的机器上用 npm pack 下载好 tarball 拷贝到目标服务器即可。若服务器访问国外源慢或失败,可为 npm 配置代理或国内镜像(本文实测环境直连正常,未做镜像配置)。
三、版本选型说明
pm2 的版本号在 npm registry 与 GitHub Releases 双向可查,选型以 npm latest 标签为稳定版依据。
| 查证途径 | 命令 | 实测结果(2026-10-18) |
|---|---|---|
| npm 稳定版 | npm view pm2 version | 7.0.4 |
| npm dist-tags | npm view pm2 dist-tags | latest: 7.0.4 |
| GitHub 最新 Release | https://github.com/Unitech/pm2/releases | v7.0.4(发布于 2026-08-24) |
| 7.x 全部版本 | npm view pm2 versions --json | 7.0.0 / 7.0.1 / 7.0.2 / 7.0.3 / 7.0.4 |
关键差异解读:7.x 系列 5 个版本均为补丁演进,7.0.4 为其中最新;生产环境直接锁定 pm2@7.0.4 精确版本安装(本文所有命令均显式带版本号),可避免「latest 漂移」导致不同时期装出的版本不一致。版本背景与社区数据详见《pm2 7.0.4 介绍与选型指南》。
四、在线安装方案(A:npm 全局安装,官方推荐)
本章为官方推荐方案:从 npm registry 在线全局安装 pm2。适合能访问公网 npm 源的服务器,一条命令完成,后续升级也最简单。
4.1 安装命令与实测
# 全局安装 pm2 7.0.4(显式锁定版本)
sudo npm install -g pm2@7.0.4
实测回显(完整输出,含安装完成后的官方 banner,首行至末行照抄):
added 77 packages in 9s
-------------
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
_\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
_\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
_\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
_\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
_\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
_\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
_\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
_\///______________\///______________\///__\///////////////__
Runtime Edition
PM2 is a Production Process Manager for Node.js applications
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
http://pm2.io/
-------------
💡 说明:安装完成时 npm 会打印 pm2 的 ASCII 宣传横幅与四条最常用命令提示,这是正常输出而非报错。横幅中的
$ pm2 startup即第七章 systemd 托管的入口命令。
4.2 验证安装
pm2 --version
which pm2
实测回显:
7.0.4
/usr/bin/pm2
首次执行任意 pm2 命令会自动拉起守护进程(God Daemon),实测 pm2 ping 探活:
pm2 ping
实测回显:
host metrics | cpu: 10.3% | ram usage: 58.3% | disk: ⇓ 0.079mb/s ⇑ 0.885mb/s
{ msg: 'pong' }
{ msg: 'pong' } 表示 pm2 守护进程已在后台运行并可正常响应命令。方案 A 安装完成。
五、离线安装方案(B:npm pack tarball,断网服务器)
本章面向无法访问公网 npm 源的内网服务器:先在任意一台能上网的机器上用 npm pack 把 pm2 7.0.4 打包为 tarball,再拷贝到目标服务器本地安装。全程不依赖目标服务器联网。
5.1 在联网机器上下载 tarball
# 在能上网的机器执行:把 pm2@7.0.4 打包下载到当前目录
npm pack pm2@7.0.4
实测回显(输出节选):
npm notice
npm notice 📦 pm2@7.0.4
npm notice === Tarball Contents ===
npm notice 22.9kB index.js
npm notice 11.1kB LICENSE
npm notice 3.1kB package.json
npm notice ...
npm notice total files: 231
npm notice
pm2-7.0.4.tgz
确认产物与大小:
ls -la pm2-7.0.4.tgz
实测回显:
-rw-r--r-- 1 root root 323084 Oct 18 10:27 pm2-7.0.4.tgz
将 pm2-7.0.4.tgz 用 scp/U 盘等方式拷贝到目标服务器的任意目录(下例放 /tmp)。
5.2 在目标服务器本地安装
# 用本地 tarball 全局安装(路径按实际存放位置调整)
sudo npm install -g /tmp/pm2-7.0.4.tgz
实测回显(输出节选,实测首尾):
added 77 packages in 5s
-------------
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
_\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
_\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
_\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
_\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
_\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
_\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
_\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
_\///______________\///______________\///__\///////////////__
Runtime Edition
PM2 is a Production Process Manager for Node.js applications
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
http://pm2.io/
-------------
验证:
pm2 --version
实测回显:
7.0.4
⚠️ 注意:tarball 安装同样要求目标服务器已具备 Node.js >= 18 与 npm(见第二章)。若目标服务器连 Node.js 也需要离线安装,可一并从 https://nodejs.org/dist/ 下载对应版本的 linux-x64 tar.xz 包解压到 /usr/local,此处不展开。
5.3 离线方案的卸载与重装验证
离线安装的卸载与在线方案完全一致(见第十一章),实测先卸载再重装的闭环:
sudo npm uninstall -g pm2
pm2 --version
实测回显:
removed 77 packages in 216ms
bash: /usr/bin/pm2: No such file or directory
sudo npm install -g /tmp/pm2-7.0.4.tgz
pm2 --version
实测回显:
7.0.4
卸载后 pm2 命令消失、重装后恢复 7.0.4,闭环验证通过。
六、方案对比与选择建议
| 维度 | 方案 A:npm 在线安装 | 方案 B:npm pack 离线安装 |
|---|---|---|
| 依赖网络 | 需访问 npm registry | 目标服务器零外网依赖 |
| 版本控制 | @7.0.4 显式锁定 | tarball 固化,天然锁定 |
| 安装命令 | npm install -g pm2@7.0.4 | npm install -g /tmp/pm2-7.0.4.tgz |
| 升级便利性 | 一条命令拉新版本 | 需重新 pack 拷贝 |
| 适用场景 | 可联网的服务器/云主机 | 内网隔离机房、带宽受限环境 |
选择建议:服务器能通公网 npm 源就用方案 A(官方推荐,升级维护最省事);生产内网严格隔离时用方案 B,且建议把 tarball 连同 Node.js 安装包一起纳入内网制品库统一分发。两方案装出的 pm2 完全一致(同为 7.0.4、数据目录同为 ~/.pm2),后续章节对两方案通用。
七、systemd 托管与开机自启
pm2 安装完成后自身以守护进程运行,但服务器重启后需要 systemd 负责拉起 pm2。本章完成「pm2 startup 生成服务 → pm2 save 固化进程清单 → 重启服务器验证自动恢复」的完整闭环,这是 pm2 上生产前必须做的一步。
7.1 生成并注册 systemd 服务
以 root 用户登录执行(官方标准形式,显式指定用户与家目录):
pm2 startup systemd -u root --hp /root
实测回显(输出节选,实测首尾):
[PM2] Init System found: systemd
Platform systemd
...
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd
该命令完成了两件事:把服务单元写入 /etc/systemd/system/pm2-root.service,并执行 systemctl enable pm2-root 使其随开机启动。查看生成的单元文件内容:
cat /etc/systemd/system/pm2-root.service
实测回显:
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure
ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
关键项解读:ExecStart 指向 pm2 resurrect——开机时由 systemd 拉起 pm2,pm2 再按 dump 清单恢复应用;ExecStop 对应 pm2 kill;Restart=on-failure 表示 pm2 自身异常退出时 systemd 也会重新拉起它,形成「systemd 守护 pm2、pm2 守护应用」的双层守护结构。
确认服务已注册为开机启用:
systemctl is-enabled pm2-root
实测回显:
enabled
7.2 固化进程清单(pm2 save)
先启动一个示例应用(以简单的 Node.js HTTP 服务为例),再执行 pm2 save 把当前进程列表写入 dump 文件:
# 准备示例应用
mkdir -p /opt/demoapp
cat > /opt/demoapp/app.js <<'EOF'
const http = require("http");
const port = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
res.end("Hello from pm2 demo app, PID=" + process.pid + "\n");
});
server.listen(port, () => {
console.log("demo app listening on port " + port + ", PID=" + process.pid);
});
EOF
# 启动并固化清单
cd /opt/demoapp
pm2 start app.js --name app
pm2 save
实测回显(输出节选):
[PM2] Starting /opt/demoapp/app.js in fork_mode (1 instance)
[PM2] Done.
...
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
pm2 save 的输出确认清单已写入 /root/.pm2/dump.pm2——这正是开机时 pm2 resurrect 读取的恢复依据。此后每当你新增、删除或修改了应用的启动形态,都应再执行一次 pm2 save 刷新清单。
7.3 重启服务器验证自动恢复
重启服务器(或等价地重启到多用户模式),登录后依次确认服务状态、进程恢复与业务可用:
systemctl status pm2-root --no-pager
实测回显(重启后):
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-10-18 10:26:54 UTC; 11s ago
Docs: https://pm2.keymetrics.io/
Process: 77 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 176 (PM2 v7.0.4: God)
Tasks: 22 (limit: 5753)
Memory: 26.7M (peak: 45.8M)
CPU: 297ms
CGroup: /system.slice/.../pm2-root.service
Active: active (running) 与 ExecStart ... status=0/SUCCESS 表明开机时 systemd 已成功执行 resurrect。再确认应用进程被自动恢复并对外服务:
pm2 list
curl -s http://localhost:3000/
实测回显:
┌────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ app │ default │ N/A │ fork │ 258 │ 11s │ 0 │ online │ 0% │ 57.8mb │ root │ disabled │
└────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Hello from pm2 demo app, PID=258
应用在服务器重启后自动回到 online 状态且端口可访问,systemd 托管闭环验证完成。
⚠️ 注意:
pm2 startup必须以将被 pm2 托管服务的那个用户身份执行(本文为 root)。若在无登录上下文的自动化脚本中执行,输出可能出现User=undefined、服务名变成pm2-undefined.service,此时务必显式带上-u root --hp /root参数(实测对比:显式传参后服务名与单元内User=均为 root)。
八、安装后验证汇总
安装与托管全部完成后,一条链路复核环境基线:
node -v && npm -v && pm2 --version && systemctl is-enabled pm2-root
实测回显:
v22.23.3
10.9.9
7.0.4
enabled
四行输出分别确认 Node.js、npm、pm2 版本与开机自启注册状态。pm2 的日常命令使用与 cluster 模式实测详见《pm2 7.0.4 常用 CLI 命令与工具详解》,应用启动参数配置详见《pm2 7.0.4 配置参数详解》。
九、配置说明
pm2 安装本身无需配置文件,安装后的常用「配置位」集中在以下四处:
| 配置对象 | 位置 | 说明 |
|---|---|---|
| pm2 全局配置 | ~/.pm2/dump.pm2(由 pm2 save 生成) | 开机恢复清单,不手工编辑 |
| 应用启动配置 | ecosystem.config.js(应用目录) | 应用级参数集中声明,逐项说明见《pm2 7.0.4 配置参数详解》 |
| 应用日志 | ~/.pm2/logs/(默认) | 可在 ecosystem 中改向 /var/log/<app>/ 并开启 merge_logs |
| logrotate 轮转 | pm2 logrotate 安装的 /etc/logrotate.d/pm2-user | 按天切割 pm2 日志,防止单文件无限增长 |
pm2 自身的行为配置(如是否自动连接 pm2 plus)可用 pm2 set <key> <value> 调整;常规生产部署只涉及上表前三项。
十、常见问题(FAQ)
Q1:执行 pm2 startup 后服务名显示为 pm2-undefined.service,User=undefined 怎么办?
现象:在自动化脚本或非登录环境中执行 pm2 startup systemd,回显出现 User=undefined。定位:pm2 未能从当前会话推断出用户与家目录。解决:显式指定用户与家目录重新执行:
pm2 unstartup systemd
pm2 startup systemd -u root --hp /root
实测回显(重执行后关键行):
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
Q2:重启服务器后应用没有自动恢复?
现象:systemctl status pm2-root 是 active,但 pm2 list 为空。定位:开机恢复依赖 ~/.pm2/dump.pm2,该文件只在执行 pm2 save 时生成或更新;若启动应用之后没执行过 pm2 save,resurrect 恢复的是旧清单(或空清单)。解决:启动应用后补执行 pm2 save,再重启验证:
pm2 save
实测回显:
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
Q3:pm2: command not found(npm 安装后仍找不到命令)?
定位:npm 全局安装路径不在当前用户 PATH 中(常见于自定义 prefix 或 nvm 多版本切换后)。排查与解决:
npm prefix -g
ls $(npm prefix -g)/bin | grep pm2
确认 $(npm prefix -g)/bin 目录已包含 pm2 后,把该目录加入 PATH(root 默认路径 /usr/bin 一般无此问题,本文实测 which pm2 返回 /usr/bin/pm2)。
Q4:npm install -g pm2 报 engines/版本不兼容错误?
定位:pm2 7.0.4 要求 Node.js >= 18.0.0;Ubuntu 22.04 自带 apt 源 nodejs 为 12.x 时必然失败。解决:按第二章通过 NodeSource 安装 Node.js 22.x,再执行 node -v 确认 >= v18 后重试安装。
Q5:如何升级 pm2 到新版本?
pm2 升级分两步:先升级 npm 包,再让常驻的守护进程换到新版本(pm2 update 会以新版本重启 God Daemon 并恢复既有应用):
sudo npm install -g pm2@latest
pm2 update
实测回显(pm2 update 输出节选):
[PM2] Applying action restartProcessId on app [app](ids: [ 0, 1, 2 ])
...
│ 0 │ demo-eco │ default │ N/A │ cluster │ 8221 │ 0s │ 0 │ online │ 0% │ 59.6mb │ root │ disabled │
升级后用 pm2 --version 复核版本号。
十一、卸载与清理
完整卸载按「先撤 systemd 注册,再清进程与 dump,最后卸 npm 包」顺序执行:
# 1. 撤销开机自启并删除服务单元
pm2 unstartup systemd
实测回显:
[PM2] Init file disabled.
# 2. 停止所有应用并杀掉 pm2 守护进程
pm2 kill
实测回显:
[PM2] [v] All Applications Stopped
[PM2] [v] PM2 Daemon Stopped
# 3. 卸载 npm 包
sudo npm uninstall -g pm2
实测回显:
removed 77 packages in 216ms
# 4. 清理 pm2 数据目录(日志、dump、pid 全部移除;确认无需留存再执行)
rm -rf /root/.pm2
# 5. 验证卸载干净
pm2 --version
实测回显:
bash: /usr/bin/pm2: No such file or directory
十二、参考链接
- npm 包主页(pm2 7.0.4):https://www.npmjs.com/package/pm2
- GitHub 仓库与 Releases:https://github.com/Unitech/pm2
- NodeSource 安装文档(Node.js 22.x 仓库配置):https://github.com/nodesource/distributions
- 官方文档 systemd 自启:https://pm2.keymetrics.io/docs/usage/startup/
- 官方文档 Quick Start:https://pm2.keymetrics.io/docs/usage/quick-start/
- 本系列配套文档:《pm2 7.0.4 介绍与选型指南》《pm2 7.0.4 常用 CLI 命令与工具详解》《pm2 7.0.4 配置参数详解》