You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的设置也会导致运行异常。

关键修复步骤:

  1. 修正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,
    });
    
  2. 清理重复的事件监听代码
    你代码里重复定义了两次client.on('qr')事件,会导致逻辑冲突,建议保留一个版本即可,比如保留API接口返回QR码的逻辑:

    client.on('qr', qr => {
      console.log('QR RECEIVED', qr);
      app.get('/getqr', (req, res, next) => {
        res.send({ qr });
      });
    });
    
  3. 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及以上),避免版本兼容问题。

为什么之前的方案无效?

  • 你独立创建的browser实例是用于自定义网页渲染的,和whatsapp-web.js内部启动的浏览器完全无关,所以该配置无法解决核心崩溃问题。
  • sudo sysctl -w kernel.unprivileged_userns_clone=1命令在Heroku容器环境中无法执行——你没有root权限,且平台默认不允许修改内核参数。

按照上述步骤修改后重新部署,应该就能解决沙箱崩溃的问题了。

内容的提问来源于stack exchange,提问作者gatwirival

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:08:09