Centos7 部署 Puppeteer 服务
文章目录
之前的文章中介绍了「“木偶”浏览器简简史」,文中介绍了 Google 的 Puppetter,这一篇介绍下如何在 Centos7 环境下部署 Puppeteer 服务环境。
上一篇文章的示例代码的环境是我本地的 MacOS,但实际在服务器上运行时,会出现问题,这也是我写这篇文章的原因。
MacOS 环境
安装
通过 NPM 安装:npm install puppetter
Puppeteer 包安装完成后会执行 node install.js
,将最新版本的 Chromium 下载到 node_module
目录的 puppetter
目录下。
安装完成就可以直接调用了。
CentOS 7
CentOS 下如果使用上述的方式安装,安装时没问题,但真实调用时,会出现 Chromium 缺少依赖项的报错,通过安装以下依赖可以解决。
1 | 依赖库 |
解决了依赖问题,我们继续,调用截图,发现中文乱码,机器上没有对应的中文字体,需要安装中文字体,可以通过安装以下字体解决。
1 | 字体 |
不过这些字体显示仍然非常“粗糙”,不过还好能正常显示。
问题 & 解决
通过上面的层层努力,我们终于艰难地把项目部署到了 CentOS 上,现在整理下过程中的问题。
问题一:Chromium 包太大 & Chromium 依赖
不论是 MacOS 环境还是 CentOS 下,Chromium 69 的包的 Size 大概 100M左右,安装过程可能因为网络问题失败,并且每次重新构建都需要重复这个过程,这种项目部署方式是非常糟糕,并且还需要在环境中解决依赖问题。
当然,可以选择使用增加 ignore-scripts
参数忽略安装时的脚本执行,安装结束后手动安装,
npm install --ignore-scripts
但这可能会影响到同一个项目中其他依赖的安装,耦合不是我们希望看到的,不过上一篇提到,Puppeteer 从 1.7
版本后,单独出了 puppetter-core
, 选择直接安装 puppetter-core
将不会安装浏览器。
不过两种方案都需要手动安装 Chromium,这反而让过程变得更复杂,我们的原则是能使用 auto 模式绝不用 manual 模式。
解决一:系统安装 Chrome & 选用puppeteer-core
先说结论,选择 系统安装 Chrome(version >= 68) + puppetter-core
方案
解决手动安装以及避免依赖问题,选择将 Chrome 安装在系统全局中,通过 rpm 安装方式如下:
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
调用时,传入 Chrome 安装的可执行路径即可,例如 CentOS,const browser = await puppeteer.launch({executablePath: '/usr/bin/google-chrome'})
解决二:字体
字体推荐在系统中安装微软雅黑等字体。
作者: leeon
来源: https://leeon.im
链接: https://leeon.im/deply-puppeteer-on-production/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可