kybocr / Dockerfile
tommulder's picture
Seperate everything into files
1a22905
raw
history blame
3.15 kB
# =============================================================================
# vLLM Server with DotsOCR Model for Hugging Face Spaces
# =============================================================================
# Base: official vLLM OpenAI-compatible server (tested version family)
FROM vllm/vllm-openai:v0.9.1
# Add metadata labels
LABEL maintainer="kybtech-vllm-dotsocr"
LABEL description="vLLM server with DotsOCR model for document OCR"
LABEL version="1.0"
# =============================================================================
# SYSTEM SETUP (as root)
# =============================================================================
# Install additional Python packages
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install -r /tmp/requirements.txt
# Patch vLLM entrypoint to register DotsOCR model
# This must be done as root before switching to user (required for HF Spaces)
COPY patch_vllm.sh /tmp/patch_vllm.sh
RUN chmod +x /tmp/patch_vllm.sh && /tmp/patch_vllm.sh
# Create user and copy application files
RUN useradd -m -u 1000 user
COPY start_server.sh /home/user/app/start_server.sh
COPY download_model.py /home/user/app/download_model.py
RUN chmod +x /home/user/app/start_server.sh /home/user/app/download_model.py
# =============================================================================
# APPLICATION SETUP (as user)
# =============================================================================
# Switch to the "user" user
USER user
# Set home to the user's home directory and update PATH
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
# Set the working directory to the user's home directory
WORKDIR $HOME/app
# Speed up HF downloads and avoid interactive git prompts
ENV HF_HUB_ENABLE_HF_TRANSFER=1 \
GIT_LFS_SKIP_SMUDGE=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
# Pre-download the model repo using Hugging Face cache
# Note: dots.ocr requires the directory name to avoid '.' (see model card).
ARG MODEL_ID=rednote-hilab/dots.ocr
RUN MODEL_ID=$MODEL_ID python3 /home/user/app/download_model.py
# Set the model path from the downloaded location
RUN HF_MODEL_PATH=$(cat /home/user/app/model_path.txt) && \
echo "export HF_MODEL_PATH=$HF_MODEL_PATH" >> /home/user/.bashrc && \
echo "export PYTHONPATH=\"$HF_MODEL_PATH:\$PYTHONPATH\"" >> /home/user/.bashrc
# Set default environment variables (will be overridden by .bashrc in interactive shells)
ENV HF_MODEL_PATH=/home/user/.cache/huggingface/hub/models--rednote-hilab--dots.ocr
ENV PYTHONPATH="/home/user/.cache/huggingface/hub/models--rednote-hilab--dots.ocr:${PYTHONPATH}"
# =============================================================================
# RUNTIME CONFIGURATION
# =============================================================================
# Expose the Space port
EXPOSE 7860
ENV PORT=7860
# Add health check (using httpx instead of curl)
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD python3 -c "import httpx; httpx.get(f'http://localhost:{PORT}/health', timeout=5)" || exit 1
# Use the startup script as entrypoint
ENTRYPOINT ["/home/user/app/start_server.sh"]