1- FROM python:3.13-slim-bookworm AS builder
1+ # Stage 1: Builder
2+ FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
23
3- RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
4- tzdata \
5- redis-server \
6- ca-certificates \
7- build-essential \
8- binutils \
9- libproj-dev \
10- gdal-bin \
11- curl \
12- && apt-get clean \
13- && rm -rf /var/lib/apt/lists/*
4+ WORKDIR /app
145
15- RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
16- && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | tee /etc/apt/trusted.gpg.d/pgdg.asc \
17- && apt-get update
6+ ENV UV_COMPILE_BYTECODE=1
187
19- RUN apt-get install -y postgresql-client libpq5 mariadb-client \
20- && apt-get clean \
21- && rm -rf /var/lib/apt/lists/*
8+ COPY pyproject.toml uv.lock ./
229
23- ENV PYTHONUNBUFFERED=1
10+ RUN --mount=type=cache,target=/root/.cache/uv \
11+ uv sync --frozen --no-install-project --no-dev
2412
25- WORKDIR /app/
26- COPY --from=ghcr.io/astral-sh/uv:0.5.4 /uv /uvx /bin/
27- ENV PATH="/app/.venv/bin:$PATH"
28- ENV UV_COMPILE_BYTECODE=1
29- ENV UV_LINK_MODE=copy
13+ COPY . .
3014RUN --mount=type=cache,target=/root/.cache/uv \
31- --mount=type=bind,source=uv.lock,target=uv.lock \
32- --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
33- uv sync --frozen --no-install-project
15+ uv sync --frozen --no-dev
3416
35- ENV PYTHONPATH=/app/src
3617
37- COPY ./pyproject.toml .
38- COPY ./uv.lock .
18+ FROM python:3.13-slim-bookworm AS base
3919
40- COPY ./src /app/src
20+ RUN apt-get update && apt-get install -y --no-install-recommends \
21+ default-mysql-client \
22+ postgresql-client \
23+ redis-server \
24+ procps \
25+ && rm -rf /var/lib/apt/lists/*
4126
42- RUN --mount=type=cache,target=/root/.cache/uv \
43- uv sync --frozen
27+ WORKDIR /app
28+
29+ COPY --from=builder /app/.venv /app/.venv
30+ COPY --from=builder /app /app
31+
32+ ENV PATH="/app/.venv/bin:$PATH" \
33+ PYTHONUNBUFFERED=1 \
34+ PYTHONDONTWRITEBYTECODE=1 \
35+ PYTHONPATH="/app/src"
4436
45- COPY entrypoint.sh /app/entrypoint.sh
4637RUN chmod +x /app/entrypoint.sh
4738
39+ FROM base AS prod
40+ ENTRYPOINT ["/app/entrypoint.sh" ]
41+
42+ FROM base AS development
4843ENTRYPOINT ["/app/entrypoint.sh" ]
0 commit comments