当前位置: 首页 > article >正文

部署 Node.js 应用之 PM2

什么是 pm2

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

安装 pm2

npm install pm2 -g

验证是否安装成功

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 应用

pm2 delete <入口js文件>
pm2 delete <pm2应用名称>

查看日志

pm2 logs
pm2 logs <pm2应用名称>         # 查看某个应用的日志

清空日志

pm2 flush

PM2 配置文件

pm2.json

{
    "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 文件 启动应用

pm2 start pm2.json

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

pm2 stop pm2.json

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

pm2 reload pm2.json


http://www.kler.cn/a/567317.html

相关文章:

  • git:5步搞定向远程仓库提交
  • 基于SpringBoot的绿城郑州爱心公益网站设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • 修改 DSRM 密码进行域维权
  • 【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
  • Leetcode 面试150题(二)
  • npx degit 问题:could not fetch remote...
  • AI赋能视频创作:零基础也能玩转短视频制作
  • 基于redis的位图实现签到功能
  • 【Python修仙编程】(二) Python3灵源初探(1)
  • 大白话React Hooks(如 useState、useEffect)的使用方法与原理
  • DeepSeek-V3关键技术之一:DeepSeekMoE
  • NLP vocab中为什么有的有▁前缀,有的没有呢?
  • 微软Office 2016-2024 x86直装版 v16.0.18324 32位
  • ESP32+Mixly-WiFi
  • 在Docker中部署DataKit最佳实践
  • Redis数据结构-Hash哈希
  • 集合之List--ArrayList与LinkedList以及List与数组、Set的区别
  • win7电脑上最好安装 Python什么版本?
  • 8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志
  • 子宫腺肌症会导致不孕吗?