#!/bin/bash # setup.sh - Review Analysis API 환경 설정 스크립트 set -e echo "🔍 Review Analysis API 환경 설정 시작..." # 시스템 정보 확인 echo "📊 시스템 정보:" echo " - OS: $(lsb_release -d | cut -f2)" echo " - Python: $(python3 --version 2>/dev/null || echo 'Python3 미설치')" echo " - pip: $(pip3 --version 2>/dev/null || echo 'pip3 미설치')" # 필수 패키지 설치 echo "" echo "📦 필수 패키지 설치 중..." sudo apt update sudo apt install -y python3-pip python3-venv unzip wget curl jq # Chrome 브라우저 설치 (리뷰 분석용) echo "" echo "🌐 Chrome 브라우저 설치 확인 중..." if ! command -v google-chrome &> /dev/null; then echo "Chrome 브라우저 설치 중..." wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list sudo apt update sudo apt install -y google-chrome-stable echo "✅ Chrome 브라우저 설치 완료" else CHROME_VERSION=$(google-chrome --version) echo "✅ Chrome 브라우저 이미 설치됨: ${CHROME_VERSION}" fi # ChromeDriver 설치 echo "" echo "🚗 ChromeDriver 설치 중..." if [ -f "/usr/local/bin/chromedriver" ]; then echo "기존 ChromeDriver 제거 중..." sudo rm -f /usr/local/bin/chromedriver fi CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+' | cut -d'.' -f1) echo "Chrome 주 버전: ${CHROME_VERSION}" CHROMEDRIVER_VERSION=$(curl -s "https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_${CHROME_VERSION}") echo "ChromeDriver 버전: ${CHROMEDRIVER_VERSION}" TEMP_DIR=$(mktemp -d) cd "$TEMP_DIR" wget -q "https://storage.googleapis.com/chrome-for-testing-public/${CHROMEDRIVER_VERSION}/linux64/chromedriver-linux64.zip" unzip -q chromedriver-linux64.zip sudo mv chromedriver-linux64/chromedriver /usr/local/bin/ sudo chmod +x /usr/local/bin/chromedriver cd - > /dev/null rm -rf "$TEMP_DIR" echo "✅ ChromeDriver 설치 완료: $(chromedriver --version)" # Python 버전 확인 PYTHON_VERSION=$(python3 -c "import sys; print('.'.join(map(str, sys.version_info[:2])))") echo "" echo "📍 Python 버전: ${PYTHON_VERSION}" if [ "$(echo "${PYTHON_VERSION} < 3.8" | bc)" -eq 1 ]; then echo "⚠️ Python 3.8 이상이 권장됩니다." fi # Python 가상환경 설정 echo "" echo "🐍 Python 가상환경 설정 중..." if [ ! -d "venv" ]; then python3 -m venv venv echo "✅ 가상환경 생성 완료" else echo "✅ 기존 가상환경 발견" fi # 가상환경 활성화 및 라이브러리 설치 echo "📚 Python 라이브러리 설치 중..." source venv/bin/activate # pip 업그레이드 pip install --upgrade pip # 필요한 라이브러리 설치 if [ -f "app/requirements.txt" ]; then pip install -r app/requirements.txt echo "✅ requirements.txt에서 라이브러리 설치 완료" else echo "⚠️ app/requirements.txt 파일을 찾을 수 없습니다." echo "🔧 기본 라이브러리들을 직접 설치합니다..." pip install fastapi uvicorn beautifulsoup4 selenium webdriver-manager pydantic python-multipart lxml fi # 데이터 디렉토리 생성 echo "" echo "📁 데이터 디렉토리 설정 중..." mkdir -p data chmod 755 data echo "✅ 데이터 디렉토리 생성: $(pwd)/data" # 환경변수 파일 생성 (예시) echo "" echo "⚙️ 환경변수 파일 생성 중..." cat > .env << EOF # 애플리케이션 설정 APP_TITLE=카카오맵 리뷰 분석 API APP_VERSION=1.0.1 APP_DESCRIPTION=교육 목적 전용 - 실제 서비스 사용 금지 # 서버 설정 HOST=0.0.0.0 PORT=19000 LOG_LEVEL=info # API 기본값 설정 DEFAULT_MAX_TIME=300 DEFAULT_DAYS_LIMIT=60 MAX_DAYS_LIMIT=365 MIN_MAX_TIME=60 MAX_MAX_TIME=600 # Chrome 브라우저 설정 CHROME_OPTIONS=--headless=new --no-sandbox --disable-dev-shm-usage --disable-gpu --window-size=1920,1080 SCROLL_CHECK_INTERVAL=5 SCROLL_NO_CHANGE_LIMIT=6 SCROLL_WAIT_TIME_SHORT=2.0 SCROLL_WAIT_TIME_LONG=3.0 # 법적 경고 메시지 LEGAL_WARNING_ENABLED=true CONTACT_EMAIL=admin@example.com # 건강 체크 설정 HEALTH_CHECK_TIMEOUT=10 # AI API 설정 (향후 Claude API 연동용) # CLAUDE_API_KEY=your_claude_api_key_here # 데이터베이스 설정 (향후 PostgreSQL 연동용) # DB_HOST=localhost # DB_PORT=5432 # DB_NAME=review_analysis # DB_USERNAME=your_db_username # DB_PASSWORD=your_db_password EOF echo "✅ .env 파일 생성 완료" # 네트워크 연결 테스트 echo "" echo "🌐 네트워크 연결 테스트 중..." # 카카오맵 연결 테스트 if curl -s --connect-timeout 5 "https://place.map.kakao.com" > /dev/null; then echo "✅ 카카오맵 서버 연결 가능" else echo "❌ 카카오맵 서버 연결 실패" echo " 인터넷 연결 상태를 확인해주세요." fi # Selenium 및 Chrome 테스트 echo "" echo "🧪 Selenium 및 Chrome 테스트 중..." source venv/bin/activate python3 -c " try: from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service print('✅ Selenium 모듈 import 성공') options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') try: service = Service('/usr/local/bin/chromedriver') driver = webdriver.Chrome(service=service, options=options) driver.get('data:text/html,