|
1 | 1 | # Builder container (with UV as package manager)
|
2 |
| -FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim@sha256:525eb0972b68435ca35014cf975e368b1a6cdd48fb0b5836866518b89863ca4c AS builder |
| 2 | +FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim@sha256:525eb0972b68435ca35014cf975e368b1a6cdd48fb0b5836866518b89863ca4c AS build |
3 | 3 |
|
4 |
| -ENV UV_COMPILE_BYTECODE=1 |
5 |
| -ENV UV_LINK_MODE=copy |
6 |
| - |
7 |
| -RUN rm -f /etc/apt/apt.conf.d/docker-clean \ |
8 |
| - && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache |
| 4 | +# UV build dependencies |
9 | 5 | RUN --mount=target=/var/lib/apt/lists,type=cache,id=apt-lists-${TARGETPLATFORM},sharing=locked \
|
10 |
| - apt-get update -q \ |
11 |
| - && apt-get install -y -q --no-install-recommends \ |
| 6 | + apt-get update \ |
| 7 | + && apt-get install -y --no-install-recommends \ |
12 | 8 | build-essential
|
13 | 9 |
|
| 10 | +# Copy project definitions |
14 | 11 | WORKDIR /app
|
| 12 | +COPY pyproject.toml uv.lock ./ |
15 | 13 |
|
16 |
| -COPY . . |
17 |
| - |
| 14 | +# Install Python dependencies |
| 15 | +ENV UV_COMPILE_BYTECODE=1 |
| 16 | +ENV UV_LINK_MODE=copy |
18 | 17 | RUN --mount=target=/root/.cache/uv,type=cache,id=uv-${TARGETPLATFORM},sharing=locked \
|
19 | 18 | uv sync --frozen --no-dev
|
20 | 19 |
|
21 | 20 | # Output container (with only venv and app source)
|
22 | 21 | FROM python:3.13-slim-bookworm@sha256:ae9f9ac89467077ed1efefb6d9042132d28134ba201b2820227d46c9effd3174
|
23 | 22 |
|
| 23 | +# Set default dir |
24 | 24 | WORKDIR /app
|
25 | 25 |
|
26 |
| -ENV PATH=/app/.venv/bin:$PATH |
27 |
| - |
28 |
| -COPY --from=builder --chown=app:app /app . |
| 26 | +# Copy sources and venv |
| 27 | +COPY . . |
| 28 | +COPY --from=build /app/.venv /app/.venv |
| 29 | +ENV PATH="/app/.venv/bin:${PATH}" |
29 | 30 |
|
| 31 | +# Allow app to know its version |
30 | 32 | ARG VERSION
|
31 | 33 | ENV VERSION=${VERSION}
|
32 | 34 |
|
33 |
| -CMD ["bash", "-c", "gunicorn app.main:api --bind 0.0.0.0:8080 --graceful-timeout 60 --proxy-protocol --timeout 60 --worker-class uvicorn.workers.UvicornWorker --workers 4"] |
| 35 | +# Starting the backend |
| 36 | +CMD gunicorn app.main:api --bind 0.0.0.0:8080 --graceful-timeout 60 --proxy-protocol --timeout 60 --worker-class uvicorn.workers.UvicornWorker --workers 4 |
0 commit comments