diff --git a/server/MiAssessment/src/MiAssessment.Admin/Dockerfile b/server/MiAssessment/src/MiAssessment.Admin/Dockerfile index 1838e1d..7d53df7 100644 --- a/server/MiAssessment/src/MiAssessment.Admin/Dockerfile +++ b/server/MiAssessment/src/MiAssessment.Admin/Dockerfile @@ -1,8 +1,53 @@ -# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。 +# 学业邑规划 - 后台管理系统 Docker 构建文件 +# 包含前端构建和后端构建两个阶段 -# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时 -FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS base -# Install SkiaSharp native dependencies +# ==================== 阶段1: 构建前端 ==================== +FROM node:20-alpine AS frontend-build +WORKDIR /app/admin-web + +# 复制前端项目文件 +COPY src/MiAssessment.Admin/admin-web/package*.json ./ + +# 安装依赖 +RUN npm ci --registry=https://registry.npmmirror.com + +# 复制前端源码 +COPY src/MiAssessment.Admin/admin-web/ ./ + +# 构建前端 +RUN npm run build + +# ==================== 阶段2: 构建后端 ==================== +FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS backend-build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src + +# 复制项目文件 +COPY src/MiAssessment.Admin/MiAssessment.Admin.csproj src/MiAssessment.Admin/ +COPY src/MiAssessment.Admin.Business/MiAssessment.Admin.Business.csproj src/MiAssessment.Admin.Business/ +COPY src/MiAssessment.Model/MiAssessment.Model.csproj src/MiAssessment.Model/ +COPY src/MiAssessment.Core/MiAssessment.Core.csproj src/MiAssessment.Core/ +COPY src/MiAssessment.Infrastructure/MiAssessment.Infrastructure.csproj src/MiAssessment.Infrastructure/ + +# 还原依赖 +RUN dotnet restore src/MiAssessment.Admin/MiAssessment.Admin.csproj + +# 复制所有源码 +COPY src/ src/ + +# 构建后端 +WORKDIR /src/src/MiAssessment.Admin +RUN dotnet build MiAssessment.Admin.csproj -c $BUILD_CONFIGURATION -o /app/build + +# ==================== 阶段3: 发布后端 ==================== +FROM backend-build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish MiAssessment.Admin.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +# ==================== 阶段4: 最终运行镜像 ==================== +FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS final + +# 安装 SkiaSharp 原生依赖(用于验证码生成等图形处理) RUN apt-get update && apt-get install -y \ libfontconfig1 \ libfreetype6 \ @@ -12,33 +57,16 @@ RUN apt-get update && apt-get install -y \ libc6-dev \ libgdiplus \ && rm -rf /var/lib/apt/lists/* + USER $APP_UID WORKDIR /app EXPOSE 8080 EXPOSE 8081 - -# 此阶段用于生成服务项目 -FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build -ARG BUILD_CONFIGURATION=Release -WORKDIR /src -COPY ["src/HoneyBox.Admin/HoneyBox.Admin.csproj", "src/HoneyBox.Admin/"] -COPY ["src/HoneyBox.Admin.Business/HoneyBox.Admin.Business.csproj", "src/HoneyBox.Admin.Business/"] -COPY ["src/HoneyBox.Model/HoneyBox.Model.csproj", "src/HoneyBox.Model/"] -COPY ["src/HoneyBox.Core/HoneyBox.Core.csproj", "src/HoneyBox.Core/"] -COPY ["src/HoneyBox.Infrastructure/HoneyBox.Infrastructure.csproj", "src/HoneyBox.Infrastructure/"] -RUN dotnet restore "./src/HoneyBox.Admin/HoneyBox.Admin.csproj" -COPY . . -WORKDIR "/src/src/HoneyBox.Admin" -RUN dotnet build "./HoneyBox.Admin.csproj" -c $BUILD_CONFIGURATION -o /app/build - -# 此阶段用于发布要复制到最终阶段的服务项目 -FROM build AS publish -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "./HoneyBox.Admin.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false - -# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值) -FROM base AS final -WORKDIR /app +# 复制后端发布文件 COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "HoneyBox.Admin.dll"] \ No newline at end of file + +# 复制前端构建产物到 wwwroot +COPY --from=frontend-build /app/admin-web/dist ./wwwroot + +ENTRYPOINT ["dotnet", "MiAssessment.Admin.dll"] diff --git a/server/MiAssessment/src/MiAssessment.Api/Dockerfile b/server/MiAssessment/src/MiAssessment.Api/Dockerfile index 43a639d..70c0387 100644 --- a/server/MiAssessment/src/MiAssessment.Api/Dockerfile +++ b/server/MiAssessment/src/MiAssessment.Api/Dockerfile @@ -1,32 +1,39 @@ -# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。 +# 学业邑规划 - 小程序 API 服务 Docker 构建文件 -# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时 +# ==================== 阶段1: 基础运行环境 ==================== FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS base USER $APP_UID WORKDIR /app EXPOSE 8080 - -# 此阶段用于生成服务项目 +# ==================== 阶段2: 构建后端 ==================== FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src -COPY ["src/HoneyBox.Api/HoneyBox.Api.csproj", "src/HoneyBox.Api/"] -COPY ["src/HoneyBox.Model/HoneyBox.Model.csproj", "src/HoneyBox.Model/"] -COPY ["src/HoneyBox.Core/HoneyBox.Core.csproj", "src/HoneyBox.Core/"] -COPY ["src/HoneyBox.Infrastructure/HoneyBox.Infrastructure.csproj", "src/HoneyBox.Infrastructure/"] -RUN dotnet restore "./src/HoneyBox.Api/HoneyBox.Api.csproj" -COPY . . -WORKDIR "/src/src/HoneyBox.Api" -RUN dotnet build "./HoneyBox.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build -# 此阶段用于发布要复制到最终阶段的服务项目 +# 复制项目文件 +COPY src/MiAssessment.Api/MiAssessment.Api.csproj src/MiAssessment.Api/ +COPY src/MiAssessment.Model/MiAssessment.Model.csproj src/MiAssessment.Model/ +COPY src/MiAssessment.Core/MiAssessment.Core.csproj src/MiAssessment.Core/ +COPY src/MiAssessment.Infrastructure/MiAssessment.Infrastructure.csproj src/MiAssessment.Infrastructure/ + +# 还原依赖 +RUN dotnet restore src/MiAssessment.Api/MiAssessment.Api.csproj + +# 复制所有源码 +COPY src/ src/ + +# 构建后端 +WORKDIR /src/src/MiAssessment.Api +RUN dotnet build MiAssessment.Api.csproj -c $BUILD_CONFIGURATION -o /app/build + +# ==================== 阶段3: 发布 ==================== FROM build AS publish ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "./HoneyBox.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +RUN dotnet publish MiAssessment.Api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false -# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值) +# ==================== 阶段4: 最终运行镜像 ==================== FROM base AS final WORKDIR /app COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "HoneyBox.Api.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "MiAssessment.Api.dll"]