#!/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,

Test

') title = driver.title driver.quit() print('✅ Chrome WebDriver 테스트 성공') except Exception as e: print(f'❌ Chrome WebDriver 테스트 실패: {e}') except ImportError as e: print(f'❌ Selenium import 실패: {e}') except Exception as e: print(f'❌ 테스트 중 오류: {e}') " # Docker 설치 확인 (선택사항) echo "" echo "🐳 Docker 설치 확인 중..." if command -v docker &> /dev/null; then DOCKER_VERSION=$(docker --version) echo "✅ Docker 설치됨: ${DOCKER_VERSION}" # Docker 권한 확인 if docker ps &> /dev/null; then echo "✅ Docker 권한 확인됨" else echo "⚠️ Docker 권한 없음. 다음 명령어로 권한을 추가하세요:" echo " sudo usermod -aG docker $USER" echo " newgrp docker" fi else echo "⚠️ Docker가 설치되지 않음 (컨테이너 배포 시 필요)" echo " 설치 방법: https://docs.docker.com/engine/install/ubuntu/" fi # 방화벽 설정 확인 echo "" echo "🔥 방화벽 설정 확인 중..." if command -v ufw &> /dev/null; then UFW_STATUS=$(sudo ufw status | head -n1 | awk '{print $2}') if [ "${UFW_STATUS}" = "active" ]; then echo "🔥 UFW 방화벽 활성화됨" if sudo ufw status | grep -q "19000"; then echo "✅ 포트 19000 방화벽 규칙 확인됨" else echo "⚠️ 포트 19000 방화벽 규칙 없음" echo " 다음 명령어로 포트를 열어주세요:" echo " sudo ufw allow 19000" fi else echo "✅ UFW 방화벽 비활성화됨" fi else echo "✅ UFW 방화벽 미설치" fi echo "" echo "🎉 환경 설정 완료!" echo "" echo "📋 다음 단계:" echo "1. 가상환경 활성화:" echo " source venv/bin/activate" echo "" echo "2. 환경변수 설정:" echo " export DATA_DIR=\"./data\"" echo "" echo "3. 애플리케이션 실행:" echo " python app/main.py" echo " 또는" echo " uvicorn app.main:app --host 0.0.0.0 --port 19000 --reload" echo "" echo "4. 웹 브라우저에서 접속:" echo " http://localhost:19000 (메인 페이지)" echo " http://localhost:19000/docs (Swagger UI)" echo " http://localhost:19000/health (헬스체크)" echo "" echo "5. API 테스트:" echo " curl -X POST \"http://localhost:19000/analyze\" \\" echo " -H \"Content-Type: application/json\" \\" echo " -d '{\"store_id\":\"501745730\",\"days_limit\":7,\"max_time\":300}'" echo "" echo "⚠️ 중요 법적 경고사항:" echo " 이 서비스는 교육 목적으로만 사용하세요!" echo " 실제 웹사이트 크롤링은 법적 위험이 있습니다." echo " 카카오 공식 API를 사용하는 것을 권장합니다: developers.kakao.com" echo "" echo "💡 문제 발생 시:" echo " - 로그 확인: tail -f 로그파일" echo " - 환경변수 확인: cat .env" echo " - Chrome 확인: google-chrome --version" echo " - ChromeDriver 확인: chromedriver --version" echo "" echo "🔧 설정 파일 위치:" echo " - 환경변수: $(pwd)/.env" echo " - 데이터 저장: $(pwd)/data/" echo " - 애플리케이션: $(pwd)/app/" deactivate 2>/dev/null || true echo "" echo "✅ Review Analysis API 환경 설정이 완료되었습니다!"