FROM python:3.13.7-slim AS builder # Устанавливаем системные библиотеки для GIS, Postgres, сборки пакетов RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ gdal-bin libgdal-dev \ libproj-dev proj-bin \ libpq-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Устанавливаем uv пакетно-менеджер глобально RUN pip install --no-cache-dir uv # Копируем зависимости COPY pyproject.toml uv.lock ./ # Синхронизируем зависимости (включая prod + dev), чтобы билдить RUN uv sync --locked # Копируем весь код приложения COPY . . # --- рантайм-стадия — минимальный образ для продакшена --- FROM python:3.13.7-slim WORKDIR /app # Устанавливаем только runtime-системные библиотеки RUN apt-get update && apt-get install -y --no-install-recommends \ gdal-bin \ libproj-dev proj-bin \ libpq5 \ postgresql-client \ && rm -rf /var/lib/apt/lists/* # Копируем всё из билдера COPY --from=builder /usr/local/lib/python3.13 /usr/local/lib/python3.13 COPY --from=builder /usr/local/bin /usr/local/bin COPY --from=builder /app /app # Загружаем переменные окружения из .env (см. docker-compose) ENV PYTHONUNBUFFERED=1 \ PATH="/usr/local/bin:$PATH" # Делаем entrypoint.sh исполняемым RUN chmod +x /app/entrypoint.sh EXPOSE 8000 # Используем entrypoint для инициализации (миграции, статика) ENTRYPOINT ["/app/entrypoint.sh"]