AWS EC2部署Node.js Puppeteer报libgbm.so.1共享库加载错误
问题根源
该报错产生的核心原因是Puppeteer内置捆绑的Chromium浏览器运行所需的Linux系统依赖不全。MacOS本地环境默认预装了Chromium需要的图形类依赖包,但AWS EC2的Linux实例默认不会安装这类非服务端必要的组件,你缺失的libgbm.so.1是mesa图形库的组件,属于Chromium运行的强制依赖。
修复步骤
根据你EC2使用的操作系统类型,执行对应命令安装依赖即可:
- Debian/Ubuntu/Amazon Linux 2023 系统
- 首先更新包索引:
sudo apt update - 一键安装Chromium全量依赖:
sudo apt install -y libgbm-dev libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
- 首先更新包索引:
- Amazon Linux 2 系统
执行以下命令安装依赖:sudo amazon-linux-extras install epel -y sudo yum install -y mesa-libGBM libXcomposite libXcursor libXdamage libXext libXi libXtst libXrandr alsa-lib atk at-spi2-atk cairo cups-libs dbus-libs expat fontconfig freetype glibc gdk-pixbuf2 gtk3 libX11 libXcb libXfixes libXrender libXScrnSaver nspr nss pango libappindicator-gtk3 liberation-fonts - 可选优化方案
如果你不想每次部署都安装大量系统依赖,可以直接在EC2上先预装Chromium,再在Puppeteer启动配置中指定使用系统自带的Chromium,避免Puppeteer自动下载的二进制包依赖缺失,配置示例:const browser = await puppeteer.launch({ // 系统Chromium的安装路径,不同发行版路径可能有差异,可以用which chromium-browser查询 executablePath: '/usr/bin/chromium-browser', // 无GUI的服务器环境必须添加这两个启动参数 args: ['--no-sandbox', '--disable-setuid-sandbox'] });
验证方法
依赖安装完成后重启Node.js服务,触发抓取路由即可验证是否修复。如果仍然有同类依赖缺失报错,可以执行ldd 你的Puppeteer下载的Chrome二进制文件路径 | grep not命令快速定位所有缺失的依赖,对应安装对应包即可。
内容的提问来源于stack exchange,提问作者ImFarhad
相关产品推荐
相关产品推荐

