#3 Контейнеризация и базовый деплой #4

Merged
mrkan merged 3 commits from #3-docker into main 2026-04-07 21:44:43 +00:00
7 changed files with 117 additions and 0 deletions

9
.dockerignore Normal file
View file

@ -0,0 +1,9 @@
.venv/
.git/
.idea/
.pytest_cache/
.ruff_cache/
*.md
*.pyc
__pycache__/
.env

3
.env.example Normal file
View file

@ -0,0 +1,3 @@
PROVIDER_URL=http://localhost:8000/v1
PROVIDER_API_KEY=your-api-key
PROVIDER_MODEL=gpt-4

7
.mk/inside.mk Normal file
View file

@ -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

7
.mk/outside.mk Normal file
View file

@ -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)

52
Dockerfile Normal file
View file

@ -0,0 +1,52 @@
FROM python:3.14-slim as base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
WORKDIR /app
RUN apt update && apt install make -y
FROM base as builder
RUN 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/
COPY Makefile ./
COPY .mk/ ./.mk/
USER appuser
EXPOSE 8000
CMD ["make", "uvicorn-prod"]
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"
COPY Makefile ./
COPY .mk/ ./.mk/
EXPOSE 8000
CMD ["make", "uvicorn-dev"]

13
Makefile Normal file
View file

@ -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"

26
docker-compose.yml Normal file
View file

@ -0,0 +1,26 @@
services:
agent:
image: mrkan0/lambda-agent:latest
ports:
- "8000:8000"
env_file:
- .env
restart: unless-stopped
profiles:
- prod
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