# 知識庫系統 V5 — 公開示範映像(Hugging Face Spaces / Docker) # ⚠ 此為「示範」用:預設不帶雲端 AI 金鑰、容器啟動自動 seed 假資料、資料為臨時(重啟即重置)。 # 請勿放真實公司資料;要加雲端 AI 請用「有額度上限」的測試金鑰(見 README)。 FROM python:3.11-slim-bookworm RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl \ && rm -rf /var/lib/apt/lists/* # 非 root 使用者(uid 1000;HF Spaces 慣例,容器以此身分執行) RUN useradd -m -u 1000 kb WORKDIR /app # 先裝 Python 依賴(利用 layer cache) COPY --chown=kb:kb backend/requirements.txt ./backend/requirements.txt RUN pip install --no-cache-dir -r backend/requirements.txt # 複製程式(不含真實 vault / DB,那些由 seed 產生) COPY --chown=kb:kb backend/ ./backend/ COPY --chown=kb:kb static/ ./static/ COPY --chown=kb:kb scripts/ ./scripts/ COPY --chown=kb:kb 知識庫視覺圖最終版.html ./ COPY --chown=kb:kb entrypoint.sh ./entrypoint.sh # 臨時資料夾(DB / vault / history)——示範用,重啟即重置 RUN mkdir -p /app/vault /app/data/sys/history /home/kb/.cache && \ chmod +x /app/entrypoint.sh && \ chown -R kb:kb /app /home/kb USER 1000 WORKDIR /app/backend ENV HOME=/home/kb \ PYTHONPATH=/app/backend \ PYTHONUNBUFFERED=1 \ KBV5_DB=/app/data/kbv5.db \ KBV5_VAULT_DIR=/app/vault \ KBV5_HISTORY_DIR=/app/data/sys/history \ KBV5_VARIANT_DICT=/app/backend/variant_dictionary.json \ KBV5_ENV=dev \ KBV5_SEED=1 \ FEATURE_2FA=false \ PORT=7860 \ JWT_SECRET=demo-only-fixed-secret-change-me-0123456789abcdef # ↑ 示範用固定密鑰(資料為假、低風險)。要更安全可在 Space Secrets 覆寫 JWT_SECRET。 # 不設 AI 金鑰 → 系統自動走「本地保底整理」,任何人都無法用你的金鑰產生費用。 EXPOSE 7860 # HF Spaces 會依 README 的 app_port (7860) 對外;容器內 uvicorn 也聽 7860 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD curl -fsS http://127.0.0.1:7860/api/health || exit 1 CMD ["/app/entrypoint.sh"]