57 lines
1.1 KiB
Docker
57 lines
1.1 KiB
Docker
FROM python:3.11-slim-bookworm AS base
|
|
|
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1 \
|
|
UV_COMPILE_BYTECODE=1 \
|
|
UV_LINK_MODE=copy \
|
|
UV_PYTHON_DOWNLOADS=never \
|
|
UV_PROJECT_ENVIRONMENT=/app/.venv
|
|
|
|
WORKDIR /app
|
|
|
|
RUN groupadd -r appgroup && useradd -r -g appgroup -m appuser
|
|
|
|
# Install uv binary.
|
|
COPY --from=ghcr.io/astral-sh/uv:0.7.2 /uv /uvx /usr/local/bin/
|
|
|
|
|
|
FROM base AS builder
|
|
|
|
ARG INSTALL_DEV=false
|
|
|
|
COPY pyproject.toml uv.lock ./
|
|
|
|
RUN if [ "${INSTALL_DEV}" = "true" ]; then \
|
|
uv sync --frozen --no-install-project --dev; \
|
|
else \
|
|
uv sync --frozen --no-install-project; \
|
|
fi
|
|
|
|
|
|
FROM base AS runtime-base
|
|
|
|
COPY --from=builder /app/.venv /app/.venv
|
|
COPY src/ ./src/
|
|
COPY docker/scripts/ ./docker/scripts/
|
|
|
|
RUN mkdir -p logs media staticfiles input src/static \
|
|
&& chmod +x /app/docker/scripts/*.sh \
|
|
&& chown -R appuser:appgroup /app
|
|
|
|
ENV PATH="/app/.venv/bin:${PATH}" \
|
|
PYTHONPATH=/app/src
|
|
|
|
USER appuser
|
|
ENTRYPOINT ["/app/docker/scripts/entrypoint.sh"]
|
|
|
|
|
|
FROM runtime-base AS runtime-web
|
|
|
|
EXPOSE 8000
|
|
CMD ["web"]
|
|
|
|
|
|
FROM runtime-base AS runtime-celery
|
|
|
|
CMD ["celery-worker"]
|