# telegram-service: gRPC-хост Telegram (план Task 2; Ruling 12 — запись в deploy/compose.dev.yml). # # КОНТЕКСТ СБОРКИ — корень репозитория: Deal.Telegram.csproj ссылается на src/contracts/Deal.Proto.csproj # (общий проект кодогенерации, Task 1) вне каталога сервиса, поэтому нельзя собирать из # src/telegram-service. Запуск из корня: docker build -f src/telegram-service/Deal.Telegram/Dockerfile . # Порт — env GRPC_PORT (Program.cs), в compose.dev.yml задан 5101. # --- Этап сборки: restore + publish --- FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /repo # Restore-слой: только csproj/props (кэш слоёв Docker — restore не повторяется при правке исходников). COPY src/contracts/Deal.Proto.csproj src/contracts/ COPY src/grpc-hosting/Deal.Grpc.Hosting/Deal.Grpc.Hosting.csproj src/grpc-hosting/Deal.Grpc.Hosting/ COPY src/telegram-service/Directory.Build.props src/telegram-service/ COPY src/telegram-service/Deal.Telegram/Deal.Telegram.csproj src/telegram-service/Deal.Telegram/ RUN dotnet restore src/telegram-service/Deal.Telegram/Deal.Telegram.csproj # Исходники: контракты (.proto) + общая gRPC-обвязка + проект сервиса. COPY src/contracts/ src/contracts/ COPY src/grpc-hosting/ src/grpc-hosting/ COPY src/telegram-service/Deal.Telegram/ src/telegram-service/Deal.Telegram/ RUN dotnet publish src/telegram-service/Deal.Telegram/Deal.Telegram.csproj -c Release -o /app/publish # --- Runtime-этап --- FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final WORKDIR /app EXPOSE 5101 COPY --from=build /app/publish . # grpc_health_probe — healthcheck контейнера (Ruling 12): gRPC-health освобождён от service-token # (см. ServiceTokenInterceptor), поэтому проба идёт без metadata. COPY --from=ghcr.io/grpc-ecosystem/grpc-health-probe:v0.4.35 /ko-app/grpc-health-probe /bin/grpc_health_probe # Сессии тенантов — файлы /data/sessions (Ruling 3): каталог монтируется volume-ом deal_tg_sessions # из compose.dev.yml; создаётся при первом сохранении сессии (задачи 9–11). # Non-root: процесс работает пользователем deal (UID 10001); /data/sessions — каталог сессий (volume). RUN useradd --uid 10001 --shell /usr/sbin/nologin --no-create-home deal \ && mkdir -p /data/sessions \ && chown -R deal:deal /data/sessions ENV HOME=/tmp USER deal ENTRYPOINT ["dotnet", "Deal.Telegram.dll"]