document-pii-redactor / Dockerfile
deploy
Deploy from 81eae33
649ee03
Raw
History Blame Contribute Delete
1.92 kB
# document-pii-redactor — single container running text + visual PII redaction,
# plus the React demo UI (web/), served by the same FastAPI process.
#
# Base image ships torch + CUDA so the same image runs on GPU (if --gpus is
# passed) or CPU. Tesseract (text OCR) and libGL/glib (opencv used by ultralytics)
# are installed as system deps.
#
# Build: docker build -t document-pii-redactor .
# Run (GPU): docker run --gpus all -p 7860:7860 document-pii-redactor
# Run (CPU): docker run -e EKA_PII_DEVICE=cpu -p 7860:7860 document-pii-redactor
#
# The API + UI listen on :7860 (HF Spaces' conventional Docker port). Models
# are pulled from the Hugging Face repo on first start (set EKA_PII_HF_REPO;
# mount a HF cache volume to avoid re-downloading).
FROM node:20-slim AS web-builder
WORKDIR /web
COPY web/package.json web/package-lock.json ./
RUN npm ci
COPY web/ ./
RUN npm run build
# transformers>=5.0 (required by pyproject.toml) imports torch APIs
# (torch.distributed.tensor.DTensor, torch.float8_e8m0fnu) that don't exist
# before torch ~2.9; pinned to 2.12.0 to match the version verified working
# in local dev.
FROM pytorch/pytorch:2.12.0-cuda12.6-cudnn9-runtime
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
HF_HOME=/root/.cache/huggingface
RUN apt-get update && apt-get install -y --no-install-recommends \
tesseract-ocr \
libgl1 \
libglib2.0-0 \
fonts-dejavu-core \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . /app
COPY --from=web-builder /web/dist /app/web/dist
# Install the package + the API server extra. --break-system-packages: this
# base image's Python is externally-managed (PEP 668); safe here since the
# container is single-purpose and isolated.
RUN pip install --no-cache-dir --break-system-packages ".[server,visual]"
EXPOSE 7860
CMD ["uvicorn", "document_pii_redactor.server:app", "--host", "0.0.0.0", "--port", "7860"]