simsimi_ai_agent / Dockerfile
youdie006
Fix: Resolve conflicts
878e43c
# Dockerfile - 의존성 충돌 및 캐시 문제 완전 해결
FROM python:3.10-slim
# 메타데이터
LABEL maintainer="youdie006@naver.com"
LABEL description="SimSimi AI Agent - Safe Build"
LABEL version="1.0.4"
# 시스템 의존성 설치
RUN apt-get update && apt-get install -y \
gcc \
g++ \
curl \
git \
git-lfs \
&& git lfs install \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 🛡️ 캐시 및 환경 변수 설정 (캐시 마이그레이션 완전 방지)
ENV HF_HOME=/app/cache
ENV HF_DATASETS_CACHE=/app/cache
ENV TRANSFORMERS_CACHE=/app/cache
ENV HF_HUB_CACHE=/app/cache
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 🔧 캐시 마이그레이션 및 경고 완전 비활성화
ENV HF_HUB_DISABLE_PROGRESS_BARS=1
ENV TRANSFORMERS_NO_ADVISORY_WARNINGS=1
ENV TOKENIZERS_PARALLELISM=false
ENV HF_HUB_DISABLE_TELEMETRY=1
# 캐시 디렉토리 생성 및 권한 설정
RUN mkdir -p /app/cache /app/data /app/logs /app/static && \
chmod -R 777 /app/cache /app/data /app/logs
# 🔧 미리 캐시 구조 생성 (마이그레이션 트리거 방지)
RUN mkdir -p /app/cache/hub /app/cache/datasets /app/cache/transformers && \
mkdir -p /app/cache/models /app/cache/tokenizers && \
touch /app/cache/.no_migration_needed
# Python 의존성 설치
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# 애플리케이션 코드 복사
COPY . .
# 🛡️ 안전한 데이터 다운로드 (타임아웃 및 실패 허용)
RUN timeout 180 huggingface-cli download \
youdie006/simsimi-ai-agent-data \
--repo-type dataset \
--local-dir /app/data \
--local-dir-use-symlinks False || \
echo "⚠️ 데이터 다운로드 건너뜀 - 런타임에 처리"
# 🔧 안전한 모델 사전 다운로드 (실패해도 계속 진행)
RUN echo "📥 임베딩 모델 사전 다운로드 시도..." && \
timeout 300 python -c "\
import os; \
os.environ['TRANSFORMERS_CACHE'] = '/app/cache'; \
os.environ['HF_HOME'] = '/app/cache'; \
os.environ['TRANSFORMERS_NO_ADVISORY_WARNINGS'] = '1'; \
try: \
print('모델 다운로드 시작...'); \
from sentence_transformers import SentenceTransformer; \
model = SentenceTransformer('jhgan/ko-sbert-multitask', cache_folder='/app/cache'); \
print(f'✅ 모델 다운로드 완료 - 차원: {model.get_sentence_embedding_dimension()}'); \
except Exception as e: \
print(f'⚠️ 모델 사전 다운로드 실패: {e}'); \
print('런타임에 다시 시도합니다.'); \
" || echo "모델 사전 다운로드 실패 - 런타임에 처리"
# 스마트 시작 스크립트
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
# 포트 노출
EXPOSE 7860
# 관대한 헬스체크
HEALTHCHECK --interval=60s --timeout=30s --start-period=600s --retries=5 \
CMD curl -f http://localhost:7860/api/v1/health || exit 1
# 시작
CMD ["/app/start.sh"]