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

Railway部署Puppeteer项目报错:缺失libnss3.so依赖

解决Railway部署Puppeteer时libnss3.so缺失问题

问题背景

本地Windows环境(Node 18.x)运行正常,但将使用Puppeteer的Node.js项目部署到Railway的Linux环境(Node 18.x)时,Chrome启动失败,提示缺少libnss3.so共享库。已尝试添加--no-sandbox参数、降级Node到14.x,问题未解决。

报错信息

/app/indeed-job-scraper/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:241
reject(new Error([
^
Error: Failed to launch the browser process!
/app/indeed-job-scraper/node_modules/puppeteer/.local-chromium/linux-982053/chrome-linux/chrome: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
at onClose (/app/indeed-job-scraper/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:241:20)
at Interface.<anonymous> (/app/indeed-job-scraper/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:231:68)
at Interface.emit (node:events:525:35)
at Interface.close (node:readline:590:8)
at Socket.onend (node:readline:280:10)
at Socket.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1358:12)
at processTicksAndRejections (node:internal/process/task_queues:83:21)

当前使用的Puppeteer代码

let puppeteer     = require('puppeteer-extra');
let StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

let browser = puppeteer.launch({ headless: true });

解决思路

1. 在Railway中安装Chrome依赖库

Railway支持通过NIXPACKS_INSTALL_CMD环境变量自定义系统依赖安装流程:

  • 进入Railway项目的「Variables」设置页面
  • 添加环境变量:
    NIXPACKS_INSTALL_CMD=apt-get update && apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 libxshmfence1
    
    上述命令会安装Chrome在Debian/Ubuntu环境运行所需的全部基础依赖,包含缺失的libnss3。

2. 优化Puppeteer启动配置

除--no-sandbox外,补充更适配Linux环境的启动参数,同时启用新版无头模式:

let browser = puppeteer.launch({
  headless: 'new',
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage', // 解决Linux下/dev/shm空间不足问题
    '--disable-gpu', // 无GPU环境下禁用硬件加速
    '--single-process' // 减少资源占用,适配轻量容器环境
  ]
});

3. 改用puppeteer-core + 系统级Chrome

若前两种方法无效,可切换为puppeteer-core,直接使用Railway环境中通过apt安装的Chrome:

  • 调整依赖包:
    npm uninstall puppeteer
    npm install puppeteer-core
    
  • 修改启动代码,指定系统Chrome路径:
    let browser = puppeteer.launch({
      headless: 'new',
      args: ['--no-sandbox', '--disable-setuid-sandbox'],
      executablePath: '/usr/bin/google-chrome-stable'
    });
    
  • 更新环境变量中的安装命令,添加Chrome安装:
    NIXPACKS_INSTALL_CMD=apt-get update && apt-get install -y google-chrome-stable libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 libxshmfence1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:40:42