73 lines
1.8 KiB
Docker
73 lines
1.8 KiB
Docker
# ==================== 构建阶段 ====================
|
||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||
WORKDIR /
|
||
|
||
# 复制项目文件并还原依赖
|
||
COPY ["HtmlToPdfService.Api/HtmlToPdfService.Api.csproj", "HtmlToPdfService.Api/"]
|
||
COPY ["HtmlToPdfService.Core/HtmlToPdfService.Core.csproj", "HtmlToPdfService.Core/"]
|
||
RUN dotnet restore "HtmlToPdfService.Api/HtmlToPdfService.Api.csproj"
|
||
|
||
# 复制所有源代码
|
||
COPY . .
|
||
|
||
# 构建和发布应用
|
||
WORKDIR "/HtmlToPdfService.Api"
|
||
RUN dotnet build -c Release -o /app/build
|
||
RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false
|
||
|
||
# 下载 Chromium
|
||
WORKDIR /chromium
|
||
RUN dotnet tool install --global PuppeteerSharp.Downloader || true
|
||
ENV PATH="$PATH:/root/.dotnet/tools"
|
||
RUN puppeteer-sharp-downloader || true
|
||
|
||
# ==================== 运行阶段 ====================
|
||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
|
||
|
||
# 安装 Chromium 运行依赖
|
||
RUN apt-get update && apt-get install -y \
|
||
wget \
|
||
gnupg \
|
||
ca-certificates \
|
||
libnss3 \
|
||
libatk1.0-0 \
|
||
libatk-bridge2.0-0 \
|
||
libcups2 \
|
||
libdrm2 \
|
||
libxkbcommon0 \
|
||
libxcomposite1 \
|
||
libxdamage1 \
|
||
libxfixes3 \
|
||
libxrandr2 \
|
||
libgbm1 \
|
||
libasound2 \
|
||
libpangocairo-1.0-0 \
|
||
libgtk-3-0 \
|
||
libxshmfence1 \
|
||
fonts-liberation \
|
||
fonts-noto-color-emoji \
|
||
fonts-wqy-zenhei \
|
||
fonts-wqy-microhei \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
WORKDIR /app
|
||
|
||
# 复制应用程序
|
||
COPY --from=build /app/publish .
|
||
|
||
# 复制 Chromium(如果成功下载)
|
||
COPY --from=build /root/.local-chromium /root/.local-chromium
|
||
|
||
# 创建 PDF 存储目录
|
||
RUN mkdir -p /app/pdfs && chmod 777 /app/pdfs
|
||
|
||
# 设置环境变量
|
||
ENV ASPNETCORE_URLS=http://+:5000
|
||
ENV ASPNETCORE_ENVIRONMENT=Production
|
||
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
|
||
|
||
EXPOSE 5000
|
||
|
||
ENTRYPOINT ["dotnet", "HtmlToPdfService.Api.dll"]
|
||
|