跳转到主内容
极星编程网:以代码为星,赴技术山海!

宝塔面板怎么配置Node.js运行环境_使用PM2管理器进行一键部署

宝塔面板默认不提供Node.js环境,需手动用nvm安装;PM2管理器仅是GUI外壳,依赖已安装的Node.js和package.json中的start脚本;不支持ecosystem.config.js及集群模式;进程异常多因OOM、权限或systemd冲突。 宝塔面板里没有Node.js运行环境选项,得手动安装 宝塔官方应用商店的「Node.js」插件早已下架,当前版本(如 8.0+)默认不提供 Node.js 运行环境。你看到的「PM2管理器」插件只是个可视化外壳,它本身不带 Node.js,也不自动安装 Node.js —— 如果没提前装好 Node.js,点「一键部署」会直接报错
command not found: node
或
pm2: command not found
。 实操建议: 先通过宝塔终端或 SSH 手动安装 Node.js(推荐用
nvm
,方便切换版本):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 18.18.2 nvm use 18.18.2
验证是否生效:
node -v
和
npm -v
必须能正常输出版本号 再全局安装 PM2:
npm install -g pm2
(注意:不要用
--legacy-peer-deps
除非真遇到依赖冲突) 最后再去宝塔软件商店安装「PM2管理器」插件(它只负责读取
~/.pm2
状态并展示进程) PM2管理器「一键部署」只认 package.json 的 start 脚本 点击「一键部署」后,插件实际执行的是
pm2 start npm --name "xxx" -- start
,也就是说它完全依赖项目根目录下的
package.json
中是否有合法的
"scripts": {"start": "..."}
字段。如果写成
"dev"
、
"server"
或直接用
node app.js
启动,它不会识别,部署会卡在「启动中」或报错
npm ERR! missing script: start
。 实操建议: 确保
package.json
里有明确的
start
脚本,例如:
"scripts": { "start": "node ./bin/www" }
路径必须可执行:比如
./bin/www
文件要有可执行权限(
chmod +x ./bin/www
),且首行含
#!/usr/bin/env node
避免在
start
脚本里加
nodemon
或
--watch
参数——PM2 不是开发工具,热重载会干扰守护行为 如果要用特定环境变量(如
NODE_ENV=production
),改用
"start": "NODE_ENV=production node ./app.js"
,别指望插件界面里填的「环境变量」字段能透传给 npm PM2管理器不支持多实例、集群模式或自定义 ecosystem.config.js 宝塔的 PM2 管理器本质是调用
pm2 list
、
pm2 show
、
pm2 restart
等基础命令的 GUI 封装,它不解析也不加载
ecosystem.config.js
,也不能设置
instances
、
exec_mode: 'cluster'
或
watch: true
。你手动写的配置文件,它视而不见;你在界面上点「重启」,它只会按原
start
命令拉起单个进程。 实操建议: 需要集群部署?别依赖界面,SSH 进去手动跑:
pm2 start ecosystem.config.js
想让 PM2 自动加载
ecosystem.config.js
,就别用「一键部署」,改用「添加进程」→「指定脚本」→ 填
ecosystem.config.js
路径(但注意:宝塔插件仍不会读取其中的
apps
配置,只当它是启动入口) 日志查看别只刷宝塔界面:实际日志在
~/.pm2/logs/
下,
pm2 logs
更实时,
pm2 flush
才清缓存 Node.js 进程被杀常见原因:内存超限、用户权限、systemd 冲突 即使部署成功,过几小时发现进程消失,
pm2 status
显示
errored
或
offline
,大概率不是代码问题,而是系统层干预。宝塔运行在 CentOS/Ubuntu 上,常因以下原因静默 kill 掉 Node 进程: Linux OOM Killer 触发:Node 应用内存暴涨(尤其未设
--max-old-space-size
),系统直接干掉高内存进程 —— 查
dmesg -T | grep -i "killed process"
宝塔后台定时任务清理「非宝塔启动」进程:如果你用
pm2 start
手动启的,但没用宝塔插件「添加」,它可能被当成“异常进程”回收 systemd 服务冲突:某些云厂商镜像自带
pm2-root
service,和用户级
pm2
抢资源,
systemctl status pm2-root
可查 宝塔面板升级后重置环境变量:PATH 丢失导致
node
找不到,此时需在
~/.bashrc
补全
export PATH=$HOME/.nvm/versions/node/v18.18.2/bin:$PATH
,再
pm2 startup
重装启动脚本 真正稳定的部署,从来不是点几下鼠标完成的;那些没显式报错的进程消失,往往卡在系统底层和环境变量之间。

相关文章