From bece7ab23b28bc54c6ca464504d093a003daeac7 Mon Sep 17 00:00:00 2001 From: MrKan Date: Tue, 7 Apr 2026 15:35:25 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 8 ++++++++ .env.example | 4 ++++ Dockerfile | 22 ++++++++++++++++++++++ docker-compose.yml | 16 ++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e764889 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.venv/ +.git/ +.idea/ +.pytest_cache/ +.ruff_cache/ +*.md +*.pyc +__pycache__/ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d254cb2 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +PROVIDER_URL=http://localhost:8000/v1 +PROVIDER_API_KEY=your-api-key +PROVIDER_MODEL=gpt-4 +AGENT_API_PATH=../agent_api diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1de3b97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM python:3.14-slim as base + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +FROM base as development + +RUN pip install uv + +COPY pyproject.toml uv.lock ./ +RUN uv sync --frozen --no-install-project + +COPY --from=agent_api . /agent_api/ +RUN uv pip install -e /agent_api/ + +ENV PATH="/app/.venv/bin:$PATH" + +EXPOSE 8000 + +CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a4c9b6c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +services: + agent-dev: + build: + context: . + target: development + additional_contexts: + agent_api: ${AGENT_API_PATH} + volumes: + - ./src:/app/src + - ${AGENT_API_PATH}:/agent-api/ + ports: + - "8000:8000" + env_file: + - .env + profiles: + - dev From 98f51e52101ba308c0703d1ed0b1aeb188df93e9 Mon Sep 17 00:00:00 2001 From: MrKan Date: Tue, 7 Apr 2026 15:43:02 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20production?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 24 ++++++++++++++++++++++++ docker-compose.yml | 12 ++++++++++++ 2 files changed, 36 insertions(+) diff --git a/Dockerfile b/Dockerfile index 1de3b97..05ed09d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,30 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ WORKDIR /app +FROM base as builder + +RUN apt update && apt install git -y +RUN pip install uv + +COPY pyproject.toml uv.lock ./ +RUN uv sync --frozen --no-install-project --no-dev +RUN uv pip install git+https://git.lambda.coredump.ru/platform/agent_api.git + +FROM base as production + +RUN useradd --create-home --shell /bin/bash appuser + +COPY --from=builder /app/.venv /app/.venv +ENV PATH="/app/.venv/bin:$PATH" + +COPY src/ /app/src/ + +USER appuser + +EXPOSE 8000 + +CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"] + FROM base as development RUN pip install uv diff --git a/docker-compose.yml b/docker-compose.yml index a4c9b6c..3fd6ec7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,16 @@ services: + agent: + build: + context: . + target: production + ports: + - "8000:8000" + env_file: + - .env + restart: unless-stopped + profiles: + - production + agent-dev: build: context: . From 6896fce3e860a6b969a32793de2a2ce52572e29c Mon Sep 17 00:00:00 2001 From: MrKan Date: Wed, 8 Apr 2026 00:07:51 +0300 Subject: [PATCH 3/3] make --- .dockerignore | 1 + .env.example | 1 - .mk/inside.mk | 7 +++++++ .mk/outside.mk | 7 +++++++ Dockerfile | 14 ++++++++++---- Makefile | 13 +++++++++++++ docker-compose.yml | 6 ++---- 7 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 .mk/inside.mk create mode 100644 .mk/outside.mk create mode 100644 Makefile diff --git a/.dockerignore b/.dockerignore index e764889..e557a44 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,3 +6,4 @@ *.md *.pyc __pycache__/ +.env diff --git a/.env.example b/.env.example index d254cb2..4332b87 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,3 @@ PROVIDER_URL=http://localhost:8000/v1 PROVIDER_API_KEY=your-api-key PROVIDER_MODEL=gpt-4 -AGENT_API_PATH=../agent_api diff --git a/.mk/inside.mk b/.mk/inside.mk new file mode 100644 index 0000000..a9ddb2f --- /dev/null +++ b/.mk/inside.mk @@ -0,0 +1,7 @@ +.PHONY: uvicorn-dev uvicorn-prod + +uvicorn-dev: + uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload + +uvicorn-prod: + uvicorn src.main:app --host 0.0.0.0 --port 8000 diff --git a/.mk/outside.mk b/.mk/outside.mk new file mode 100644 index 0000000..92dc6c2 --- /dev/null +++ b/.mk/outside.mk @@ -0,0 +1,7 @@ +.PHONY: up-dev up-prod + +up-dev: + docker compose --profile dev up $(ARGS) + +up-prod: + docker compose --profile prod up $(ARGS) diff --git a/Dockerfile b/Dockerfile index 05ed09d..e090658 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,10 +4,11 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 WORKDIR /app +RUN apt update && apt install make -y FROM base as builder -RUN apt update && apt install git -y +RUN apt install git -y RUN pip install uv COPY pyproject.toml uv.lock ./ @@ -22,12 +23,14 @@ COPY --from=builder /app/.venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" COPY src/ /app/src/ +COPY Makefile ./ +COPY .mk/ ./.mk/ USER appuser EXPOSE 8000 -CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"] +CMD ["make", "uvicorn-prod"] FROM base as development @@ -37,10 +40,13 @@ COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-install-project COPY --from=agent_api . /agent_api/ -RUN uv pip install -e /agent_api/ +RUN uv pip install -e /agent_api/ ENV PATH="/app/.venv/bin:$PATH" +COPY Makefile ./ +COPY .mk/ ./.mk/ + EXPOSE 8000 -CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] +CMD ["make", "uvicorn-dev"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d011b17 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +.DEFAULT_GOAL := help + +-include .mk/outside.mk +-include .mk/inside.mk + +help: + @echo "Outside commands:" + @echo " make up-dev - build and run dev container" + @echo " make up-prod - build and run prod container" + @echo "" + @echo "Inside container:" + @echo " make uvicorn-dev - run with hot reload" + @echo " make uvicorn-prod - run production" diff --git a/docker-compose.yml b/docker-compose.yml index 3fd6ec7..32ec3ae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,13 @@ services: agent: - build: - context: . - target: production + image: mrkan0/lambda-agent:latest ports: - "8000:8000" env_file: - .env restart: unless-stopped profiles: - - production + - prod agent-dev: build: