zerocodebreengine / Dockerfile.backend
zombee11's picture
Upload 39 files
af8cc55 verified
Raw
History Blame Contribute Delete
2.93 kB
# ==============================================================
# OPTIM AI BRE Engine — Backend Dockerfile
# .NET 8 multi-stage production build
# ==============================================================
ARG PROJECT=OptimAI.BRE.Gateway
# ---- STAGE 1: RESTORE ----------------------------------------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS restore
ARG PROJECT
WORKDIR /src
COPY ["OptimAI.BRE.Shared/OptimAI.BRE.Shared.csproj", "OptimAI.BRE.Shared/"]
COPY ["OptimAI.BRE.RuleEngine/OptimAI.BRE.RuleEngine.csproj", "OptimAI.BRE.RuleEngine/"]
COPY ["OptimAI.BRE.RuleDesigner/OptimAI.BRE.RuleDesigner.csproj","OptimAI.BRE.RuleDesigner/"]
COPY ["OptimAI.BRE.AIEngine/OptimAI.BRE.AIEngine.csproj", "OptimAI.BRE.AIEngine/"]
COPY ["OptimAI.BRE.ClientMgmt/OptimAI.BRE.ClientMgmt.csproj", "OptimAI.BRE.ClientMgmt/"]
COPY ["OptimAI.BRE.AuditService/OptimAI.BRE.AuditService.csproj","OptimAI.BRE.AuditService/"]
COPY ["OptimAI.BRE.ReportService/OptimAI.BRE.ReportService.csproj","OptimAI.BRE.ReportService/"]
COPY ["OptimAI.BRE.IdentityService/OptimAI.BRE.IdentityService.csproj","OptimAI.BRE.IdentityService/"]
COPY ["OptimAI.BRE.Gateway/OptimAI.BRE.Gateway.csproj", "OptimAI.BRE.Gateway/"]
COPY ["OptimAI.BRE.sln", "./"]
RUN dotnet restore "OptimAI.BRE.Gateway/OptimAI.BRE.Gateway.csproj" \
--runtime linux-x64
# ---- STAGE 2: BUILD ------------------------------------------
FROM restore AS build
ARG PROJECT
COPY . .
RUN dotnet build "${PROJECT}/${PROJECT}.csproj" \
-c Release \
--no-restore \
--runtime linux-x64 \
--self-contained false \
-o /app/build
# ---- STAGE 3: PUBLISH ----------------------------------------
FROM build AS publish
ARG PROJECT
RUN dotnet publish "${PROJECT}/${PROJECT}.csproj" \
-c Release \
--no-restore \
--runtime linux-x64 \
--self-contained false \
/p:UseAppHost=false \
-o /app/publish
# ---- STAGE 4: RUNTIME ----------------------------------------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS runtime
# Install curl + tz data (for healthcheck and IST timezone)
RUN apk add --no-cache curl tzdata && \
cp /usr/share/zoneinfo/Asia/Kolkata /etc/localtime && \
echo "Asia/Kolkata" > /etc/timezone && \
apk del tzdata
# Non-root security
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --from=publish --chown=appuser:appgroup /app/publish .
# Persistent log directory
RUN mkdir -p /app/logs /app/reports && \
chown -R appuser:appgroup /app/logs /app/reports
USER appuser
ENV ASPNETCORE_URLS=http://+:8080 \
ASPNETCORE_ENVIRONMENT=Production \
DOTNET_RUNNING_IN_CONTAINER=true \
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false \
TZ=Asia/Kolkata
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=5 \
CMD curl -f http://localhost:8080/health || exit 1
ENTRYPOINT ["dotnet", "OptimAI.BRE.Gateway.dll"]