这里专门开个帖子用来整理采集遇到的问题

Laravel + Puppeteer是在Windows11上成功了,在ubuntu22.04上没成功过

PHPer 2026-06-15 61 0 0

ubuntu22.04上用单独安装google-chrome-stable这个方案

1.注意目录权限

2.Puppeteer ↔ Chrome 版本对齐

npm ls puppeteer

查看puppeteer版本

然后去https://github.com/puppeteer/puppeteer/releases

查看对应要求的chrome版本

查看已经安装的google-chrome-stable版本

google-chrome-stable --version

另外目录说明

node_modules/

├── puppeteer/ ✅ CLI 工具(npx puppeteer browsers install)

└── puppeteer-core/ ✅ Laravel / Node 代码实际在用

如果错误没在前端显示,查看laravel的日志文件。

另外Linux和Windows上运行的命令是不同的

Linux上是

$cmd = 'HOME=' . escapeshellarg(base_path('.chrome-home'))." {$node_path} {$script} {$id} {$saveDir}{$redirect}";

在项目跟目录下,创建.chrome-home目录

项目根目录创建.chrome-home的命令

标准命令(Ubuntu + 宝塔)

mkdir -p /www/wwwroot/zimu/.chrome-home/.config

chown -R www:www /www/wwwroot/zimu/.chrome-home

chmod -R 755 /www/wwwroot/zimu/.chrome-home

非宝塔 / 原生 Ubuntu

mkdir -p /www/wwwroot/zimu/.chrome-home/.config

chown -R www-data:www-data /www/wwwroot/zimu/.chrome-home

chmod -R 755 /www/wwwroot/zimu/.chrome-home

if(!function_exists('save_douban_poster')){
    function save_douban_poster($douban_movie_id,$node_path)
    {
        $script = base_path('douban-poster.cjs');
        $id = escapeshellarg($douban_movie_id);
        $saveDir = escapeshellarg(public_path('images/videos_poster'));

        if (!is_dir(public_path('images/videos_poster'))) {
            mkdir(public_path('images/videos_poster'), 0755, true);
        }

        // ✅ Windows 需要 < NUL,Linux 绝对不能加 20260615
        $redirect = PHP_OS_FAMI*** === 'Windows' ? ' < NUL 2>&1' : ' 2>&1';
        
        if(PHP_OS_FAMI*** === 'Windows'){
            $cmd = "{$node_path} {$script} {$id} {$saveDir}{$redirect}";
        }else{
            // $cmd = "{$node_path} {$script} {$id} {$saveDir}{$redirect}";
            $cmd = 'HOME=' . escapeshellarg(base_path('.chrome-home'))." {$node_path} {$script} {$id} {$saveDir}{$redirect}";
        }

        $output = shell_exec($cmd);

        if (!$output) {
            \Log::error('Douban poster failed', ['cmd' => $cmd]);
            return null;
        }

        $result = json_decode($output, true);

        if (!$result || empty($result['filename'])) {
            \Log::error('Douban poster parse failed', ['output' => $output]);
            return null;
        }

        return '/images/videos_poster/' . $result['filename'];
    }

}



啊,这个点你补得太关键了 👍

我刚才没区分清楚平台,现在把话彻底说透:

Windows 11 上 npx puppeteer browsers install chrome非常稳
Ubuntu 22.04 + PHP‑FPM + open_basedir + rootless 用户 = 坑集中营

你现在 Ubuntu 上“从来没成功过”,不是 Chrome 没装上,而是环境组合问题


✅ 为什么 Windows 成功,Ubuntu 一直失败?

Windows 11

Ubuntu 22.04

Chrome 安装

✅ 用户目录 ...

立即注册

更新于:2026-06-15 18:40:25
    您需要登录后才可以评论。 立即注册
    相关内容

    使用Laravel 5.4以及后续版本问题总结

    使用Laravel 5.4问题总结 Lost connection to MySQL server at 'reading ...

    Laravel 5.4各种错误提示总结

    laravel10用composer安装时遇到的问题。

    Laravel 执行php artisan migrate报错 SQLSTATE[42000]: Syntax error ...

    Windows10 修改 hosts 拒绝访问如何解决

    Windows操作系统相关内容

    Windows 自带“系统映像备份”(已隐藏) 这个在怎么用

    Motrix启动报错Failed to get 'downloads' path

    Win11输入法变成繁体,修改回来的方法(十分简单)

    Laravel学习

    Laravel 一个 HTTP 请求从进入系统到返回响应的完整旅程

    laravel中执行migrate数据库迁移的Syntax error or access violation: 1071 ...

    Route::inertia('/', 'Welcome')->name('home'); 是什么意思

    laravel13的命令composer run dev,是如何工作的,流程是什么

    laravel13官方方案解决跨域php artisan config:publish cors

    我没有设置teams.show的路由,为什么可以访问对应地址的

    Build a Blog with Laravel 13 + Inertia.js + Vue 3

    laravel项目

    Laravel-Backpack/CRUD,一条命令生成对应模型的后台管理页面

    misterdebug/crud-generator-laravel 生成模型,控制器,视图文件

    后台管理脚手架 filament

    php-panel/laravel-admin

    推荐内容

    真枪实弹,假戏真做,12部具有“实干精神”的电影!

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作