From 08c366bf02ebb0a0b90b1f113cd4f2a49bdae13e Mon Sep 17 00:00:00 2001 From: ShavrinAleksei Date: Mon, 29 Dec 2025 14:49:33 +0000 Subject: [PATCH 1/2] chore: add dockerfile --- Dockerfile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7da45e0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# Базовый образ +FROM python:3.14.2-slim-trixie AS base +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + UV_PROJECT_ENVIRONMENT=/app/.venv \ + PATH="/app/.venv/bin:$PATH" +WORKDIR /app + +# Бинарь uv из официального образа Astral +FROM ghcr.io/astral-sh/uv:0.9.18 AS uvbin + +# Сборщик зависимостей/приложения +FROM base AS builder + +# Можно переключать набор зависимостей: +# - prod: "--no-dev" (по умолчанию) +# - dev: "--group dev" +ARG UV_SYNC_ARGS="--no-dev" + +COPY --from=uvbin /uv /usr/local/bin/uv + +# Если появятся зависимости с нативными расширениями — добавьте нужные build deps здесь. +# RUN apt-get update && apt-get install -y --no-install-recommends build-essential && rm -rf /var/lib/apt/lists/* + +COPY pyproject.toml ./ +COPY uv.lock ./ +COPY README.md ./ + +# 1) Ставим только зависимости без самого проекта +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync ${UV_SYNC_ARGS} --no-install-project --frozen + +# 2) Кладём исходники +COPY src ./src + +# 3) Ставим проект и, при необходимости, dev-группы +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync ${UV_SYNC_ARGS} --frozen + +# Рантайм-образ +FROM base AS runtime +COPY --from=builder /app /app + +# По умолчанию, но в compose мы обычно переопределяем command и порт +EXPOSE 8000 +CMD ["granian", "--host", "0.0.0.0", "--port", "8000", "--interface", "asgi", "--factory", "app.interface.http.asgi:create_asgi_application"] From 80dad92f9b2d0741a49a415ddf05b826d48ed6f4 Mon Sep 17 00:00:00 2001 From: ShavrinAleksei Date: Mon, 29 Dec 2025 14:50:01 +0000 Subject: [PATCH 2/2] chore: add docker-compose file --- docker-compose.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docker-compose.yaml diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..88658be --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,18 @@ +services: + app: + build: + context: . + target: runtime + args: + UV_SYNC_ARGS: "--no-dev" + env_file: + - .env + ports: + - "${APP_PORT:-8000}:${APP_PORT:-8000}" + command: > + granian + --host=0.0.0.0 + --port=${APP_PORT:-8000} + --interface=asgi + --factory + app.interface.http.asgi:create_asgi_application