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: