Ubuntu 20.04服务器上Playwright项目无法运行求助
问题分析
核心报错是Failed to install browsers, exit code: 134,exit code 134通常意味着进程因信号终止(SIGABRT)或内存不足退出,结合Playwright Java在生产环境的部署场景,大概率是系统依赖缺失、浏览器安装权限/网络问题,或是资源配额不足导致的。
解决方案
1. 补全生产环境无头浏览器依赖
Playwright的无头浏览器(如Chromium)依赖系统底层库,极简生产环境往往缺少这些组件,直接导致安装/启动失败:
- Debian/Ubuntu系统执行:
apt-get update && apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 libgtk-3-0 - CentOS/RHEL系统执行:
yum install -y atk cups-libs gtk3 libXcomposite libXcursor libXdamage libXext libXi libXrandr libXScrnSaver libXtst pango at-spi2-atk libXt alsa-lib libdrm mesa-libgbm
2. 提前预安装浏览器,规避运行时自动安装风险
生产环境常存在网络限制、权限不足,导致Playwright首次启动时自动下载浏览器失败,建议在构建/本地阶段完成安装:
- Maven项目执行:
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="install chromium" - Gradle项目执行:
gradle run --args="install chromium" - 部署时将预安装的浏览器目录(默认在
~/.cache/ms-playwright)同步到生产环境,或通过环境变量指定路径:export PLAYWRIGHT_BROWSERS_PATH=/opt/preinstalled-playwright-browsers
3. 调整权限与内存配额
- 检查运行服务的用户是否有写入权限到默认缓存目录,可在代码中指定有权限的目录:
Playwright.create(new Playwright.CreateOptions().setEnv(Map.of("PLAYWRIGHT_BROWSERS_PATH", "/opt/playwright-browsers"))); - 排查生产环境容器/宿主机的内存限制,浏览器启动需要一定内存配额,exit code 134也可能是内存不足导致的进程终止,尝试调高内存分配。
4. 禁用自动浏览器安装(预安装后)
代码中显式跳过自动安装流程,避免运行时触发不必要的安装操作:
Playwright.create(new Playwright.CreateOptions().setSkipInstallBrowsers(true));
5. 修正NGINX配置小问题(非直接诱因,但建议修复)
你的NGINX配置中server_name末尾缺少分号,虽不直接导致Playwright报错,但可能引发NGINX启动异常,修正后:
server_name my-url.website.com;
内容的提问来源于stack exchange,提问作者Immutable
相关产品推荐
相关产品推荐

