部署 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
相关推荐
小王码农记16 小时前
NodeJS服务器 + Vue3框架 从搭建服务器 定义接口 到请求数据页面展示
node.js
hamburgerDaddy116 小时前
从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息
前端·javascript·mongodb·react.js·node.js·express
浪九天1 天前
编程题 - 汽水瓶【JavaScript/Node.js解法】
前端·javascript·node.js
samroom1 天前
Node.js学习分享(上)
javascript·笔记·学习·node.js
幸运小圣1 天前
编程题 - 汽水瓶【JavaScript/Node.js解法】
javascript·node.js
祈澈菇凉1 天前
如何在Node.js中处理文件上传?
node.js
m0_748251721 天前
【前端】Node.js使用教程
前端·node.js·vim
咖啡の猫1 天前
初识 Node.js
后端·node.js
samroom1 天前
简单的SQL语句以及使用Node.js连接MySQL
sql·mysql·node.js