FROM mcr.microsoft.com/dotnet/aspnet:11.0 AS base
USER root
# LibGit2Sharp 的 SSH 传输会调用外部 ssh,必须安装在最终运行镜像中
# ssh 用 passwd 里的 home 展开 ~(不是 $HOME),需把 uid 1000 的 home 对齐到 /home/app
RUN apt-get update \
    && apt-get install -y --no-install-recommends curl openssh-client \
    && rm -rf /var/lib/apt/lists/* \
    && usermod --home /home/app ubuntu
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:11.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Directory.Build.props", "."]
COPY ["Dpz.Core.Web.Jobs/Dpz.Core.Web.Jobs.csproj", "Dpz.Core.Web.Jobs/"]
COPY ["Dpz.Core.AspNetCore/Dpz.Core.AspNetCore.csproj", "Dpz.Core.AspNetCore/"]
COPY ["Dpz.Core.Entity.Base/Dpz.Core.Entity.Base.csproj", "Dpz.Core.Entity.Base/"]
COPY ["Dpz.Core.EnumLibrary/Dpz.Core.EnumLibrary.csproj", "Dpz.Core.EnumLibrary/"]
COPY ["Dpz.Core.Infrastructure/Dpz.Core.Infrastructure.csproj", "Dpz.Core.Infrastructure/"]
COPY ["Dpz.Core.MessageQueue/Dpz.Core.MessageQueue.csproj", "Dpz.Core.MessageQueue/"]
COPY ["Dpz.Core.Public.ViewModel/Dpz.Core.Public.ViewModel.csproj", "Dpz.Core.Public.ViewModel/"]
COPY ["Dpz.Core.Public.Entity/Dpz.Core.Public.Entity.csproj", "Dpz.Core.Public.Entity/"]
COPY ["Dpz.Core.Service.Mediator/Dpz.Core.Service.Mediator.csproj", "Dpz.Core.Service.Mediator/"]
COPY ["Dpz.Core.MongodbAccess/Dpz.Core.MongodbAccess.csproj", "Dpz.Core.MongodbAccess/"]
COPY ["Dpz.Core.MvcPager/Dpz.Core.Web.Pager.csproj", "Dpz.Core.MvcPager/"]
COPY ["Dpz.Core.Service.ObjectStorage/Dpz.Core.Service.ObjectStorage.csproj", "Dpz.Core.Service.ObjectStorage/"]
COPY ["Dpz.Core.Shard.Service/Dpz.Core.Shard.Service.csproj", "Dpz.Core.Shard.Service/"]
COPY ["Dpz.Core.Service/Dpz.Core.Service.csproj", "Dpz.Core.Service/"]
COPY ["Dpz.Core.SourceGenerator.Attributes/Dpz.Core.SourceGenerator.Attributes.csproj", "Dpz.Core.SourceGenerator.Attributes/"]
COPY ["Dpz.Core.SourceGenerator/Dpz.Core.SourceGenerator.csproj", "Dpz.Core.SourceGenerator/"]
COPY ["Dpz.Core.Backup/Dpz.Core.Backup.csproj", "Dpz.Core.Backup/"]
COPY ["Dpz.Core.Hangfire/Dpz.Core.Hangfire.csproj", "Dpz.Core.Hangfire/"]
COPY ["Dpz.Core.Service.Network/Dpz.Core.Service.Network.csproj", "Dpz.Core.Service.Network/"]
COPY ["Dpz.Core.Service.Mcp/Dpz.Core.Service.Mcp.csproj", "Dpz.Core.Service.Mcp/"]
RUN dotnet restore "Dpz.Core.Web.Jobs/Dpz.Core.Web.Jobs.csproj"
COPY . .
WORKDIR "/src/Dpz.Core.Web.Jobs"
RUN dotnet build "./Dpz.Core.Web.Jobs.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Dpz.Core.Web.Jobs.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
ARG JOBS_UID=1000
ARG JOBS_GID=1000
USER root
WORKDIR /app
COPY --from=publish /app/publish .
# 为配置缓存和持久卷准备可写目录,UID/GID 与宿主机目录所有者保持一致
RUN mkdir -p /app/backup /app/music-sync /app/logs /home/app/.ssh \
    && chown -R ${JOBS_UID}:${JOBS_GID} /app /home/app
ENV HOME=/home/app
USER ${JOBS_UID}:${JOBS_GID}
ENTRYPOINT ["dotnet", "Dpz.Core.Web.Jobs.dll"]
评论加载中...