ontology-prototype / Dockerfile
ForStream
빌드 단순화: Dockerfile COPY assets 제거 (LFS 빌드 이슈 회피)
f9df220
# =====================================================================
# Stage 1: React (Vite) 빌드
# =====================================================================
FROM node:20-alpine AS web-build
WORKDIR /web
COPY web/package.json web/package-lock.json* ./
RUN npm install --no-audit --no-fund
COPY web/ ./
RUN npm run build
# =====================================================================
# Stage 2: Python 런타임 (FastAPI + 데이터 + Web 빌드 결과)
# =====================================================================
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
HF_HOME=/app/.cache/huggingface \
KOSIMCSE_DEVICE=cpu \
OMP_NUM_THREADS=2 \
TOKENIZERS_PARALLELISM=false
# HF Spaces 기본 포트
ENV PORT=7860
WORKDIR /app
# 시스템 패키지 (rdflib + sentence-transformers 빌드 의존)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential git curl \
&& rm -rf /var/lib/apt/lists/*
# Python 의존성 (캐시 효율화: requirements 먼저)
COPY api/requirements.txt /app/api/requirements.txt
RUN pip install --upgrade pip && pip install -r /app/api/requirements.txt
# 코드 (rag_engine·semantic_search 등 active/code의 핵심 모듈)
# 캐시 무효화용 ARG (commit SHA 다르면 캐시 무효화)
ARG CACHE_BUST=v8
COPY code/ /app/code/
# 백엔드
COPY api/ /app/api/
# 데이터
COPY data/ /app/active/ontology/
# assets/(paper PDF·노드그래프)는 LFS라 HF Docker 빌드 컨텍스트에서 실제 내용으로 smudge되지 않아
# COPY 시 빌드 지연/누락을 유발 → COPY 제외. /api/download는 main.py가 런타임에
# huggingface_hub로 Space 레포에서 직접 fetch(HF_TOKEN)하므로 컨테이너에 파일이 없어도 동작.
# React 빌드 결과 (Stage 1)
COPY --from=web-build /web/dist /app/hf_app/web/dist
# 디렉토리 구조 맞춤 (main.py가 active/ontology 등 상대경로 사용)
RUN mkdir -p /app/active/code && cp -r /app/code/* /app/active/code/
# KoSimCSE 모델 사전 다운로드 (런타임 cold start 단축)
RUN python -c "from transformers import AutoModel, AutoTokenizer; \
AutoTokenizer.from_pretrained('BM-K/KoSimCSE-roberta'); \
AutoModel.from_pretrained('BM-K/KoSimCSE-roberta')" || true
# HF Space 사용자 권한 (필수 — 1000)
RUN useradd -m -u 1000 user && chown -R user /app
USER user
EXPOSE 7860
# FastAPI 시작 — Dockerfile WORKDIR이 /app, main.py는 api/main.py
WORKDIR /app/hf_app
RUN ln -sf /app/api ./api
WORKDIR /app
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "7860"]