HNTAI / Dockerfile
sachinchandrankallar's picture
`Refactored codebase with various changes and deletions across multiple files`
066eed6
# FROM python:3.10-slim
# # Install system dependencies
# RUN apt-get update && apt-get install -y \
# tesseract-ocr \
# poppler-utils \
# ffmpeg \
# && rm -rf /var/lib/apt/lists/*
# # Set working directory
# WORKDIR /app
# # Copy requirements first to leverage Docker cache
# COPY requirements.txt .
# # Install Python dependencies
# RUN pip install --no-cache-dir -r requirements.txt
# # Copy application code
# COPY . .
# # Create necessary directories with proper permissions
# RUN mkdir -p /data/uploads /tmp/huggingface /tmp/torch /tmp/whisper && \
# chmod -R 777 /data /tmp
# # Set environment variables
# ENV PYTHONUNBUFFERED=1
# ENV HF_HOME=/tmp/huggingface
# ENV HF_HOME=/tmp/huggingface
# ENV XDG_CACHE_HOME=/tmp
# ENV TORCH_HOME=/tmp/torch
# ENV WHISPER_CACHE=/tmp/whisper
# ENV PYTHONPATH=/app
# # Expose port
# EXPOSE 7860
# # Run the application with gunicorn
# CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "--threads", "8", "--timeout", "0", "ai_med_extract.app:app"]
# Multi-arch/mode Dockerfile that supports both GPU and CPU builds via build-args.
# Defaults to CPU runtime suitable for Hugging Face Spaces Basic.
ARG BASE_IMAGE=python:3.10-slim
# Stage 1: builder (installs Python deps into a venv with build tooling)
FROM ${BASE_IMAGE} AS builder
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
# Install build tools only in builder
RUN apt-get update && apt-get install -y --no-install-recommends \
tzdata \
build-essential \
python3 \
python3-pip \
python3-venv \
python3-dev \
tesseract-ocr \
poppler-utils \
ffmpeg \
&& ln -fs /usr/share/zoneinfo/$TZ /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
# Create virtual environment
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv "$VIRTUAL_ENV"
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
WORKDIR /app
COPY requirements.txt ./
# Upgrade pip and install dependencies
RUN pip install --upgrade pip && \
pip install --prefer-binary -r requirements.txt
# Stage 2: runtime (minimal runtime deps + venv from builder)
FROM ${BASE_IMAGE} AS runtime
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
# Install only runtime system packages; keep minimal
RUN apt-get update && apt-get install -y --no-install-recommends \
tzdata \
tesseract-ocr \
poppler-utils \
ffmpeg \
&& ln -fs /usr/share/zoneinfo/$TZ /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
# Copy Python environment from builder
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# App
WORKDIR /app
COPY . .
# Reasonable cache dirs at runtime (kept outside image layers)
ENV HF_HOME=/tmp/huggingface \
XDG_CACHE_HOME=/tmp \
TORCH_HOME=/tmp/torch \
WHISPER_CACHE=/tmp/whisper \
PYTHONUNBUFFERED=1 \
PYTHONPATH=/app \
GGUF_N_THREADS=2 \
GGUF_N_BATCH=64 \
OMP_NUM_THREADS=2 \
MKL_NUM_THREADS=2 \
NUMEXPR_NUM_THREADS=2
# Ensure writable directories exist (works on Spaces read-only root)
RUN mkdir -p /tmp/uploads /tmp/huggingface /tmp/torch /tmp/whisper && \
chmod -R 777 /tmp
EXPOSE 7860
CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "--threads", "8", "--timeout", "0", "ai_med_extract.app:app"]