Add deployment files
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# Build context MUST be the repo root:
|
||||
# docker build -f VigilCareRecordsAPI/Dockerfile -t vigilcare-records-api .
|
||||
# Single-project solution today, but keeping the repo-root context matches the
|
||||
# CI/CD guide's convention and avoids a context change if a shared library is
|
||||
# ever extracted alongside VigilCareRecordsAPI.Tests.
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
WORKDIR /src
|
||||
|
||||
# Restore first with only the project file so the NuGet layer caches
|
||||
# independently of source changes.
|
||||
COPY VigilCareRecordsAPI/VigilCareRecordsAPI.csproj VigilCareRecordsAPI/
|
||||
RUN dotnet restore VigilCareRecordsAPI/VigilCareRecordsAPI.csproj
|
||||
|
||||
COPY VigilCareRecordsAPI/ VigilCareRecordsAPI/
|
||||
RUN dotnet publish VigilCareRecordsAPI/VigilCareRecordsAPI.csproj \
|
||||
-c Release -o /app/publish --no-restore
|
||||
|
||||
# Dev appsettings.json ships with placeholder secrets (Jwt:Secret, Minio:SecretKey).
|
||||
# Blank them so a misconfigured production deploy fails fast instead of running
|
||||
# with a known, publicly-committed secret.
|
||||
RUN sed -i \
|
||||
-e 's/"Secret": "[^"]*"/"Secret": ""/' \
|
||||
-e 's/"SecretKey": "[^"]*"/"SecretKey": ""/' \
|
||||
/app/publish/appsettings.json
|
||||
|
||||
# ---- optional target: EF migration bundle, built and extracted by the CD
|
||||
# migrate job (docker build --target migrate + docker cp). Never shipped in the
|
||||
# runtime image below. ----
|
||||
FROM build AS migrate
|
||||
RUN dotnet tool install --global dotnet-ef --version 8.*
|
||||
ENV PATH="$PATH:/root/.dotnet/tools"
|
||||
RUN dotnet ef migrations bundle \
|
||||
--project VigilCareRecordsAPI/VigilCareRecordsAPI.csproj \
|
||||
--self-contained -r linux-x64 \
|
||||
--output /out/migrate-api
|
||||
|
||||
# ---- runtime ----
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=build /app/publish .
|
||||
|
||||
RUN useradd --uid 1654 --user-group --no-create-home appuser \
|
||||
&& chown -R appuser:appuser /app
|
||||
USER appuser
|
||||
|
||||
ENV ASPNETCORE_URLS=http://+:8080
|
||||
EXPOSE 8080
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
||||
CMD curl -fsS http://localhost:8080/health/live || exit 1
|
||||
|
||||
ENTRYPOINT ["dotnet", "VigilCareRecordsAPI.dll"]
|
||||
Reference in New Issue
Block a user