Node/Express应用使用PM2开启集群部署到Heroku后崩溃问题求助
问题核心原因及解决方案
Heroku的dyno运行机制要求应用主进程必须持续在前台运行,默认pm2 start会把服务放到后台执行,主进程执行完就直接退出,Heroku会判定应用崩溃终止当前dyno,这是你遇到的最常见问题。按以下步骤调整即可:
- 替换启动命令为PM2官方针对PaaS/容器环境提供的前台运行指令
pm2-runtime,不要使用pm2 start:
首先确认你的项目依赖中已经安装pm2:npm install pm2 --save
调整Procfile或者package.json的启动指令为:pm2-runtime build/server/app.js -i max - 检查端口监听配置:Express服务必须监听Heroku分配的
PORT环境变量,不能硬编码端口,写法参考:const port = process.env.PORT || 3000 app.listen(port, () => { console.log(`服务运行在端口${port}`) }) - 若需要更精细化的PM2集群配置,可以在项目根目录添加
ecosystem.config.js配置文件:
对应启动命令调整为:module.exports = { apps: [{ script: 'build/server/app.js', instances: 'max', exec_mode: 'cluster', env_production: { NODE_ENV: 'production' } }] }pm2-runtime ecosystem.config.js --env production - 排查潜在应用问题:先临时把启动命令换成
node build/server/app.js,查看Heroku日志确认不用PM2时应用可以正常启动,排除依赖缺失、环境变量未配置等应用本身的问题。
额外注意:PM2的集群能力仅在单个Heroku dyno内部生效,多dyno的流量分发由Heroku自带的路由层负责,无需额外配置。
内容的提问来源于stack exchange,提问作者SKeney
相关产品推荐
相关产品推荐

