AWS EC2 ARM64(Amazon Linux 2)环境下Puppeteer安装失败求助
在AWS Beanstalk ARM64实例(Amazon Linux 2)上安装Puppeteer 19.2.2的解决方案
问题背景
在由Beanstalk管理的AWS EC2 ARM64实例(c7g.2xlarge机型,Amazon Linux 2系统,Node.js v14)中安装puppeteer ^19.2.2时,遇到两个核心问题:
- 已设置
PUPPETEER_SKIP_DOWNLOAD=TRUE,但安装过程仍自动尝试下载Chromium,最终因ARM64架构无对应二进制文件失败 - 手动尝试安装Chromium的多种方式均未成功
尝试过的无效方案
- 通过
amazon-linux-extras安装Chromium:无对应ARM64仓库 - 使用第三方脚本安装Chrome:不支持ARM64架构
- 切换至x86实例类型:所在AWS区域不支持该类型实例
- 编译Chromium:当前环境资源及复杂度不适用
- 改用Firefox Nightly:运行失败
解决方案
Update 1:解决Puppeteer安装问题
将PUPPETEER_SKIP_DOWNLOAD配置移至项目根目录的.npmrc文件,并改为小写格式:
puppeteer_skip_download=true
此配置成功阻止了Puppeteer安装时的Chromium自动下载流程,完成了Puppeteer本身的安装,但Chromium仍无法手动部署。
Update 2:改用Firefox替代Chromium(最终可行方案)
通过以下步骤实现Firefox与Puppeteer的配合运行:
配置Beanstalk自动安装Firefox
在项目根目录创建.ebextensions文件夹,新建puppeteer.config文件,内容如下:commands: install_firefox: command: sudo amazon-linux-extras install epel -y && sudo amazon-linux-extras install firefox该配置会在Beanstalk部署实例时自动完成Firefox的安装。
修改Puppeteer启动配置
在代码中区分生产环境(Beanstalk)和本地开发环境,指定对应的浏览器可执行路径及产品类型:const puppeteer = require('puppeteer'); const options = { headless: true, }; if (process.env.NODE_ENV === 'production') { // Beanstalk生产环境配置 options.executablePath = '/usr/bin/firefox'; options.product = 'firefox'; } else { // 本地Mac开发环境配置 options.executablePath = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; } const browser = await puppeteer.launch(options); // 后续Puppeteer业务代码关键注意事项
- 请勿使用
await page.emulateMediaType('screen');,该方法在Firefox环境下会执行失败。
- 请勿使用
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

