谷歌浏览器在17年自行开发了Chrome Headless特性,并与之同时推出了Puppeteer,可以理解成我们日常使用的Chrome的无界面版本以及对其进行操控的js接口套装,官方介绍参照:https://pptr.dev/。
备注:此环境为支持工作流workflow搭建
#1.配置nodejs环境 [root@master03 ~]# wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz [root@master03 ~]# tar xf node-v12.18.1-linux-x64.tar.xz [root@master03 ~]# mv node-v12.18.1-linux-x64 /usr/local/node [root@master03 ~]# vi /etc/profile ......最后加...... export PATH=$PATH:/usr/local/node/bin [root@master03 ~]# source /etc/profile [root@master03 ~]# cd /usr/local/node/bin [root@master03 bin]# ./node -v #配置软链接 [root@master03 bin]# ln -s /usr/local/node/bin/node /usr/local/bin/ [root@master03 bin]# ln -s /usr/local/node/bin/npm /usr/local/bin/ [root@master03 bin]# cd [root@master03 ~]# node -v #2.安装puppeteer [root@master03 ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org [root@master03 ~]# cnpm i puppeteer ✔ Installed 1 packages ✔ Linked 57 latest versions [1/1] scripts.install puppeteer@latest run "node install.js", root: "/root/node_modules/_puppeteer@11.0.0@puppeteer" Downloading Chromium r901912 - 140.9 Mb [====================] 100% 0.0s Chromium (901912) downloaded to /root/node_modules/_puppeteer@11.0.0@puppeteer/.local-chromium/linux-901912 [1/1] scripts.install puppeteer@latest finished in 53s ✔ Run 1 scripts #3.安装依赖包 [root@master03 ~]# yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y #查看依赖是否完全安装成功(注意,这里使用的是901912版本,如果你的命令执行不成功请查看上面google的版本) [root@master03 ~]# ldd node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux/chrome # 发现未安装依赖,执行命令查看其依赖包:repoquery --nvr --whatprovides xxx.xxx.xx # 安装此依赖: yum install yyy.xxx.zz---------------->这里依赖已经在上面安装好了 #4.编写生成PDF测试文件测试是否能够生成PDF [root@master03 ~]# vim example.js const puppeteer = require('puppeteer'); (async () => { // linux环境一定不能省略下面俩个参数 noSandbox 还有disableSetuidSandbox // 否则会运行失败!!! const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox', ] }); const page = await browser.newPage(); await page.goto('https://example.com'); await page.pdf({ path: 'example.pdf', format: 'a4', scale: 1, printBackground: true, omitBackground: false, displayHeaderFooter: false, margin: {top: '1cm', bottom: '1cm', left: '1.6cm', right: '1.6cm'} }); await browser.close(); })(); [root@master03 ~]# node example.js [root@master03 ~]# ls example.pdf #4.编写生成png测试文件测试是否能够生成png [root@master03 ~]# vim index.js [root@master03 ~]# cat index.js const puppeteer = require('puppeteer'); (async () => { // linux环境一定不能省略下面俩个参数 noSandbox 还有disableSetuidSandbox // 否则会运行失败!!! const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox', ] }); const page = await browser.newPage(); await page.goto('https://www.baidu.com'); await page.screenshot({path: 'example.png'}); await browser.close(); })(); [root@master03 ~]# node example.js [root@master03 ~]# ls example.pdf index.js example.js example.png
1.自己构建镜像(包含java与puppeteer)
2.启动一个容器测试是否能够正常生成PDF
3.将自己的项目打包成镜像
4.因为PDF文件需要前端nginx去请求,这里使用k8s的pv,pvc存储方式做