[特殊字符] PM2 入门实战:从 0 到线上托管 React SPA

1. 什么是 PM2?(30 s 速读)

PM2 是 Node.js 的生产级进程管理器 ,内置负载均衡、日志切割、开机自启、监控面板

一句话:让你的 Node / 静态站点"永远在线"


2. 本文目标

  1. 了解 PM2 核心能力
  2. 用一条命令把 React 单页应用跑在 3000 端口
  3. 配置 ecosystem 文件,实现"可重复、可回滚"的部署
  4. 开机自启 + 日志轮转,达到线上最低可维护标准

3. 环境准备

项目 版本
OS OpenCloudOS / CentOS 8+
Node 22.11.0(已预装)
构建产物 react-app/build/ 目录已存在

4. 一条命令体验 PM2

bash 复制代码
cd /www/wwwroot/react-app
pm2 serve build 3000 --spa --name "react-app"
  • --spa:所有 404 重定向到 index.html,支持 React-Router
  • --name:进程别名,方便后续管理

成功后会看到:

text 复制代码
[PM2] Serving /www/wwwroot/react-app/build on port 3000
┌────┬─────────────┬────────────┬──────┬──────┬────────┬───┬────────┬───┐
│ id │ name        │ namespace  │ mode │ pid  │ status │ ↑ │ cpu    │ mem │
├────┼─────────────┼────────────┼──────┼──────┼────────┼───┼────────┼───┤
│ 0  │ react-app   │ default    │ fork │ xxxx │ online │ 0 │ 0%     │ 32M │
└────┴─────────────┴────────────┴──────┴──────┴────────┴───┴────────┴───┘

浏览器访问 http://<服务器IP>:3000 即可看到 React 页面。


5. 核心概念图解(Mermaid)

5.1 PM2 架构一览

start/reload CLI PM2 Daemon Process Container 1 Process Container 2 ... Log File dump.pm2 systemd

5.2 静态 SPA 流程

用户 Nginx(可选) PM2 serve build/index.html 80/443 3000 SPA 模式 200 + React 页面 用户 Nginx(可选) PM2 serve build/index.html


6. 把"命令"升级成"代码"------ecosystem 文件

在项目根新建 ecosystem.config.js

js 复制代码
module.exports = {
  apps: [{
    name: "react-app",
    script: "serve",
    args: "-s build -l 3000",
    instances: 1,
    exec_mode: "fork",
    env: { NODE_ENV: "production" },
    log_date_format: "YYYY-MM-DD HH:mm:ss Z",
    out_file: "./logs/combined.log",
    error_file: "./logs/combined.log",
    merge_logs: true
  }]
};

启动/重载:

bash 复制代码
pm2 start ecosystem.config.js
pm2 reload ecosystem.config.js        # 0 中断更新

7. 日志切割 & 磁盘保护

bash 复制代码
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 7

50 MB 自动切,保留 7 份,再也不怕磁盘爆。


8. 开机自启(systemd)

bash 复制代码
pm2 save                           # 保存当前列表
pm2 startup systemd                # 生成 systemd 服务
# 按提示执行
systemctl enable pm2-root

重启机器后 pm2 ls 仍在,进程自动拉回。


9. 日常值班 6 大宝命令

任务 命令
看列表 pm2 ls
实时日志 pm2 log react-app --lines 50
资源监控 pm2 monit
平滑重载 pm2 reload react-app
停止并删除 pm2 delete react-app
保存现场 pm2 save

10. 小结 & 下一步

  1. 你已拥有可重复部署的 ecosystem 文件
  2. 日志切割 + 开机自启,达到线上最低可维护标准
  3. 下一步:
    • Nginx 反向代理 80/443
    • 接入 CI/CD(GitLab/GitHub Actions)一条 pm2 reload 完成上线
    • 使用 pm2-io-apm 接入 Web 监控 & 邮件/钉钉告警

11. 一键 cheatsheet(保存即可)

markdown 复制代码
pm2 start app.js -i max      # 集群模式
pm2 reload api               # 平滑重启
pm2 monit                    # 资源面板
pm2 install pm2-logrotate    # 日志轮转
pm2 save && pm2 startup      # 开机自启

🎉 至此,PM2 入门完成!把这篇 Markdown 丢进仓库,团队其他成员也能 3 分钟跑起同样的环境。 Happy shipping!


以我之思,借AI之力

相关推荐
程序员黑豆36 分钟前
鸿蒙应用开发 @Builder 使用教程:从入门到精通
前端·harmonyos
CCYe、44 分钟前
限流与配额:企业AI网关的工程实践
前端·人工智能
看谷秀1 小时前
arkts- 6 手势/沉浸式/深浅色/性能/组件补充/访问/js交互/通知/Native交互
前端·arkts
划船不慎掉水顺便摸鱼1 小时前
TipTap 不是编辑器,是编辑器构造器:ProseMirror 模型驱动的富文本架构
前端
小高0071 小时前
🔥🔥🔥TypeScript 7 正式版来了:别只看 10 倍速度,这 4 个迁移坑更值得注意
前端·javascript·面试
凉茶社1 小时前
shadcn/ui 默认改用 Base UI,Radix 被放弃了吗?
前端
Vuji1 小时前
ReAct 与 Plan-Execute:两种 Agent 范式的实战对比
前端·agent
用户61595868000221 小时前
从零原生搭建一个微前端简易框架
前端
小月土星1 小时前
React + TypeScript 企业级开发实战:从类型约束到组件设计
前端
沙洲1 小时前
Vite 环境变量终极指南:从原理到企业级实战
前端