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
相关产品推荐
相关产品推荐

