宝塔部署node.js 18.x + pm2自启动必须手动确认node环境路径、pm2启动命令、反向代理三者对齐,否则必现“启动中”卡顿或502错误;node -v报command not found主因是path未配置,需在node插件设置中启用命令并执行source /www/server/nvm/nvm.sh;pm2启动命令须用绝对路径如/www/server/nvm/versions/node/v18.19.1/bin/npm start;反向代理目标url须填http://127.0.0.1:3000且关闭缓存;系统重启自启需以项目用户执行pm2 startup和pm2 save。

直接结论:宝塔里部署 Node.js 18.x + PM2 自启动,不能只点“一键部署”,必须手动确认 Node 环境路径、PM2 启动命令、反向代理三者全部对齐,否则必然卡在“启动中”或 502。
Node.js 插件安装后,node -v 仍报 command not found?
这是最常被忽略的前置问题。宝塔「Node.js 项目管理器」插件虽已安装,但默认不自动把 /www/server/nvm/versions/node/v18.19.1/bin(路径随版本变)加入系统 PATH,终端里就找不到 node 和 npm。
- 进宝塔「软件商店」→ 找到已安装的「Node.js 项目管理器」→ 点「设置」→ 勾选「为所有用户启用 Node.js 命令」
- 立刻打开「宝塔SSH终端」,执行:
source /www/server/nvm/nvm.sh && node -v,应输出v18.19.1类似值 - 如果仍失败,手动追加环境变量到
/etc/profile:echo 'export NVM_DIR="/www/server/nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /etc/profile && source /etc/profile
PM2 管理器里填的「启动命令」为什么总失败?
宝塔 PM2 管理器界面里的「启动命令」字段,不是让你填 npm start 这种简写,它根本不会加载你的 shell 环境(比如 ~/.bashrc),所以找不到全局 npm 或 pm2。
- 正确写法是绝对路径命令,例如:
/www/server/nvm/versions/node/v18.19.1/bin/npm start - 如果项目有
ecosystem.config.js,就填:/www/server/nvm/versions/node/v18.19.1/bin/pm2 start ecosystem.config.js - 「应用名称」必须填写(如
my-api),否则pm2 restart my-api会失效 - 「项目路径」必须是含
package.json的根目录,不是app.js所在子目录;填错会报Cannot find module
为什么进程显示“运行中”,但域名访问返回 502?
因为 Node.js 项目监听的是 localhost:3000,而宝塔网站默认走 Nginx,没配反向代理,请求压根没发到你的 Node 进程。
- 进「网站」→ 点开对应站点 → 「反向代理」→ 添加
- 目标 URL 填:
http://127.0.0.1:3000(端口必须和你代码里app.listen(3000)一致) - 务必关闭「启用缓存」——Node 动态服务开缓存会导致返回旧响应
- 若需真实客户端 IP(比如日志记录或限流),在反向代理配置里追加两行:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
服务器重启后,PM2 进程没自启?
宝塔 PM2 管理器本身不处理系统级开机自启,它只是个 GUI 封装。真正起作用的是 PM2 自带的 startup 和 save 命令,且必须用当前运行项目的用户身份执行。
- 先确认 PM2 是用哪个用户启动的(通常是
www),然后在宝塔终端切换过去:sudo -u www bash - 再执行:
/www/server/nvm/versions/node/v18.19.1/bin/pm2 startup www --hp /home/www(注意--hp指 home path,/home/www是常见路径,按实际调整) - 执行:
/www/server/nvm/versions/node/v18.19.1/bin/pm2 save,保存当前进程列表 - 验证:
sudo reboot后等 1 分钟,再sudo -u www /www/server/nvm/versions/node/v18.19.1/bin/pm2 list查看是否恢复
最容易被忽略的点:所有路径(Node 二进制、npm、pm2、项目目录、用户 home)都必须严格匹配你当前安装的实际版本和用户权限。用 root 身份跑 PM2,但项目文件属主是 www,或者 ecosystem.config.js 里写的 cwd 是相对路径,都会导致守护失败且日志里只显示模糊的 “errored”。











