ai-chatbot / Dockerfile
appQQQ's picture
fix: CHROMA_PERSIST_DIR=/data/chroma (was writing to /app/data/chroma temp layer)
33cb870 verified
Raw
History Blame Contribute Delete
2.3 kB
# HuggingFace Spaces Docker image
# python:3.12-slim 是 2026-06 推荐基础镜像
FROM python:3.12-slim
# HF Spaces 元数据
LABEL org.opencontainers.image.title="ai-chatbot"
LABEL org.opencontainers.image.description="Agentic multimodal RAG customer service"
LABEL org.opencontainers.image.source="https://github.com/yourname/ai-chatbot"
LABEL org.opencontainers.image.licenses="MIT"
# 环境
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
DATA_DIR=/data \
CHROMA_PERSIST_DIR=/data/chroma \
UPLOAD_DIR=/data/uploads \
SQLITE_DIR=/data/sqlite \
HF_HOME=/data/.cache/huggingface \
TRANSFORMERS_CACHE=/data/.cache/huggingface \
TOKENIZERS_PARALLELISM=false
# 系统依赖 (Poppler for PDF, GL libs for OpenCV/PaddleOCR)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
gcc \
g++ \
libgl1 \
libglib2.0-0 \
poppler-utils \
curl \
&& rm -rf /var/lib/apt/lists/*
# 工作目录
WORKDIR /app
# 先复制 requirements 利用 Docker 层缓存
COPY requirements.txt .
# 安装 Python 依赖
# 单独 install FlagEmbedding 比较慢, 但因为在 requirements.txt 里只装一次
RUN pip install -r requirements.txt
# 可选: 预热模型 (避免 Space 启动超时). 如果镜像太大, 可注释掉, 运行时再下载
# RUN python -c "from FlagEmbedding import BGEM3FlagModel, FlagReranker; \
# BGEM3FlagModel('BAAI/bge-m3', use_fp16=True); \
# FlagReranker('BAAI/bge-reranker-v2-m3')" \
# || echo "Model pre-warm skipped (will download on first startup)"
# 复制应用代码
COPY app ./app
COPY pyproject.toml ./pyproject.toml
# 数据目录 (HF Space 持久卷挂载点)
RUN mkdir -p /data/chroma /data/sqlite /data/uploads /data/.cache/huggingface
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:7860/api/v1/healthz || exit 1
# 暴露端口 (HF Spaces 约定 7860)
EXPOSE 7860
# 启动命令
# --workers 1: 避免 BGE-M3 / ChromaDB 在多 worker 下重复加载模型
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1", "--proxy-headers", "--forwarded-allow-ips", "*"]