84 lines
2.3 KiB
Docker
84 lines
2.3 KiB
Docker
# Stage 0: GPU Base image
|
|
FROM nvidia/cuda:12.6.0-devel-ubuntu22.04 AS base-gpu
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV PATH="/root/.local/bin:$PATH"
|
|
|
|
# Install system dependencies (libgl and libglib are required for OpenCV)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
curl \
|
|
git \
|
|
libgl1 \
|
|
libglib2.0-0 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install uv
|
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
|
|
# --- vLLM Server Stage ---
|
|
FROM base-gpu AS vllm-server
|
|
WORKDIR /app
|
|
|
|
# Install project dependencies
|
|
COPY pyproject.toml uv.lock ./
|
|
RUN uv python pin 3.12 && uv sync --frozen --no-dev
|
|
|
|
# Install prebuilt flash-attention wheel
|
|
ARG FLASH_ATTN_WHEEL=https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.3.14/flash_attn-2.8.2+cu128torch2.8-cp312-cp312-linux_x86_64.whl
|
|
RUN uv pip install --python .venv "${FLASH_ATTN_WHEEL}"
|
|
|
|
COPY . /app
|
|
RUN chmod +x /app/scripts/serve.sh
|
|
|
|
EXPOSE 8118
|
|
CMD ["./scripts/serve.sh"]
|
|
|
|
# --- Pipeline API Stage ---
|
|
FROM base-gpu AS pipeline-api
|
|
WORKDIR /app
|
|
|
|
# Build paddlepaddle and paddlex virtual env
|
|
RUN uv venv .venv-api --python 3.12
|
|
RUN uv pip install --python .venv-api paddlepaddle-gpu -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
|
|
RUN uv pip install --python .venv-api "paddleocr[doc-parser]>=3.3.0"
|
|
RUN uv pip install --python .venv-api "aiohttp>=3.9" "filetype>=1.2" "fastapi>=0.110" "starlette>=0.36" "uvicorn>=0.16" "ultralytics>=8.0"
|
|
|
|
COPY . /app
|
|
RUN chmod +x /app/scripts/serve-pipeline.sh
|
|
|
|
EXPOSE 8090
|
|
CMD ["./scripts/serve-pipeline.sh"]
|
|
|
|
# --- Gradio UI Stage ---
|
|
FROM python:3.12-slim AS gradio-ui
|
|
WORKDIR /app/PaddleOCR-VL-1.6_Online_Demo
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY PaddleOCR-VL-1.6_Online_Demo/requirements.txt ./
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY PaddleOCR-VL-1.6_Online_Demo ./
|
|
|
|
EXPOSE 7870
|
|
|
|
ENV GRADIO_SERVER_NAME="0.0.0.0"
|
|
ENV GRADIO_SERVER_PORT="7870"
|
|
|
|
CMD ["python", "app.py"]
|
|
|
|
# --- Next.js Web App Stage ---
|
|
FROM node:20-slim AS pfm-web-app
|
|
WORKDIR /app
|
|
COPY pfm-web-app/package.json pfm-web-app/package-lock.json ./
|
|
ENV PUPPETEER_SKIP_DOWNLOAD=true
|
|
RUN npm ci
|
|
COPY pfm-web-app/ ./
|
|
ENV NODE_ENV=production
|
|
RUN npm run build
|
|
EXPOSE 3000
|
|
CMD ["npm", "start"]
|
|
|