/
Al
/
TESamples
Обзор
Документация
Войти
/
Al
/
TESamples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
apps/python/Dockerfile
52 строки
2 KB
Al
Initial Commit
11 май 2026, 17:40
11 май 2026, 17:40
0a04577
Код
Авторство
О чём код?
# ============================================================= # Общий multi-stage Dockerfile для всех Python-модулей. # # Использование (в compose): # build: # context: ./apps/python # args: # MODULE: bff_agent # или chain_service (в snake_case!) # # BuildKit cache mount держит /root/.cache/pip — повторные сборки быстрые. # ============================================================= ARG MODULE # ---------- Build stage ---------- FROM python:3.12-slim AS build ARG MODULE WORKDIR /build # Системные зависимости для сборки cryptography (для PyJWT[crypto] в chain_service). RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential libffi-dev \ && rm -rf /var/lib/apt/lists/* COPY token_exchange_lib /build/token_exchange_lib COPY ${MODULE} /build/${MODULE} # Сначала ставим lib, потом приложение — pip найдёт уже установленную lib. RUN --mount=type=cache,target=/root/.cache/pip \ pip install --upgrade pip && \ pip install /build/token_exchange_lib && \ pip install /build/${MODULE} # ---------- Runtime stage ---------- FROM python:3.12-slim ARG MODULE ENV MODULE_NAME=${MODULE} \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 # Только runtime-зависимости (libffi для cryptography). RUN apt-get update && apt-get install -y --no-install-recommends \ libffi8 \ && rm -rf /var/lib/apt/lists/* COPY --from=build /usr/local/lib/python3.12 /usr/local/lib/python3.12 COPY --from=build /usr/local/bin /usr/local/bin EXPOSE 8080 # Если задан OTEL_EXPORTER_OTLP_ENDPOINT — стартуем под opentelemetry-instrument # (auto-инструментация FastAPI/httpx). Иначе — обычный uvicorn (Phase 4 overlay). ENTRYPOINT ["sh", "-c", "if [ -n \"$OTEL_EXPORTER_OTLP_ENDPOINT\" ]; then exec opentelemetry-instrument uvicorn ${MODULE_NAME}.main:app --host 0.0.0.0 --port 8080 --proxy-headers; else exec uvicorn ${MODULE_NAME}.main:app --host 0.0.0.0 --port 8080 --proxy-headers; fi"]