当前位置:论坛首页 > Linux面板 > Linux面板教程

【教程帖】Nodejs PM2部署

发表在 Linux面板2025-11-14 11:56 [复制链接] 0 490

本文讨论了 Nodejs PM2 部署 ChanCMS 项目的详细步骤和配置
1、下载源码
  1. git clone https://gitee.com/chancms/ChanCMS.git
复制代码
image.png

2、创建并配置数据库
image (1).png
1280X1280.PNG
1280X1280 (1).PNG
2043bb6e-d7f0-4247-9b93-b9226a2db096 (1).png
b89af7f5-e902-4c2d-832c-6850944d7cab.png


3、添加PM2项目
a:方案1、使用app.js(启动文件)启动
fbe863c8-a2e7-4bec-8f7e-cab531918d74.png
9a908ad5-2373-4602-87f5-d93bab9a68a9.png
b:方案2、使用更加现代pm2和 ecosystem.config.cjs 配置文件 (推荐)
i手动创建并写入配置文件
i1、值得注意的配置说明
name => 项目名称,最好与网站名称保持一致
script => 启动文件,一般是server.js 或 app.js, 是项目的入口文件
cwd => 项目运行目录,使用绝对路径兼容性更好
env => 项目的环境变量,此处我将官方给出的所有环境变量名称都转移到了这里,方便我管理
instances /  exec_mode 处理性能优化

i2、配置全文带注释如下
  1. module.exports = {
  2.   apps: [
  3.     {
  4.       // ===================== 基础标识配置 =====================
  5.       /**
  6.        * 进程名称:自定义名称,用于 PM2 命令管理(如 pm2 start/stop/restart ChanCMS)
  7.        * 建议与项目名称一致,便于多应用区分
  8.        */
  9.       name: "ChanCMS",

  10.       /**
  11.        * 应用入口文件:ChanCMS 项目根目录的启动文件(文档明确为 app.js)
  12.        * 路径说明:相对路径基于执行 pm2 命令的目录(建议在项目根目录执行)
  13.        */
  14.       script: "./app.js",

  15.       /**
  16.        * 运行目录(cwd):指定 PM2 启动应用时的工作目录
  17.        * 作用:确保所有相对路径(如 ./logs、./data、./app.js)都基于项目根目录解析,避免路径错误
  18.        * 配置说明:替换为你的 ChanCMS 项目实际部署路径(必须是绝对路径)
  19.        */
  20.       cwd: "/www/wwwroot/ChanCMS",


  21.       // ===================== 性能优化配置 =====================
  22.       /**
  23.        * 执行模式:Cluster 模式(多核 CPU 推荐)
  24.        * 原理:通过多进程共享端口,充分利用 CPU 核心,提升并发处理能力
  25.        * 替代值:"fork"(单进程模式,适合开发环境或单核服务器)
  26.        */
  27.       exec_mode: "cluster",
  28.       
  29.       /**
  30.        * 实例数:自动适配 CPU 核心数(生产环境最优选择)
  31.        * 自定义配置:若需限制实例数,可改为具体数字(如 2 表示启动 2 个进程)
  32.        * 注意:Cluster 模式下实例数建议 ≤ CPU 核心数,避免进程切换开销
  33.        */
  34.       instances: "max",

  35.       // ===================== 环境变量配置 =====================
  36.       /**
  37.        * 基础环境变量:所有环境共享的配置(开发环境默认值)
  38.        */
  39.       env: {
  40.         NODE_ENV: "production", // 默认环境(开发环境)
  41.         APP_DEBUG: true, // 开发环境启用调试模式
  42.         PORT: 3000, // 开发环境端口
  43.         LOG_LEVEL: "debug", // 开发环境显示详细日志
  44.       },

  45.       /**
  46.        * 生产环境变量:--env production 启动时加载(覆盖基础环境变量)
  47.        * 整合所有提供的 ChanCMS 配置,直接对接项目需求
  48.        */
  49.       env_production: {
  50.         // 基础环境标识
  51.         NODE_ENV: "production", // 项目指定生产环境标识(与配置文件一致)
  52.         APP_DEBUG: false, // 生产环境关闭调试模式(避免泄露敏感信息)

  53.         // JWT 认证配置
  54.         JWT_SECRET: "ChanCMS", // JWT 加密密钥(项目默认值,建议生产环境修改为随机字符串)
  55.         JWT_EXPIRES_IN: "1d", // JWT 有效期(1天,支持 s/m/h/d 单位)
  56.         JWT_REFRESH: false, // 关闭 JWT 刷新功能(按项目配置)

  57.         // 加盐配置(密码/用户信息加密)
  58.         PASSWORD_SALT: 12, // 密码加密加盐系数
  59.         USER_SALT: 12, // 用户信息加密加盐系数
  60.         AES_SALT: "chancms-aes-prd", // AES 加密密钥(生产环境专用)

  61.         // WAF 防护配置
  62.         WAF_LEVEL: 1, // WAF 防护等级(1=基础防护,按项目支持的等级调整)

  63.         // 数据库核心配置(与提供的 DB 信息完全一致)
  64.         DB_HOST: "localhost", // 数据库地址(本地部署)
  65.         DB_USER: "chan_cms", // 数据库用户名
  66.         DB_PASS: "wAFaihDwxZS5Zxbh", // 数据库密码
  67.         DB_PORT: 3306, // 数据库端口(MySQL 默认 3306)
  68.         DB_DATABASE: "chan_cms", // 数据库名称
  69.         DB_DEBUG: false, // 生产环境关闭数据库调试日志
  70.         DB_POOL_MIN: 0, // 数据库连接池最小连接数
  71.         DB_POOL_MAX: 2, // 数据库连接池最大连接数(按服务器性能调整)
  72.         DB_CLIENT: "mysql2", // 数据库客户端(项目指定 mysql2)
  73.         DB_FILENAME: "./data/chancms.sqlite", // SQLite 备用数据库路径(项目兼容配置)

  74.         // 站点服务配置
  75.         PORT: 3000, // 项目指定服务端口(如需通过 Nginx 反向代理,保持此端口即可)
  76.         BODY_LIMIT: "300kb", // 请求体大小限制(防止大文件上传攻击)
  77.         CORS_ORIGIN: "*", // 跨域允许所有来源(生产环境建议指定具体域名,如 "https://your-domain.com")

  78.         // 日志配置
  79.         LOGGER_LEVEL: "tiny", // 生产环境日志级别(精简日志,减少磁盘占用)

  80.         // 邮箱服务配置(用于验证码、通知发送)
  81.         EMAIL_HOST: "smtp.qq.com", // QQ 邮箱 SMTP 服务器
  82.         EMAIL_PORT: 587, // SMTP 端口(587=非加密,465=SSL加密)
  83.         EMAIL_USER: "you-email@qq.com", // 发件人邮箱账号
  84.         EMAIL_PASS: "you-email-pass", // 邮箱授权码(非登录密码,需在邮箱后台开启 SMTP 并获取)
  85.         EMAIL_FROM: "you-email@qq.com", // 发件人显示邮箱(与 EMAIL_USER 一致)
  86.         EMAIL_SECURE: true, // 启用 SSL 加密(QQ 邮箱 SMTP 需开启)
  87.         EMAIL_CODE: "1234", // 邮箱验证码默认值(项目内部使用,可忽略)
  88.         EMAIL_TO: "123123123@qq.com", // 默认收件人邮箱(用于系统通知)

  89.         // 微信公众号配置(公众号内登录功能)
  90.         WECHAT_APPID: "wx-you-appid", // 公众号 AppID(需替换为实际申请的 AppID)
  91.         WECHAT_APPSECRET: "wx-you-xxx", // 公众号 AppSecret(替换为实际密钥)
  92.         WECHAT_REDIRECT_URI: "https://vip.chancms.top", // 公众号登录回调地址(需在公众号后台配置)
  93.         WECHAT_TOKEN: "123", // 公众号消息校验 Token(替换为自定义随机字符串)

  94.         // 微信开放平台配置(PC 端扫码登录)
  95.         WECHAT_OPEN_APPID: "wx-you-appid", // 开放平台 AppID(替换为实际 AppID)
  96.         WECHAT_OPEN_APPSECRET: "wx-you-appsecret", // 开放平台 AppSecret(替换为实际密钥)

  97.         // 微信小程序配置(小程序登录/对接)
  98.         MINIPROGRAM_APPID: "your-miniprogram-appid", // 小程序 AppID(替换为实际 AppID)
  99.         MINIPROGRAM_APPSECRET: "your-miniprogram-appsecret", // 小程序 AppSecret(替换为实际密钥)
  100.       },

  101.       // ===================== 日志配置 =====================
  102.       /**
  103.        * 错误日志路径:记录应用崩溃、异常等错误信息
  104.        * 路径说明:项目根目录下的 logs 文件夹,自动创建(需确保目录权限可写)
  105.        */
  106.       error_file: "./logs/chancms-error.log",

  107.       /**
  108.        * 输出日志路径:记录应用正常运行日志(如接口请求、业务日志)
  109.        */
  110.       out_file: "./logs/chancms-out.log",

  111.       /**
  112.        * 日志合并:多实例(Cluster 模式)日志合并到同一个文件
  113.        * 优势:避免日志分散,便于按时间线排查问题
  114.        */
  115.       merge_logs: true,

  116.       /**
  117.        * 日志时间格式:统一日志时间戳格式,便于日志分析工具解析
  118.        * 格式说明:YYYY-MM-DD HH:mm:ss(年-月-日 时:分:秒)
  119.        */
  120.       log_date_format: "YYYY-MM-DD HH:mm:ss",

  121.       /**
  122.        * 日志轮转配置:避免单个日志文件过大(PM2 v6+ 支持)
  123.        * 作用:自动分割日志,保留历史日志,防止磁盘占满
  124.        */
  125.       log_rotate: {
  126.         size: "10M", // 单个日志文件最大 size(超过则分割)
  127.         max: 30, // 保留最近 30 个日志文件
  128.         compress: true, // 压缩历史日志(gzip 格式,节省磁盘空间)
  129.         interval: "1d", // 日志轮转间隔(1d = 每天轮转一次)
  130.       },

  131.       // ===================== 稳定性配置 =====================
  132.       /**
  133.        * 自动重启:进程异常退出时自动重启(生产环境必需)
  134.        * 场景:应对内存泄漏、代码异常等导致的进程崩溃,保障服务可用性
  135.        * 例外:通过 process.exit(0) 正常退出时,不会触发重启
  136.        */
  137.       autorestart: true,

  138.       /**
  139.        * 重启延迟:异常退出后,延迟 5 秒重启(避免频繁重启)
  140.        */
  141.       restart_delay: 5000,

  142.       /**
  143.        * 监听文件变化:生产环境禁用(避免代码更新误触发重启)
  144.        */
  145.       watch: false,

  146.       /**
  147.        * 内存限制:进程占用内存超过阈值时自动重启(防止 OOM 崩溃)
  148.        * 配置依据:ChanCMS 轻量特性,1G 足够生产环境使用(可根据服务器内存调整)
  149.        */
  150.       max_memory_restart: "1G",

  151.       // ===================== 高级配置 =====================
  152.       /**
  153.        * 启动超时时间:超过 30 秒未启动成功则视为启动失败
  154.        * 适配场景:ChanCMS 启动需加载数据库、插件等,预留充足启动时间
  155.        */
  156.       timeout: 30000,

  157.       /**
  158.        * 健康检查:定期检测应用端口是否可用(保障服务存活)
  159.        * 原理:PM2 会访问指定端口,无响应则触发重启
  160.        */
  161.       health_check: {
  162.         enable: true,
  163.         interval: 60, // 每 60 秒检查一次
  164.         timeout: 5, // 检查超时时间 5 秒
  165.         port: 3000, // 与生产环境 PORT 一致
  166.       },

  167.       /**
  168.        * 环境变量加载:自动加载项目根目录的 .env 文件(PM2 v5+ 支持)
  169.        * 优势:无需手动 require dotenv,与 ChanCMS 配置加载逻辑兼容
  170.        */
  171.       merge_env_vars: true,

  172.       /**
  173.        * 进程优先级:设置为 19(最低优先级),避免抢占核心服务资源
  174.        */
  175.       nice: 19,
  176.     },
  177.   ]
  178. };
复制代码
e16ac284-80e5-47cb-a4d1-9194e4624e73.png

ii、添加项目并启动
186cb97b-9f77-4f97-a177-5919b248a2eb.png
ca8204af-41a2-48ff-876f-797db5222621.png
76ccc56e-800e-4cb1-90cb-1fb46e4bf1f6.png


4、配置域名和反向代理 (此处为我内网配置的host,仅用于测试)


78ef8e57-adf8-4340-96de-a7022b58878e.png
59655bb0-363b-4c0a-b866-36ef921a0ac0.png
5be1f0fb-743f-41e4-97a2-cdfbc7cea4c0.png
a4c45469-1859-49a1-942d-9c95255909dc.png






使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表