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

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

PHPer 2026-06-15 2 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学习

    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

    Windows操作系统相关内容

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

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

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

    使用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 拒绝访问如何解决

    推荐内容

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

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

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

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

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

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

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作