部署 Node.js 应用之 PM2

什么是 pm2

PM2 是一个非常流行的 Node.js 应用进程管理工具,它帮助你管理和保持 Node.js 应用的高可用性。PM2 提供了进程守护、日志管理、负载均衡等功能,非常适合生产环境使用。

安装 pm2

bash 复制代码
npm install pm2 -g

验证是否安装成功

bash 复制代码
pm2 --version

PM2 常用命令

启动 Node.js 应用(启动打包后的)

复制代码
pm2 start app.js

停止 Node.js 应用(启动打包后的)

复制代码
pm2 stop app.js

停止 Node.js 应用,使用 pid 停止

复制代码
pm2 stop <pid>

重启 Node.js 应用

复制代码
pm2 restart app.js

重启 Node.js 应用,使用 pm2 应用名称的方式

复制代码
pm2 restart <name>

查看所有正在运行的应用

复制代码
pm2 list

查看应用状态

复制代码
pm2 status

删除 Node.js 应用

bash 复制代码
pm2 delete <入口js文件>
pm2 delete <pm2应用名称>

查看日志

bash 复制代码
pm2 logs
pm2 logs <pm2应用名称>         # 查看某个应用的日志

清空日志

bash 复制代码
pm2 flush

PM2 配置文件

pm2.json

bash 复制代码
{
    "apps": [{
            "name": "app1",                             // 应用名称
            "script": "./app.js",                       // 启动脚本
            "instances": "max",                         // 启动实例数量
            "exec_mode": "cluster",                     // 使用 cluster 模式
            "watch": true,                              // 启用文件监控(自动重启)
            "env": {                                    // 开发环境变量
                "NODE_ENV": "development"
            },
            "env_production": {                         // 生产环境变量
                "NODE_ENV": "production"
            },
            "log_file": "./logs/app.log",                // 日志文件路径
            "error_file": "./logs/error.log",            // 错误日志文件路径
            "log_date_format": "YYYY-MM-DD HH:mm:ss"     // 日志日期格式
        },
        {
            "name": "app2",
            "script": "./app2.js",
            "instances": 1,
            "exec_mode": "fork",
            "watch": false
        }
    ]
}

参数说明:

apps 是一个数组,其中包含要启动的多个应用配置。每个应用可以有以下字段:

  • name: 应用的名称,用于标识应用。
  • script: 启动应用的脚本文件路径,通常是 Node.js 应用的入口文件,例如 app.js。
  • instances: 指定应用实例的数量。每个实例都将启动一个独立的 Node.js 进程。你可以使用它来并行处理多个请求,从而提升应用的性能,尤其是在多核 CPU 上,例如:
  • exec_mode: 执行模式,值为 fork(单进程)或 cluster(多进程)。以便更好地利用多核 CPU。当instances设置为多个时,fork 相当于独立的进程,没有多进程间的共享内存。cluster 自动为这些进程提供负载均衡,每个进程会共享主进程。
  • watch: 是否监视文件变化,并在文件变化时自动重启应用。在开发环境中非常有用。
  • env: 定义开发环境中的环境变量,通常用于开发模式。
  • env_production: 定义生产环境中的环境变量,用于生产模式。
  • log_file: 设置日志文件路径,记录应用的输出日志。例如:"./logs/app.log"
  • out_file:设置标准输出日志文件路径。例如:"./logs/app-out.log"
  • error_file: 设置错误日志文件的路径。例如:"./logs/app-error.log"
  • merge_logs: 设置是否合并多个实例的日志输出。默认值为 false
  • log_date_format: 设置日志输出的日期格式。例如:YYYY-MM-DD HH:mm:ss
  • autorestart:当应用崩溃或退出时是否自动重启。默认值为 true
  • min_uptime: 设置应用稳定运行的最小时间(以毫秒为单位)。如果应用崩溃或重启时间短于该时间,PM2 会认为它失败并停止重启。
  • max_restarts: 设置最大重启次数。如果应用在启动时多次失败(超过该次数),PM2 会停止重启。
  • max_memory_restart:应用的内存限制(以 MB 或 GB 为单位)。当应用的内存使用超过此限制时,PM2 会重启应用。例如:512M
  • pid_file:设置应用的 PID 文件路径。例如:"./logs/app.pid"
  • kill_timeout:设置在 PM2 终止应用时,等待进程停止的超时时间(毫秒)。默认为 1600 毫秒。
  • cron_restart:设置一个 Cron 表达式,根据定时任务重启应用。例如:"0 0 * * *"
  • interpreter:指定应用程序运行时使用的解释器
  • interpreter_args:为 Node.js 解释器传递的额外参数。
  • node_args:设置启动应用时传递给 Node.js 进程的命令行参数。

使用 pm2.json 文件 启动应用

bash 复制代码
pm2 start pm2.json

停止所有通过 pm2.json 文件启动的应用

bash 复制代码
pm2 stop pm2.json

如果你修改了 pm2.json 文件,可以使用以下命令重新加载配置

bash 复制代码
pm2 reload pm2.json
相关推荐
MageGojo6 小时前
用 Node.js 把聚合 API 平台封装成零依赖命令行工具:registry 驱动的工程实践
node.js·restful·api接口·命令行工具·cli
濮水大叔8 小时前
浅论CabloyJS全栈框架提供的“两级页签”机制
typescript·node.js·next.js
meilindehuzi_a8 小时前
深入理解 Ajax 异步请求:从 XMLHttpRequest 到 Node.js HTTP 服务实践
http·ajax·node.js
SwJieJie8 小时前
Webpack vs Vite 构建工程化实战(Vue 项目深度解析)
前端·vue.js·webpack·node.js
l1o3v1e4ding10 小时前
windows安装Claude Code,并接入Deepseek-v4模型 ,提供离线安装包
git·npm·node.js·claude code·cc-switchcc
Rain5091 天前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
矩阵科学1 天前
Langchain.js 实战五:Agent 实战
langchain·node.js
终将老去的穷苦程序员1 天前
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
前端·npm·node.js
之歆1 天前
Day10_Node.js 与 Express 开发实战指南:从零到一构建专业级 Web 服务
前端·node.js·express
之歆2 天前
Node.js 与 NPM 包管理完全指南
前端·npm·node.js