ai-review/vector/setup.sh
2025-06-15 16:22:34 +00:00

391 lines
13 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# setup.sh - Poetry 기반 Vector DB API 의존성 설치 스크립트 (홈 디렉토리 사용)
set -e
# 색상 설정
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# 옵션 기본값
SKIP_POETRY_INSTALL=false
SKIP_PYTHON311_CHECK=false
FORCE_REINSTALL=false
RUN_AFTER_INSTALL=false
# 함수 정의
log_info() { echo -e "${CYAN} $1${NC}"; }
log_success() { echo -e "${GREEN}$1${NC}"; }
log_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
log_error() { echo -e "${RED}$1${NC}"; }
log_step() { echo -e "\n${BLUE}🔧 $1${NC}"; }
# 사용법 표시
show_usage() {
echo "사용법: $0 [옵션]"
echo ""
echo "옵션:"
echo " --skip-poetry-install Poetry 설치 건너뛰기"
echo " --skip-python311-check Python 3.11 확인 건너뛰기"
echo " --force-reinstall 기존 환경 제거 후 재설치"
echo " --run-after-install 설치 후 앱 자동 실행"
echo " --help 이 도움말 표시"
}
# 파라미터 파싱
while [[ $# -gt 0 ]]; do
case $1 in
--skip-poetry-install)
SKIP_POETRY_INSTALL=true
shift
;;
--skip-python311-check)
SKIP_PYTHON311_CHECK=true
shift
;;
--force-reinstall)
FORCE_REINSTALL=true
shift
;;
--run-after-install)
RUN_AFTER_INSTALL=true
shift
;;
--help)
show_usage
exit 0
;;
*)
log_error "알 수 없는 옵션: $1"
show_usage
exit 1
;;
esac
done
echo "========================================================"
echo "🚀 Poetry 기반 Vector DB API 의존성 설치 (홈 디렉토리)"
echo "========================================================"
echo "설치 시작: $(date)"
echo "작업 디렉토리: $(pwd)"
echo "홈 디렉토리: $HOME"
echo "사용자: $(whoami)"
echo ""
INSTALL_START=$(date +%s)
# =============================================================================
# 1단계: Poetry 설치 확인
# =============================================================================
log_step "1단계: Poetry 설치 확인"
if [ "$SKIP_POETRY_INSTALL" = true ]; then
log_info "Poetry 설치 확인을 건너뜁니다."
elif command -v poetry &> /dev/null; then
POETRY_VERSION=$(poetry --version)
log_success "Poetry 이미 설치됨: $POETRY_VERSION"
else
if [ -f /.dockerenv ]; then
log_error "Docker 환경에서 Poetry를 찾을 수 없습니다."
log_error "--skip-poetry-install 옵션을 제거하세요."
exit 1
fi
log_info "Poetry 설치 중..."
sudo apt update
sudo apt install -y python3-poetry
# PATH 확인
export PATH="$HOME/.local/bin:$PATH"
if command -v poetry &> /dev/null; then
log_success "Poetry 설치 완료: $(poetry --version)"
else
log_error "Poetry 설치 실패"
exit 1
fi
fi
# =============================================================================
# 2단계: Python 3.11 확인
# =============================================================================
log_step "2단계: Python 3.11 환경 확인"
if [ "$SKIP_PYTHON311_CHECK" = false ]; then
if command -v python3.11 &> /dev/null; then
PYTHON311_VERSION=$(python3.11 --version)
log_success "Python 3.11 발견: $PYTHON311_VERSION"
else
log_warning "Python 3.11이 설치되어 있지 않습니다."
log_info "Python 3.11 설치 중..."
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3.11-dev
if command -v python3.11 &> /dev/null; then
log_success "Python 3.11 설치 완료: $(python3.11 --version)"
else
log_error "Python 3.11 설치 실패"
exit 1
fi
fi
fi
# =============================================================================
# 3단계: Poetry 프로젝트 초기화
# =============================================================================
log_step "3단계: Poetry 프로젝트 초기화"
# 기존 환경 제거 (강제 재설치 옵션)
if [ "$FORCE_REINSTALL" = true ]; then
log_info "기존 Poetry 환경 제거 중..."
poetry env remove --all 2>/dev/null || true
rm -f poetry.lock pyproject.toml 2>/dev/null || true
fi
# pyproject.toml이 없는 경우 초기화
if [ ! -f "pyproject.toml" ]; then
log_info "Poetry 프로젝트 초기화 중..."
# 현재 작업 디렉토리 확인
log_info "현재 작업 디렉토리: $(pwd)"
# 비대화형 초기화 (홈 디렉토리 기준)
cat > pyproject.toml << 'EOF'
[tool.poetry]
name = "vector-api"
version = "1.0.0"
description = "Vector DB API with AI/ML capabilities"
authors = ["Developer <dev@example.com>"]
packages = [{include = "app"}]
[tool.poetry.dependencies]
python = "^3.11"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
EOF
log_success "pyproject.toml 생성 완료 (위치: $(pwd)/pyproject.toml)"
else
log_success "기존 pyproject.toml 사용 (위치: $(pwd)/pyproject.toml)"
fi
# =============================================================================
# 4단계: Poetry 가상환경 설정 (홈 디렉토리 사용)
# =============================================================================
log_step "4단계: Poetry 가상환경 설정 (홈 디렉토리 사용)"
log_info "Poetry 가상환경을 홈 디렉토리로 설정 중..."
# 홈 디렉토리에 Poetry 관련 디렉토리 생성
mkdir -p ~/.cache/pypoetry/venvs ~/.cache/pypoetry/cache
# Poetry 설정 - 가상환경을 홈 디렉토리로 이동
poetry config virtualenvs.in-project false
poetry config virtualenvs.create true
poetry config virtualenvs.path ~/.cache/pypoetry/venvs
poetry config cache-dir ~/.cache/pypoetry/cache
# 설정 확인
log_info "Poetry 설정 확인:"
poetry config --list | grep -E "(virtualenvs|cache)"
# 권한 확인
log_info "디렉토리 권한 확인:"
ls -la ~/.cache/pypoetry/ 2>/dev/null || log_info "디렉토리가 아직 생성되지 않음"
log_success "Poetry 가상환경 설정 완료"
# =============================================================================
# 5단계: Python 3.11 환경 설정
# =============================================================================
log_step "5단계: Python 3.11 환경 설정"
log_info "Poetry가 Python 3.11을 사용하도록 설정 중..."
poetry env use python3.11
# 환경 정보 확인
POETRY_ENV_INFO=$(poetry config virtualenvs.path)
log_success "Poetry 가상환경 기본 경로: $POETRY_ENV_INFO"
log_info "현재 작업 디렉토리: $(pwd)"
log_info "앱 디렉토리 확인: $([ -d "app" ] && echo "✅ app/ 디렉토리 존재" || echo "❌ app/ 디렉토리 없음")"
# =============================================================================
# 6단계: 소스 우선순위 사전 설정 (중요!)
# =============================================================================
log_step "6단계: 소스 우선순위 사전 설정"
log_info "PyPI를 기본 소스로 확인 중..."
# PyPI는 기본적으로 존재하므로 확인만 함
if poetry source show | grep -q "pypi"; then
log_success "PyPI 소스 확인됨"
else
log_warning "PyPI 소스가 없습니다 (비정상)"
fi
log_success "소스 우선순위 사전 설정 완료"
# =============================================================================
# 7단계: 기본 웹 프레임워크 설치
# =============================================================================
log_step "7단계: 기본 웹 프레임워크 설치"
log_info "FastAPI 및 관련 패키지 설치 중..."
poetry add "fastapi==0.115.9"
poetry add uvicorn[standard] pydantic python-dotenv python-multipart
log_success "웹 프레임워크 설치 완료"
# =============================================================================
# 8단계: HTTP 클라이언트 설치
# =============================================================================
log_step "8단계: HTTP 클라이언트 설치"
log_info "HTTP 클라이언트 설치 중..."
poetry add aiohttp requests
log_success "HTTP 클라이언트 설치 완료"
# =============================================================================
# 9단계: 데이터 처리 라이브러리 설치
# =============================================================================
log_step "9단계: 데이터 처리 라이브러리 설치"
log_info "NumPy, Pandas 설치 중..."
poetry add numpy pandas
log_success "데이터 처리 라이브러리 설치 완료"
# =============================================================================
# 10단계: AI/ML 기초 라이브러리 설치
# =============================================================================
log_step "10단계: AI/ML 기초 라이브러리 설치"
log_info "Tokenizers, Transformers 설치 중..."
poetry add tokenizers transformers huggingface-hub
log_success "AI/ML 기초 라이브러리 설치 완료"
# =============================================================================
# 11단계: Sentence Transformers 설치
# =============================================================================
log_step "11단계: Sentence Transformers 설치"
log_info "Sentence Transformers 설치 중..."
poetry add sentence-transformers
log_success "Sentence Transformers 설치 완료"
# =============================================================================
# 12단계: Vector DB 라이브러리 설치
# =============================================================================
log_step "12단계: Vector DB 라이브러리 설치"
log_info "ChromaDB, HNSW, DuckDB 설치 중..."
poetry add chromadb hnswlib duckdb
log_success "Vector DB 라이브러리 설치 완료"
# =============================================================================
# 13단계: Claude API 라이브러리 설치
# =============================================================================
log_step "13단계: Claude API 라이브러리 설치"
log_info "Anthropic Claude API 라이브러리 설치 중..."
poetry add anthropic
log_success "Claude API 라이브러리 설치 완료"
# =============================================================================
# 14단계: 기타 필수 라이브러리 설치
# =============================================================================
log_step "14단계: 기타 필수 라이브러리 설치"
log_info "기타 필수 라이브러리 설치 중..."
poetry add typing-extensions sqlalchemy
log_success "기타 필수 라이브러리 설치 완료"
# =============================================================================
# 15단계: Starlette 버전 호환성 확인
# =============================================================================
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 -p supplemental
log_info "PyTorch CPU 버전 설치 중..."
poetry add torch --source pytorch-cpu
poetry add torchvision --source pytorch-cpu
poetry add torchaudio --source pytorch-cpu
log_success "PyTorch CPU 버전 설치 완료"
# 종료 시간 계산
INSTALL_END=$(date +%s)
INSTALL_TIME=$((INSTALL_END - INSTALL_START))
MINUTES=$((INSTALL_TIME / 60))
SECONDS=$((INSTALL_TIME % 60))
echo ""
echo "🎉 Poetry 기반 Vector DB API 설치 완료!"
echo "========================================================"
echo "⏱️ 총 설치 시간: ${MINUTES}${SECONDS}"
echo "📦 설치된 패키지 수: $(poetry show | wc -l)"
echo "🐍 Python 환경: $(poetry run python --version)"
echo "📁 환경 경로: $(poetry env info --path)"
echo "🏠 작업 디렉토리: $(pwd)"
echo "🏠 홈 디렉토리: $HOME"
echo ""
echo "🚀 다음 단계:"
echo " 1. 가상환경 활성화:"
echo " poetry shell"
echo ""
echo " 2. 애플리케이션 실행 (홈 디렉토리 기준):"
echo " poetry run python app/main.py"
echo ""
echo " 3. 개발 서버 실행:"
echo " poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload"
echo ""
echo "💡 유용한 명령어:"
echo " - poetry show # 설치된 패키지 확인"
echo " - poetry show --tree # 의존성 트리 확인"
echo " - poetry add [패키지명] # 새 패키지 추가"
echo " - poetry update # 패키지 업데이트"
echo " - poetry env info # 환경 정보 확인"
echo " - pwd # 현재 작업 디렉토리 확인"
echo " - ls -la ~/.cache/pypoetry/venvs/ # Poetry 가상환경 확인"
echo ""
# 자동 실행 옵션
if [ "$RUN_AFTER_INSTALL" = true ]; then
if [ -f "app/main.py" ]; then
log_info "앱 자동 실행 중... (작업 디렉토리: $(pwd))"
poetry run python app/main.py
else
log_warning "app/main.py 파일이 없어 자동 실행을 건너뜁니다."
log_info "현재 디렉토리: $(pwd)"
log_info "파일 목록: $(ls -la)"
fi
fi
log_success "설치 스크립트 완료! 🎊"