Heroku部署WhatsApp-api项目时Puppeteer出现FATAL:zygote_host_impl_linux.cc(117)] No usable sandbox!错误的解决求助
解决Heroku部署WhatsApp API时的沙箱崩溃问题
你遇到的核心问题是**whatsapp-web.js内部启动的Chromium实例未配置沙箱禁用参数**——之前你只给独立创建的puppeteer.launch()加了参数,但这不会影响Client实例自带的浏览器配置。另外,Heroku无图形界面环境,headless: false的设置也会导致运行异常。
关键修复步骤:
修正
Client的puppeteer核心配置
将Client初始化代码更新为适配Heroku的无头模式+沙箱禁用配置,同时补充内存优化参数:const client = new Client({ puppeteer: { headless: true, // Heroku必须使用无头模式 args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', // 解决Heroku临时内存分区过小问题 '--disable-gpu', // 禁用GPU适配无图形环境 '--window-size=1920x1080' // 避免视口尺寸异常 ] }, session: sessionCfg, });清理重复的事件监听代码
你代码里重复定义了两次client.on('qr')事件,会导致逻辑冲突,建议保留一个版本即可,比如保留API接口返回QR码的逻辑:client.on('qr', qr => { console.log('QR RECEIVED', qr); app.get('/getqr', (req, res, next) => { res.send({ qr }); }); });Heroku环境额外适配
- 持久化Session数据:Heroku文件系统是临时的,
session.json会在dyno重启后丢失,建议改用Redis存储session(whatsapp-web.js支持直接从Redis读写session)。 - 添加专用Buildpack:在Heroku项目中添加
puppeteer专用buildpack(https://github.com/jontewks/puppeteer-heroku-buildpack.git),确保Chromium依赖正确安装。 - 指定Node版本:在
package.json或.nvmrc中明确Node.js版本(推荐16.x及以上),避免版本兼容问题。
- 持久化Session数据:Heroku文件系统是临时的,
为什么之前的方案无效?
- 你独立创建的
browser实例是用于自定义网页渲染的,和whatsapp-web.js内部启动的浏览器完全无关,所以该配置无法解决核心崩溃问题。 sudo sysctl -w kernel.unprivileged_userns_clone=1命令在Heroku容器环境中无法执行——你没有root权限,且平台默认不允许修改内核参数。
按照上述步骤修改后重新部署,应该就能解决沙箱崩溃的问题了。
内容的提问来源于stack exchange,提问作者gatwirival
相关产品推荐
相关产品推荐

