由于项目是通过 docker 部署且服务器系统为 ubuntu,且后续项目中需要使用到 puppeteer 这个库,但在后续的使用过程中出现了一些问题,记录一下。但由于解决了,且没有记录下更多的错误信息,只是从搜索引擎中查找搜索记录,找出大致的错误信息
Error: Failed to launch the browser process
出现这个问题,是由于 puppeteer 所依赖的 Chromium 缺少所需要的依赖项。于是首先去官网找解决答案。
puppeteer.png点击进去之后,刚好目录中能看到对应的在 docker 中的问题,传送门
troubleshooting.png因为我们已经使用了镜像,且 docker 是通过 root 用户启动的,所以就只是复制了以下的这段放到 Dockerfile 中
# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work.
RUN apt-get update \
&& apt-get install -y wget gnupg \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
但在执行过程中,下载安装耗时太长了,没执行成功(可能是因为下载字体的原因)。于是切换到了文档中提到的一个 demo 文件
以下是它的完整代码,我也是只取了其中的第二个 RUN
的代码,放到服务器上执行,然后可以成功执行了
FROM node:10
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/*
# Add user so we don't need --no-sandbox.
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser
# Run everything after as non-privileged user.
USER pptruser
unable to open x display
出现这个错误,只需要把 headless
设置成 true 就可以了
- 字体不显示
为了解决第一个问题,采用的 demo 里面的方法,这个里面不包含字体之类的,所以又自己去折腾了,注意改 source-sans-pro.zip
这个名称
# 注意改 source-sans-pro.zip
COPY source-sans-pro.zip /tmp
RUN sed -i 's/deb.debian.org/mirrors.163.com/g' /etc/apt/sources.list && \
apt update && \
apt-get install -y dpkg wget unzip
#fonts-droid fonts-arphic-ukai fonts-arphic-uming
RUN cd /tmp && wget http://ftp.cn.debian.org/debian/pool/main/f/fonts-noto-cjk/fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
dpkg -i fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
unzip source-sans-pro.zip && cd source-sans-pro && mv ./OTF /usr/share/fonts/ && \
fc-cache -f -v
完整版
# 设置 puppeteer 的字体
COPY source-sans-pro.zip /tmp
RUN sed -i 's/deb.debian.org/mirrors.163.com/g' /etc/apt/sources.list && \
apt update && \
apt-get install -y dpkg wget unzip
#fonts-droid fonts-arphic-ukai fonts-arphic-uming
RUN cd /tmp && wget http://ftp.cn.debian.org/debian/pool/main/f/fonts-noto-cjk/fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
dpkg -i fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
unzip source-sans-pro.zip && cd source-sans-pro && mv ./OTF /usr/share/fonts/ && \
fc-cache -f -v
# 2. https://github.com/puppeteer/puppeteer/blob/master/.ci/node10/Dockerfile.linux
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/*
网友评论