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

Ubuntu EC2中Laravel调用Puppeteer无法找到Chrome的问题

解决Laravel Process调用Puppeteer找不到Chrome的问题

针对你在EC2 Ubuntu 22.04环境遇到的问题,核心原因是Laravel Process的运行环境(用户、环境变量)与直接执行node脚本时不一致,以下是具体解决步骤:

1. 显式指定Chrome路径(最直接的解决方案)

在你的Puppeteer脚本中,直接指定Chrome的可执行文件路径,跳过自动检测逻辑:

const puppeteer = require('puppeteer');

(async () => {
  // 硬编码Chrome路径,确保Puppeteer能准确定位
  const browser = await puppeteer.launch({
    executablePath: '/home/ubuntu/.cache/puppeteer/chrome/linux-125.0.6422.78/chrome-linux64/chrome',
    // EC2环境需要添加沙箱禁用参数,避免权限问题
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });

  // 你的业务逻辑代码
  const page = await browser.newPage();
  await page.goto('https://example.com');
  // ...其他操作

  await browser.close();
})();

2. 调整Laravel Process的运行环境

直接执行node脚本时用的是ubuntu用户,但Laravel通常以www-data用户运行(Nginx/Apache默认配置),导致Puppeteer无法访问ubuntu用户缓存目录下的Chrome。可以通过以下两种方式解决:

方式A:设置HOME环境变量

在Laravel调用Process时,强制指定HOME为ubuntu用户的目录,让Puppeteer读取正确的缓存路径:

use Illuminate\Support\Facades\Process;

$process = Process::path('/path/to/your/node/script')
    ->env(['HOME' => '/home/ubuntu'])
    ->run('node puppetter-test.js');

// 查看执行结果
dd($process->output(), $process->errorOutput());

方式B:修改Chrome目录权限

让www-data用户能访问Chrome所在的缓存目录:

# 赋予目录读执行权限
sudo chmod -R 755 /home/ubuntu/.cache/puppeteer/chrome/linux-125.0.6422.78/chrome-linux64
# 更改目录所属用户为www-data
sudo chown -R www-data:www-data /home/ubuntu/.cache/puppeteer

3. 检查并安装Chrome依赖库

Ubuntu环境下运行Chrome可能缺少必要的系统依赖,即使直接执行脚本没问题,Laravel的运行环境可能未加载这些依赖,执行以下命令安装:

sudo apt-get update && sudo apt-get install -y libnss3-dev libatk-bridge2.0-0 libdrm-dev libxkbcommon-dev libgbm-dev libasound-dev libatspi2.0-0 libxshmfence-dev

4. 调试运行环境确认问题

如果以上方法仍未解决,可以先排查Laravel Process的运行用户和环境变量:

use Illuminate\Support\Facades\Process;

// 执行命令查看当前用户和HOME路径
$result = Process::run('whoami && echo $HOME && ls -la /home/ubuntu/.cache/puppeteer/chrome/linux-125.0.6422.78/chrome-linux64');
dd($result->output(), $result->errorOutput());

根据输出结果,可以明确是用户权限问题还是路径访问问题,再针对性调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:19:55