# syntax=docker/dockerfile:1.7 ARG DOTNET_VERSION=10.0 ## ## Runtime-Basis ## # MesoAibe.Service ist ein reiner Hintergrunddienst (Generic Host, kein Kestrel/ASP.NET Core) — # das schlankere runtime-Image genuegt, anders als bei MesoArchivWeb/MesoWorkerService. FROM mcr.microsoft.com/dotnet/runtime:${DOTNET_VERSION} AS base LABEL org.opencontainers.image.description="MESO AIBE Service" WORKDIR /app # MESOYEAR-Berechnung und Logzeitstempel haengen an der Systemzeitzone. RUN apt-get update && apt-get install -y --no-install-recommends tzdata \ && ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime \ && dpkg-reconfigure -f noninteractive tzdata \ && apt-get clean && rm -rf /var/lib/apt/lists/* ENV TZ=Europe/Berlin \ DOTNET_RUNNING_IN_CONTAINER=true ## ## Build & Publish ## FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} AS publish WORKDIR /src COPY nuget.config.template ./nuget.config # Nur die csproj-Dateien zuerst kopieren: der Restore-Layer bricht damit ausschliesslich bei # Paketaenderungen, nicht bei jeder Quellcodeaenderung. COPY MesoAibe.Core/MesoAibe.Core.csproj MesoAibe.Core/ COPY MesoAibe.Ingest/MesoAibe.Ingest.csproj MesoAibe.Ingest/ COPY MesoAibe.Service/MesoAibe.Service.csproj MesoAibe.Service/ # GITHUBUSERNAME/-PASSWORD (privater NuGet-Feed, MesoXPO.Business-DevEx26.1) und # DevExpress_License ausschliesslich als BuildKit-Secrets — nie als --build-arg, sonst # landen sie in der Image-/Cache-Historie. RUN --mount=type=cache,target=/root/.nuget/packages \ --mount=type=secret,id=GITHUBUSERNAME \ --mount=type=secret,id=GITHUBPASSWORD \ --mount=type=secret,id=DevExpress_License \ bash -lc '\ export GITHUBUSERNAME="$(cat /run/secrets/GITHUBUSERNAME)"; \ export GITHUBPASSWORD="$(cat /run/secrets/GITHUBPASSWORD)"; \ export DevExpress_License="$(cat /run/secrets/DevExpress_License)"; \ dotnet restore MesoAibe.Service/MesoAibe.Service.csproj --nologo' COPY MesoAibe.Core/ MesoAibe.Core/ COPY MesoAibe.Ingest/ MesoAibe.Ingest/ COPY MesoAibe.Service/ MesoAibe.Service/ WORKDIR /src/MesoAibe.Service RUN --mount=type=cache,target=/root/.nuget/packages \ --mount=type=secret,id=DevExpress_License \ bash -lc '\ export DevExpress_License="$(cat /run/secrets/DevExpress_License)"; \ dotnet publish MesoAibe.Service.csproj -c Release -o /app/publish --no-restore --nologo' ## ## Final ## FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # Nicht-root wie in MesoArchivWeb/MesoWorkerService: das Dienstkonto braucht nur Schreibrechte # auf /app (Log-, Berichts- und Import-XML-Ordner sind hier standardmaessig relativ). RUN mkdir -p /app/logs && chown -R app:app /app USER app ENTRYPOINT ["dotnet", "MesoAibe.Service.dll"]