1
0

Added entrypoint, changed Dockerfile to multi-target variant

This commit is contained in:
2026-03-30 16:30:51 +00:00
parent 8837ebe470
commit c1ef3a75b9
3 changed files with 78 additions and 5 deletions

View File

@@ -1,18 +1,41 @@
FROM python:3.12-slim
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
UV_LINK_MODE=copy
UV_LINK_MODE=copy \
PYTHONPATH=/app/src
WORKDIR /app
RUN pip install --no-cache-dir uv
COPY pyproject.toml ./
RUN uv sync --no-install-project
COPY pyproject.toml uv.lock ./
FROM base AS local_test
RUN uv sync --all-groups --no-install-project
COPY src ./src
COPY tests ./tests
COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
EXPOSE 8000
CMD ["uv", "run", "uvicorn", "comment_automation.main:app", "--app-dir", "src", "--host", "0.0.0.0", "--port", "8000"]
ENTRYPOINT ["./entrypoint.sh"]
CMD ["http"]
FROM base AS production
RUN uv sync --no-dev --no-install-project
COPY src ./src
COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
EXPOSE 8000
ENTRYPOINT ["./entrypoint.sh"]
CMD ["http"]

View File

@@ -56,3 +56,29 @@ uv run celery -A comment_automation.celery_app:celery_app worker --loglevel=info
Without uv (venv already created):
./.venv/bin/celery -A comment_automation.celery_app:celery_app worker --loglevel=info
## Docker targets and entrypoint modes
The container uses entrypoint.sh and supports two main modes:
- http: starts the FastAPI app.
- celery: starts the Celery worker.
Build local/test target (installs all dependency groups):
docker build --target local_test -t comment-automation:local .
Build production target (installs only non-dev dependencies):
docker build --target production -t comment-automation:prod .
Run HTTP app (default mode):
docker run --rm -p 8000:8000 comment-automation:prod
Run Celery worker mode:
docker run --rm \
-e CELERY_BROKER_URL=redis://host.docker.internal:6379/0 \
-e CELERY_RESULT_BACKEND=redis://host.docker.internal:6379/0 \
comment-automation:prod celery

24
entrypoint.sh Normal file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
set -eu
mode="${1:-http}"
case "$mode" in
http)
shift || true
exec uv run uvicorn comment_automation.main:app \
--app-dir src \
--host 0.0.0.0 \
--port 8000 \
"$@"
;;
celery)
shift || true
exec uv run celery -A comment_automation.celery_app:celery_app worker \
--loglevel "${CELERY_LOG_LEVEL:-info}" \
"$@"
;;
*)
exec "$@"
;;
esac