04ff72097b
CI / backend (push) Successful in 50s
CI / frontend (push) Successful in 11s
CI / format (push) Successful in 49s
CI / db-tests (push) Successful in 52s
Deploy Staging / deploy (push) Successful in 24s
CI / backend (pull_request) Successful in 53s
CI / frontend (pull_request) Successful in 12s
CI / format (pull_request) Successful in 52s
CI / db-tests (pull_request) Successful in 53s
Security / secrets (push) Successful in 4s
Security / dependencies (push) Successful in 59s
Security / sast (push) Successful in 37s
Security / secrets (pull_request) Successful in 3s
Security / dependencies (pull_request) Successful in 53s
Security / sast (pull_request) Successful in 34s
37 lines
1.6 KiB
Docker
37 lines
1.6 KiB
Docker
# Multi-stage build for the ASP.NET Core API.
|
|
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
|
WORKDIR /src
|
|
|
|
# Copy solution + project files first for layer-cached restore.
|
|
COPY Directory.Build.props ./
|
|
COPY src/InboxIntel.Domain/InboxIntel.Domain.csproj src/InboxIntel.Domain/
|
|
COPY src/InboxIntel.Application/InboxIntel.Application.csproj src/InboxIntel.Application/
|
|
COPY src/InboxIntel.Infrastructure/InboxIntel.Infrastructure.csproj src/InboxIntel.Infrastructure/
|
|
COPY src/InboxIntel.Api/InboxIntel.Api.csproj src/InboxIntel.Api/
|
|
RUN dotnet restore src/InboxIntel.Api/InboxIntel.Api.csproj
|
|
|
|
COPY src/ src/
|
|
RUN dotnet publish src/InboxIntel.Api/InboxIntel.Api.csproj -c Release -o /app/publish /p:UseAppHost=false
|
|
|
|
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
|
|
WORKDIR /app
|
|
|
|
# The slim aspnet:10.0 image dropped libgssapi_krb5, which Npgsql tries to load during
|
|
# connection negotiation ("Cannot load library libgssapi_krb5.so.2"). Harmless for password
|
|
# auth but noisy and a latent failure on some paths — install the Kerberos runtime lib.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends libgssapi-krb5-2 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=build /app/publish .
|
|
|
|
# V-12: run as the non-root 'app' user shipped in the .NET 8 images. Pre-create the
|
|
# DataProtection key directory owned by that user so the (initially empty) 'keys'
|
|
# volume inherits app ownership on first mount and key persistence still works.
|
|
# NOTE: an EXISTING root-owned keys volume must be recreated for this to take effect.
|
|
RUN mkdir -p /keys && chown -R app:app /keys /app
|
|
USER app
|
|
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["dotnet", "InboxIntel.Api.dll"]
|