FROM node:22-bookworm-slim AS frontend WORKDIR /build/web COPY web/package*.json ./ RUN npm ci --no-audit --no-fund COPY web/ ./ RUN npm run build FROM mcr.microsoft.com/dotnet/sdk:10.0 AS backend WORKDIR /build COPY Directory.Build.props ./ COPY src/ ./src/ RUN dotnet publish src/GuestOps.Api/GuestOps.Api.csproj -c Release -o /publish/api RUN dotnet publish src/GuestOps.Worker/GuestOps.Worker.csproj -c Release -o /publish/worker FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS api WORKDIR /app RUN mkdir -p /var/lib/guestops/keys && chown -R app:app /var/lib/guestops && chmod 700 /var/lib/guestops/keys COPY --from=backend /publish/api ./ COPY --from=frontend /build/web/dist ./wwwroot/ ENV ASPNETCORE_URLS=http://+:8080 ASPNETCORE_ENVIRONMENT=Production Keys__Path=/var/lib/guestops/keys USER app EXPOSE 8080 ENTRYPOINT ["dotnet", "GuestOps.Api.dll"] FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS worker WORKDIR /app RUN mkdir -p /var/lib/guestops/keys && chown -R app:app /var/lib/guestops && chmod 700 /var/lib/guestops/keys COPY --from=backend /publish/worker ./ ENV DOTNET_ENVIRONMENT=Production Keys__Path=/var/lib/guestops/keys USER app ENTRYPOINT ["dotnet", "GuestOps.Worker.dll"]