gendesign/backend/Dockerfile
lekss361 621d56c064 fix
2026-04-27 18:12:57 +03:00

89 lines
2.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# syntax=docker/dockerfile:1.7
# ---- builder ----
FROM python:3.12-slim AS builder
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
libgdal-dev \
libproj-dev \
libgeos-dev \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir uv
WORKDIR /app
COPY pyproject.toml uv.lock* ./
RUN if [ -f uv.lock ]; then uv sync --frozen --no-dev; else uv sync --no-dev; fi
COPY app ./app
COPY alembic.ini ./
COPY alembic ./alembic
# ---- runner ----
FROM python:3.12-slim AS runner
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PATH="/app/.venv/bin:$PATH"
# Runtime libs only — no -dev / no build-essential.
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq5 \
libgdal36 \
libproj25 \
libgeos-c1t64 \
libcairo2 \
libpango-1.0-0 \
libpangoft2-1.0-0 \
fonts-dejavu-core \
curl \
# Chromium runtime libs for Playwright (отдельно вместо --with-deps, чтобы apt-lists
# были доступны до самой команды playwright install).
libnss3 \
libnspr4 \
libdbus-1-3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrandr2 \
libgbm1 \
libasound2t64 \
libatspi2.0-0 \
&& useradd --create-home --uid 1000 app
WORKDIR /app
COPY --from=builder --chown=app:app /app/.venv /app/.venv
COPY --from=builder --chown=app:app /app/app /app/app
COPY --from=builder --chown=app:app /app/alembic.ini /app/alembic.ini
COPY --from=builder --chown=app:app /app/alembic /app/alembic
# Playwright Chromium binary (~150 MB) — устанавливаем под root, кладём в общую
# директорию, чтобы и app-user мог использовать. Без --with-deps: системные
# библиотеки уже поставлены apt-get выше, а --with-deps требует apt-lists
# которые мы тут же чистим в одной команде ради размера слоя.
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/playwright
RUN mkdir -p $PLAYWRIGHT_BROWSERS_PATH \
&& /app/.venv/bin/playwright install chromium \
&& chmod -R a+rX $PLAYWRIGHT_BROWSERS_PATH \
&& rm -rf /var/lib/apt/lists/*
USER app
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]