• PuppeteerSharp Docker 中运行报错解决方案


    PuppeteerSharp Docker 中运行报错解决方案

    前言

    有一个.NET6的Webapi项目,使用到了PuppeteerSharp这个库。

    但是在部署到Docker镜像中时遇到了一堆报错,下面总结下解决办法

    1.启动慢问题

    Puppeteer在第一次启动时会检测目录下是否有谷歌浏览器.local-chromium文件夹,如果没有则会自动到网上拉取。

    拉取地址为:https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/884014/chrome-linux.zip

    这个下载是比较耗时的,我自己的服务器大概要10分钟才能下载完成。如果下载超时nginx则会返回504 Gateway Time-out。

    解决办法一、

    增加nginx反向代理超时时间

    主要就是下面两句配置

    将反向代理读写超时设置为1000秒

    proxy_read_timeout 1000;

    proxy_connect_timeout 1000;

    server {
                listen 端口号;
                server_name 您的域名;
                proxy_read_timeout 1000;
                proxy_connect_timeout 1000;
                location / {
                      proxy_pass http://127.0.0.1:8222;
                      proxy_set_header Host $host;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_cache_bypass $http_upgrade;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }
          }
    
    

    解决办法二、

    手动下载 https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/884014/chrome-linux.zip

    并解压下载好的文件,构建如下目录结构

    .local-chromium\Linux-884014\chrome-linux

    最后将.local-chromium上传到Docker容器里

    2.权限问题

    An error occurred trying to start process '/app/.local-chromium/Linux-884014/chrome-linux/chrome' with working directory '/app'. Permission denied

    在Docker容器中执行命令

    chmod 777 /app/.local-chromium/Linux-884014/chrome-linux/chrome
    

    3.各种依赖库不存在问题

    在Docker容器中执行命令

    apt-get install libnss3-dev -y && apt-get install libatk1.0-0 -y && apt-get install libatk-bridge2.0-0 libgtk-3.0 -y &&  apt-get install libgbm-dev -y && apt-get install libasound2 -y && apt-get install libglu1 -y && apt-get install libaio1 libaio-dev -y && apt-get install -y libgdiplus -y
    

    4.Dockerfile全自动实现

    首先需要先将.local-chromium.zip上传到cos上。

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    EXPOSE 5000
    
    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["DocApi.Web.Entry/DocApi.Web.Entry.csproj", "DocApi.Web.Entry/"]
    COPY ["DocApi.Web.Core/DocApi.Web.Core.csproj", "DocApi.Web.Core/"]
    COPY ["DocApi.StaticFile/DocApi.StaticFile.csproj", "DocApi.StaticFile/"]
    COPY ["DocApi.Application/DocApi.Application.csproj", "DocApi.Application/"]
    COPY ["DocApi.Core/DocApi.Core.csproj", "DocApi.Core/"]
    COPY ["projects/html2openxml/src/Html2OpenXml/HtmlToOpenXml.csproj", "projects/html2openxml/src/Html2OpenXml/"]
    RUN dotnet restore "DocApi.Web.Entry/DocApi.Web.Entry.csproj"
    COPY . .
    WORKDIR "/src/DocApi.Web.Entry"
    RUN dotnet build "DocApi.Web.Entry.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "DocApi.Web.Entry.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    # 设置时区上海
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo 'Asia/Shanghai' >/etc/timezone
    # 清空apt源文件
    RUN echo > /etc/apt/sources.list
    # apt修改为国内源
    RUN echo  'deb http://mirrors.ustc.edu.cn/debian buster main contrib non-free \ndeb http://mirrors.ustc.edu.cn/debian buster-backports main contrib non-free \ndeb http://mirrors.ustc.edu.cn/debian buster-proposed-updates main contrib non-free \ndeb http://mirrors.ustc.edu.cn/debian-security buster/updates main contrib non-free' >> /etc/apt/sources.list 
    # 清空apt缓存
    RUN apt-get clean
    RUN cat /etc/apt/sources.list
    # 更新系统
    RUN apt-get update
    # 安装PuppeteerSharp依赖的库
    RUN apt-get install libnss3-dev -y && apt-get install libatk1.0-0 -y && apt-get install libatk-bridge2.0-0 libgtk-3.0 -y &&  apt-get install libgbm-dev -y && apt-get install libasound2 -y && apt-get install libglu1 -y && apt-get install libaio1 libaio-dev -y && apt-get install -y libgdiplus -y && apt-get install unzip -y && apt-get install wget -y
    # 从Cos下载
    RUN wget -O .local-chromium.zip "https://您的cos文件地址"
    # 解压缩
    RUN unzip .local-chromium.zip
    # 删除.local-chromium.zip
    RUN rm -rf .local-chromium.zip
    # 设置权限
    RUN chmod 777 /app/.local-chromium/Linux-884014/chrome-linux/chrome
    ENTRYPOINT ["dotnet", "DocApi.Web.Entry.dll"]
    
  • 相关阅读:
    在360工作的这几天
    ISBN号码
    poj 3667 Hotel
    命令模式之2 Invoker Vs. Client
    vehicle time series data analysis
    JSON之三:获取JSON文本并解释(以google的天气API为例)
    创建型模式--工厂方法模式
    OpenStack Heat总结之:Icehouse中通过Heat+Ceilometer实现Autoscaling
    MyEclipse10 中增加svn插件
    activitie用户手册
  • 原文地址:https://www.cnblogs.com/fuhua/p/15817379.html
Copyright © 2020-2023  润新知