docker部署puppeteer|puppeteer render pdf

1,818 阅读2分钟

背景:node做服务端,并做成docker,里面有生成pdf,直接安装puppeteer,不能直接生成puppeteer,在网上找了很多答案,但是总没有成功运行,经过摸索,把实现方式记录下来,方便其他小伙伴参考。

Q1:chrome headless doesn't launch on node-docker?

A1:

puppeteer-docker 官方推荐:
https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md

实际运行速度很慢,也没有运行成功,会有报错,所以按照我们项目依赖的node12,
找到对应版本的Dockerfile,我截取了部分有用代码放到我们的node项目Dockfile中

RUN apt-get update && \
    apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
      libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \
      libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
      libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \
      libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && \
    rm -rf /var/lib/apt/lists/*

Q2: puppeteer生成pdf依赖pdftk工具,所以安装docker-pdftk镜像

A2:

截取部分必须代码

RUN apt-get update \
    && apt-get install -y pdftk mc\
    && apt-get clean autoclean \
    && apt-get autoremove --yes \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && mkdir /input \
    && mkdir /output 

Q3:时区问题处理。系统时间会较北京时间少8小时

A3:

网上找的答案

ENV TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |tzdata

把三个总结到一起就ok了,如下:

ENV TZ=Asia/Shanghai
RUN apt-get update && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
      libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \
      libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
      libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \
      libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget pdftk mc tzdata \
      && apt-get clean autoclean \
      && apt-get autoremove --yes \
      && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

如有不对之处,请多多指正!