ARG DOTNET_VERSION=10.0 ARG NODE_VERSION=20 FROM node:${NODE_VERSION}-alpine AS admin-ui WORKDIR /ui COPY DorkNet.Server/admin-ui/package.json DorkNet.Server/admin-ui/package-lock.json* ./ RUN npm install --no-fund --no-audit --loglevel=error COPY DorkNet.Server/admin-ui/ ./ RUN mkdir -p /wwwroot/admin \ && npm run build FROM node:${NODE_VERSION}-alpine AS site WORKDIR /ui COPY DorkNet.Server/site/package.json DorkNet.Server/site/package-lock.json* ./ RUN npm install --no-fund --no-audit --loglevel=error COPY DorkNet.Server/site/ ./ RUN mkdir -p /wwwroot/site \ && npm run build FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} AS build ARG PROJECT_PATH WORKDIR /src COPY . . COPY --from=admin-ui /wwwroot/admin/ DorkNet.Server/wwwroot/admin/ COPY --from=site /wwwroot/site/ DorkNet.Server/wwwroot/site/ RUN dotnet publish "${PROJECT_PATH}" -c Release \ -p:SkipAdminUIBuild=true \ -p:DorkNetServiceContainerPublish=true \ -o /app/publish FROM mcr.microsoft.com/dotnet/aspnet:${DOTNET_VERSION} AS runtime ARG APP_DLL WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* USER app COPY --from=build --chown=app:app /app/publish . ENV ASPNETCORE_ENVIRONMENT=Production \ ASPNETCORE_URLS=http://0.0.0.0:8080 \ DOTNET_RUNNING_IN_CONTAINER=true \ DOTNET_PRINT_TELEMETRY_MESSAGE=false \ APP_DLL=${APP_DLL} EXPOSE 8080 HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \ CMD curl --fail --silent http://localhost:8080/healthz || exit 1 ENTRYPOINT ["sh", "-c", "dotnet \"$APP_DLL\""]