# 多阶段构建:先编译前端,再打包后端 + 前端 + Nginx # 第一阶段:编译前端 FROM node:20-alpine AS frontend WORKDIR /web # 仅复制 package.json 以利用缓存 COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install --no-audit --no-fund COPY frontend/ ./ RUN npm run build # 第二阶段:发布 .NET 后端 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS backend WORKDIR /src COPY backend/*.csproj ./ RUN dotnet restore COPY backend/ ./ RUN dotnet publish -c Release -o /app /p:UseAppHost=false # 第三阶段:运行时镜像(Nginx + .NET) FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime WORKDIR /app COPY --from=backend /app ./ # 把前端构建产物复制到后端的 wwwroot COPY --from=frontend /web/dist ./wwwroot ENV ASPNETCORE_URLS=http://+:8080 ENV ASPNETCORE_ENVIRONMENT=Production EXPOSE 8080 ENTRYPOINT ["dotnet", "MyHomePage.Api.dll"]