| FROM qdrant/qdrant:latest | |
| # 1. Install Python runtime dependencies as root | |
| RUN apt-get update && apt-get install -y python3 curl && rm -rf /lib/apt/lists/* | |
| RUN curl -LsSf https://astral.sh/uv/install.sh | sh | |
| RUN bash -c "source ~/.bashrc" | |
| RUN bash -c "source $HOME/.local/bin/env" | |
| RUN whereis uv | |
| ENV PATH="/root/.local/bin:$PATH" | |
| RUN uv --version | |
| # 2. Define the mandatory Hugging Face user (UID 1000) | |
| RUN useradd -m -u 1000 user | |
| RUN mv /root/.local/bin/uv /root/.local/bin/uvx /usr/local/bin/ | |
| #COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/ | |
| WORKDIR /app | |
| # Ensure our app directory belongs completely to the runtime user. Grant our non-root user full ownership of BOTH directories while we are root | |
| RUN chown -R user:user /app | |
| RUN chown -R user:user /app && chown -R user:user /qdrant | |
| # 3. Switch to the non-root user context for all subsequent setups | |
| USER user | |
| ENV HOME=/home/user | |
| ENV PATH=/home/user/.local/bin:$PATH | |
| # 4. Construct the Python Virtual Environment cleanly | |
| #RUN python3 -m venv venv | |
| COPY --chown=user:user requirements.txt /app/requirements.txt | |
| #RUN ./venv/bin/pip install --no-cache-dir -r /app/requirements.txt | |
| RUN uv init | |
| RUN uv add -r /app/requirements.txt | |
| # Copy over your active backend code | |
| COPY --chown=user:user app.py /app/app.py | |
| # Create the bucket target directory | |
| #RUN mkdir -p /data/qdrant_storage # NOT required, since HF can allocate directories dynamically | |
| # 5. Route Engine configurations & Cache pathways # NOTE: /data comes from mounted HF bucket to the current HF space | |
| ENV QDRANT__STORAGE__STORAGE_PATH=/data/qdrant_storage | |
| ENV FASTEMBED_CACHE_PATH=/home/user/.cache/fastembed | |
| EXPOSE 7860 | |
| EXPOSE 6333 | |
| # 6. Start Qdrant from its native directory in the background, then run FastMCP in the foreground | |
| CMD cd /qdrant && ./qdrant & cd /app && ./.venv/bin/python app.py |