| # 知識庫系統 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"] | |