From f525ac7f0c9c8c66da9eef9e6f5da01457fe90fc Mon Sep 17 00:00:00 2001 From: hiondal Date: Sun, 15 Jun 2025 16:22:34 +0000 Subject: [PATCH] release --- vector/app/requirements.txt | 67 -------- vector/deployment/container/Dockerfile-base | 164 ++++++++------------ vector/setup.sh | 26 ++-- 3 files changed, 77 insertions(+), 180 deletions(-) delete mode 100644 vector/app/requirements.txt diff --git a/vector/app/requirements.txt b/vector/app/requirements.txt deleted file mode 100644 index 97bd268..0000000 --- a/vector/app/requirements.txt +++ /dev/null @@ -1,67 +0,0 @@ -# app/requirements.txt - 안정화된 Vector DB 서비스용 - -# ========================================== -# 기본 웹 프레임워크 (안정 버전) -# ========================================== -fastapi==0.104.1 -uvicorn[standard]==0.24.0 -pydantic==2.5.0 -python-dotenv==1.0.0 -python-multipart==0.0.6 - -# ========================================== -# HTTP 클라이언트 -# ========================================== -aiohttp==3.9.1 -requests==2.31.0 - -# ========================================== -# 데이터 처리 (안정 버전) -# ========================================== -numpy==1.24.3 -pandas==2.1.4 - -# ========================================== -# AI/ML 라이브러리 (호환성 검증된 버전) -# ========================================== -# PyTorch CPU 버전 (안정화) -torch==2.1.0+cpu --index-url https://download.pytorch.org/whl/cpu -torchvision==0.16.0+cpu --index-url https://download.pytorch.org/whl/cpu -torchaudio==2.1.0+cpu --index-url https://download.pytorch.org/whl/cpu - -# Transformer 라이브러리들 -tokenizers==0.15.2 -transformers==4.35.2 -huggingface-hub==0.19.4 - -# Sentence Transformers (안정 버전) -sentence-transformers==2.2.2 - -# ========================================== -# Vector DB - ChromaDB (안정 버전) -# ========================================== -# ChromaDB 0.4.24 사용 (호환성 검증됨) -chromadb==0.4.24 - -# ChromaDB 의존성 (호환 버전 고정) -hnswlib==0.7.0 -duckdb==0.9.2 - -# ========================================== -# Claude API (최신 안정 버전) -# ========================================== -anthropic>=0.40.0,<1.0.0 - -# ========================================== -# 기타 필수 라이브러리 -# ========================================== -typing-extensions==4.8.0 -sqlalchemy==2.0.23 - -# ========================================== -# 개발/디버깅 도구 (선택사항) -# ========================================== -# pytest==7.4.3 -# black==23.11.0 -# isort==5.12.0 - diff --git a/vector/deployment/container/Dockerfile-base b/vector/deployment/container/Dockerfile-base index 35d1163..6d33c1a 100644 --- a/vector/deployment/container/Dockerfile-base +++ b/vector/deployment/container/Dockerfile-base @@ -1,19 +1,59 @@ # deployment/container/Dockerfile-base -# Poetry 기반 Vector DB API Base Image - 홈 디렉토리 사용 (안전한 방식) +# 최적화된 Vector DB API Base Image - setup.sh 기반 + Multi-stage Build +# ============================================================================= +# Build Stage - setup.sh로 의존성 설치 +# ============================================================================= +FROM python:3.11-slim AS builder + +# 환경 변수 설정 +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + DEBIAN_FRONTEND=noninteractive + +# 빌드 도구 설치 +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + gcc \ + g++ \ + python3-dev \ + curl \ + sudo \ + bc \ + lsb-release \ + && rm -rf /var/lib/apt/lists/* + +# Build Stage용 appuser 생성 +RUN groupadd -r appuser && \ + useradd -r -g appuser -d /home/appuser -s /bin/bash appuser && \ + mkdir -p /home/appuser && \ + chown -R appuser:appuser /home/appuser && \ + echo "appuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + +# setup.sh 복사 및 실행 +WORKDIR /home/appuser +COPY --chown=appuser:appuser setup.sh ./ +RUN chmod +x setup.sh + +# appuser로 전환하여 setup.sh 실행 +USER appuser +RUN ./setup.sh + +# ============================================================================= +# Runtime Stage - 설치된 환경만 복사 (빌드 도구 제거) +# ============================================================================= FROM python:3.11-slim # 메타데이터 -LABEL description="Vector DB API Base Image with Poetry - Home Directory" -LABEL version="poetry-home-v1.0" -LABEL maintainer="admin@example.com" +LABEL maintainer="admin@example.com" \ + description="Vector DB API Base - setup.sh + Multi-stage Optimized" \ + version="setup-multistage-v1.0" -# 환경 변수 설정 - Poetry 가상환경을 홈 디렉토리로 이동 +# 환경 변수 설정 ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ DEBIAN_FRONTEND=noninteractive \ - PIP_NO_CACHE_DIR=1 \ - PIP_DISABLE_PIP_VERSION_CHECK=1 \ + HOME=/home/appuser \ POETRY_NO_INTERACTION=1 \ POETRY_VENV_IN_PROJECT=false \ POETRY_VIRTUALENVS_CREATE=true \ @@ -21,119 +61,43 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ POETRY_CACHE_DIR=/home/appuser/.cache/pypoetry/cache \ HF_HUB_CACHE=/home/appuser/.cache/huggingface \ TRANSFORMERS_CACHE=/home/appuser/.cache/transformers \ - SENTENCE_TRANSFORMERS_HOME=/home/appuser/.cache/sentence_transformers + SENTENCE_TRANSFORMERS_HOME=/home/appuser/.cache/sentence_transformers \ + PATH="/home/appuser/.local/bin:$PATH" -# 🔧 시스템 패키지 설치 +# 런타임에 필요한 최소한의 패키지만 설치 RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - gcc \ - g++ \ - python3-dev \ curl \ - wget \ ca-certificates \ - git \ - sudo \ - lsb-release \ bc \ - python3.11 \ - python3.11-venv \ - python3.11-dev \ - python3.11-distutils \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean -# 📦 pip 업그레이드 -RUN python3.11 -m pip install --no-cache-dir --upgrade pip setuptools wheel - -# 👤 비root 사용자 생성 (Poetry 설치 전에) +# Runtime Stage용 appuser 생성 RUN groupadd -r appuser && \ useradd -r -g appuser -d /home/appuser -s /bin/bash appuser && \ - mkdir -p /home/appuser && \ + mkdir -p /home/appuser/.cache && \ chown -R appuser:appuser /home/appuser -# 🔧 Poetry 가상환경 디렉토리 생성 (홈 디렉토리 사용) -RUN mkdir -p /home/appuser/.cache/pypoetry/venvs \ - /home/appuser/.cache/pypoetry/cache && \ - chown -R appuser:appuser /home/appuser/.cache && \ - chmod -R 755 /home/appuser/.cache +# Build Stage에서 설치된 전체 환경 복사 +COPY --from=builder --chown=appuser:appuser /home/appuser/.local /home/appuser/.local +COPY --from=builder --chown=appuser:appuser /home/appuser/.cache /home/appuser/.cache +COPY --from=builder --chown=appuser:appuser /home/appuser/pyproject.toml /home/appuser/pyproject.toml +COPY --from=builder --chown=appuser:appuser /home/appuser/poetry.lock /home/appuser/poetry.lock -# 🐍 Poetry를 appuser로 설치 -USER appuser -ENV PATH="/home/appuser/.local/bin:$PATH" - -# appuser 홈 디렉토리에 Poetry 설치 -RUN curl -sSL https://install.python-poetry.org | python3.11 - - -# Poetry 실행 권한 및 심볼릭 링크 (root 권한 필요) -USER root -RUN chmod +x /home/appuser/.local/bin/poetry && \ - ln -sf /home/appuser/.local/bin/poetry /usr/local/bin/poetry && \ - chown appuser:appuser /home/appuser/.local/bin/poetry - -# appuser로 다시 전환 -USER appuser - -# 🔧 Poetry 설정 - 가상환경을 홈 디렉토리로 이동 -RUN poetry config virtualenvs.in-project false && \ - poetry config virtualenvs.create true && \ - poetry config virtualenvs.path /home/appuser/.cache/pypoetry/venvs && \ - poetry config cache-dir /home/appuser/.cache/pypoetry/cache - -# Poetry 버전 확인 및 설정 검증 -RUN poetry --version && \ - poetry config --list && \ - ls -la /home/appuser/.local/bin/poetry && \ - which poetry - -# 🏗️ 작업 디렉토리 설정 (홈 디렉토리 사용) +# 작업 디렉토리 설정 WORKDIR /home/appuser - -# 애플리케이션 디렉토리 생성 -USER root -RUN mkdir -p /home/appuser/app && \ - chown -R appuser:appuser /home/appuser - -# 📋 Poetry 설치 스크립트 복사 및 권한 설정 -COPY setup.sh /home/appuser/setup.sh -RUN chmod +x /home/appuser/setup.sh && \ - chown appuser:appuser /home/appuser/setup.sh - -# appuser로 전환하여 Poetry 환경 설정 USER appuser -# 🚀 Poetry 환경 설정 및 의존성 설치 -RUN cd /home/appuser && \ - export DEBIAN_FRONTEND=noninteractive && \ - ./setup.sh --skip-poetry-install --skip-python311-check --force-reinstall +# Poetry 환경 확인 +RUN poetry --version && poetry env info -# 🗂️ 필요한 디렉토리 생성 및 권한 설정 -USER root -RUN mkdir -p /home/appuser/.cache/huggingface \ - /home/appuser/.cache/transformers \ - /home/appuser/.cache/sentence_transformers \ - /home/appuser/vectordb \ - /home/appuser/data \ - /home/appuser/logs && \ - chmod -R 755 /home/appuser/.cache /home/appuser/vectordb /home/appuser/data /home/appuser/logs && \ - chown -R appuser:appuser /home/appuser && \ - # Poetry 가상환경 디렉토리 권한 재확인 - chown -R appuser:appuser /home/appuser/.cache && \ - chmod -R 755 /home/appuser/.cache - -# 🧹 캐시 정리 -RUN rm -rf /tmp/* /var/tmp/* - -# 🚀 포트 노출 +# 포트 노출 EXPOSE 8000 -# 🏥 간단한 헬스체크 (appuser 권한으로 실행) +# 헬스체크 HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ - CMD su -c "poetry --version && poetry config virtualenvs.path" appuser || exit 1 + CMD poetry run python -c "import fastapi; print('OK')" || exit 1 -# 👤 최종 사용자 설정 -USER appuser - -# 🎯 기본 명령어 +# 기본 명령어 CMD ["poetry", "--version"] diff --git a/vector/setup.sh b/vector/setup.sh index 88afa93..0baa31c 100755 --- a/vector/setup.sh +++ b/vector/setup.sh @@ -312,12 +312,22 @@ poetry add typing-extensions sqlalchemy log_success "기타 필수 라이브러리 설치 완료" # ============================================================================= -# 15단계: PyTorch CPU 버전 설치 +# 15단계: Starlette 버전 호환성 확인 # ============================================================================= -log_step "15단계: PyTorch CPU 버전 설치" +log_step "15단계: Starlette 버전 호환성 확인" + +log_info "Starlette 호환 버전 설치 중..." +poetry add "starlette>=0.40.0,<0.46.0" + +log_success "Starlette 호환성 확인 완료" + +# ============================================================================= +# 16단계: PyTorch CPU 버전 설치 +# ============================================================================= +log_step "16단계: PyTorch CPU 버전 설치" log_info "PyTorch CPU 버전 소스 추가 중..." -poetry source add pytorch-cpu https://download.pytorch.org/whl/cpu --priority=supplemental +poetry source add pytorch-cpu https://download.pytorch.org/whl/cpu -p supplemental log_info "PyTorch CPU 버전 설치 중..." poetry add torch --source pytorch-cpu @@ -326,16 +336,6 @@ poetry add torchaudio --source pytorch-cpu log_success "PyTorch CPU 버전 설치 완료" -# ============================================================================= -# 16단계: Starlette 버전 호환성 확인 -# ============================================================================= -log_step "16단계: Starlette 버전 호환성 확인" - -log_info "Starlette 호환 버전 설치 중..." -poetry add "starlette>=0.40.0,<0.46.0" - -log_success "Starlette 호환성 확인 완료" - # 종료 시간 계산 INSTALL_END=$(date +%s) INSTALL_TIME=$((INSTALL_END - INSTALL_START))