3bea327043
PR Checks / test-and-build (pull_request) Successful in 8m53s
- Web: add /health endpoint with PostgreSQL readiness check (returns 200+JSON or 503) - Web: add /alive endpoint for liveness probe - Bot: add BotHealthCheckHostedService serving /health on port 8081 via HttpListener - Bot: expose port 8081 in Dockerfile and install wget for healthcheck - compose.yaml: add healthcheck sections for bot and web services - tests: add TDD tests for both health endpoints Bump version -> 1.16.0 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
46 lines
1.7 KiB
Docker
46 lines
1.7 KiB
Docker
# Этап 1: Сборка с использованием .NET SDK
|
|
FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build
|
|
|
|
# Установка зависимостей для Native AOT-компиляции (clang и zlib)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
clang zlib1g-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Целевая архитектура для сборки (пробрасывается из Docker/Compose)
|
|
ARG TARGETARCH
|
|
|
|
WORKDIR /src
|
|
|
|
# Копирование проектов
|
|
COPY ["src/GmRelay.Bot/GmRelay.Bot.csproj", "src/GmRelay.Bot/"]
|
|
COPY ["src/GmRelay.ServiceDefaults/GmRelay.ServiceDefaults.csproj", "src/GmRelay.ServiceDefaults/"]
|
|
|
|
# Восстановление зависимостей с учетом архитектуры
|
|
RUN dotnet restore "src/GmRelay.Bot/GmRelay.Bot.csproj" -a $TARGETARCH
|
|
|
|
# Копирование остального исходного кода
|
|
COPY src/ src/
|
|
|
|
WORKDIR /src/src/GmRelay.Bot
|
|
|
|
# Публикация AOT-бинарного файла
|
|
RUN dotnet publish "GmRelay.Bot.csproj" -c Release -a $TARGETARCH -o /app/publish
|
|
|
|
# Этап 2: Runtime (runtime-deps содержит только ОС-зависимости, без .NET Runtime)
|
|
FROM mcr.microsoft.com/dotnet/runtime-deps:10.0-noble AS final
|
|
WORKDIR /app
|
|
|
|
# Устанавливаем wget для healthcheck
|
|
RUN apt-get update && apt-get install -y --no-install-recommends wget \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Копируем только AOT-результаты из билда
|
|
COPY --from=build /app/publish .
|
|
|
|
EXPOSE 8081
|
|
|
|
USER $APP_UID
|
|
|
|
# Запуск скомпилированного AOT бинарного файла напрямую
|
|
ENTRYPOINT ["./GmRelay.Bot"]
|