Spaces:
Sleeping
Sleeping
File size: 2,645 Bytes
2b50ae3 72ceb13 2b50ae3 d8cded5 f9df220 2b50ae3 f9df220 2b50ae3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # =====================================================================
# 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"]
|