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

Netlify部署后Serverless函数启动浏览器进程失败求助

解决Netlify Serverless函数启动Chromium缺失依赖问题

问题根源

Netlify的Node.js运行环境默认未预装Chromium(或基于它的Puppeteer)所需的系统依赖库,比如libnss3.so这类浏览器核心组件,导致浏览器进程启动失败。

修复步骤

1. 通过netlify.toml安装系统依赖

在项目根目录创建/更新netlify.toml,配置预构建脚本安装缺失依赖,同时指定Puppeteer使用系统Chromium:

[build]
  # 预构建命令:更新源并安装Chromium及依赖
  command = "apt-get update && apt-get install -y chromium-browser libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2"

[build.environment]
  # 跳过Puppeteer自带Chromium下载,使用系统版本
  PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "true"
  PUPPETEER_EXECUTABLE_PATH = "/usr/bin/chromium-browser"

[functions]
  node_bundler = "esbuild"

2. 调整Puppeteer启动配置

在results.js中,配置Puppeteer使用无沙箱模式(适配Serverless环境),并指定系统Chromium路径:

const puppeteer = require('puppeteer');

exports.handler = async (event) => {
  try {
    const browser = await puppeteer.launch({
      executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage', // 解决Serverless环境内存限制问题
        '--single-process'
      ]
    });

    // 你的业务逻辑:打开页面、抓取数据等
    const page = await browser.newPage();
    // ...

    await browser.close();
    return {
      statusCode: 200,
      body: JSON.stringify({ success: true, data: /* 你的数据 */ })
    };
  } catch (err) {
    return {
      statusCode: 500,
      body: JSON.stringify({ error: err.message })
    };
  }
};

3. 补充缺失依赖(若仍报错)

如果还有其他依赖缺失,把对应的库名添加到apt-get install的列表中,常见的Chromium依赖都已包含在上述命令里,但可根据具体报错补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:22