II_SpectraEngine / Dockerfile
minchun's picture
Claude Sonnet 5
改用 Docker SDK 部署,繞開 HF 免費層級 Gradio SDK 強制 ZeroGPU 的限制
f072ca3
Raw History Blame Contribute Delete
1.83 kB
# Hugging Face Space(Docker SDK)用的容器設定。
#
# 為什麼不用 Gradio SDK:HF 免費層級的 Gradio SDK Space 現在預設跑在
# ZeroGPU 上(HF 平台政策),啟動時要求偵測到 @spaces.GPU 標記的函式,
# 本專案是純 CPU 應用(scikit-learn/scipy/matplotlib,完全不用 GPU),
# 沒有這種函式,Gradio SDK 會直接啟動失敗。改用 Docker SDK:由這份
# Dockerfile 自己控制執行環境,不吃 Gradio SDK 的 ZeroGPU 預設規則,
# 一樣可以跑在免費的 CPU 硬體上。
FROM python:3.11-slim
# fonts-noto-cjk:matplotlib 圖表(特徵重要性、分群圖等)標題與座標軸
# 都是中文,容器內建的 Linux 沒有任何中文字型,沒裝的話中文會變成方框。
# app_agent.py 的 _find_cjk_font() 本來就把 "Noto Sans CJK TC"/
# "Noto Sans CJK SC" 排在候選字型清單裡(原本是留給 Linux 部署用的),
# 裝了這個套件就能直接吃到,不用改程式碼。
RUN apt-get update && apt-get install -y --no-install-recommends \
fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 先只複製 requirements 檔案再裝套件,Docker layer cache 才會生效——
# 之後只改程式碼、沒改依賴套件時,重新建置不用重跑 pip install。
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r requirements.txt \
&& pip install --no-cache-dir python-dotenv
COPY . .
# HF Docker Space 的容器以非 root、UID 1000 執行;sessions/ 是執行期才會
# 建立與寫入的資料夾(session 上傳檔、分析產出),這裡先建好並開放寫入
# 權限,避免執行期因權限不足寫入失敗。
RUN mkdir -p sessions && chmod -R 777 sessions
EXPOSE 7860
CMD ["python", "app.py"]