#!/bin/bash # setup.sh - Restaurant API 환경 설정 스크립트 set -e echo "🍽️ Restaurant 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 curl wget jq # Python 버전 확인 PYTHON_VERSION=$(python3 -c "import sys; print('.'.join(map(str, sys.version_info[:2])))") 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 aiohttp pydantic python-multipart python-dotenv fi # 데이터 디렉토리 생성 echo "" echo "📁 데이터 디렉토리 설정 중..." mkdir -p data chmod 755 data echo "✅ 데이터 디렉토리 생성: $(pwd)/data" # 환경변수 파일 생성 (예시) echo "" echo "⚙️ 환경변수 파일 생성 중..." cat > .env << EOF # 카카오 API 설정 KAKAO_API_KEY=5cdc24407edbf8544f3954cfaa4650c6 # 서버 설정 HOST=0.0.0.0 PORT=18000 LOG_LEVEL=info # 기본 검색 설정 DEFAULT_QUERY=음식점 DEFAULT_REGION=서울 DEFAULT_SIZE=15 MAX_PAGES=10 # 파일 설정 OUTPUT_FILE=restaurant.json DATA_DIR=./data # 요청 설정 REQUEST_DELAY=0.1 REQUEST_TIMEOUT=30 EOF echo "✅ .env 파일 생성 완료" # 네트워크 연결 테스트 echo "" echo "🌐 네트워크 연결 테스트 중..." # 카카오 API 연결 테스트 if curl -s --connect-timeout 5 "https://dapi.kakao.com" > /dev/null; then echo "✅ 카카오 API 서버 연결 가능" else echo "❌ 카카오 API 서버 연결 실패" echo " 인터넷 연결 상태를 확인해주세요." fi # API 키 유효성 간단 테스트 echo "" echo "🔑 API 키 유효성 테스트 중..." API_KEY="5cdc24407edbf8544f3954cfaa4650c6" TEST_RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null \ -H "Authorization: KakaoAK ${API_KEY}" \ --data-urlencode "query=카카오프렌즈&size=1" \ "https://dapi.kakao.com/v2/local/search/keyword.json") if [ "${TEST_RESPONSE}" = "200" ]; then echo "✅ API 키 유효성 확인 완료" elif [ "${TEST_RESPONSE}" = "401" ]; then echo "❌ API 키 인증 실패" echo " .env 파일의 KAKAO_API_KEY를 확인해주세요." elif [ "${TEST_RESPONSE}" = "000" ]; then echo "⚠️ 네트워크 연결 문제로 API 키 테스트 불가" else echo "⚠️ API 키 테스트 실패 (HTTP ${TEST_RESPONSE})" fi # .env 파일 로딩 테스트 echo "" echo "🔧 .env 파일 로딩 테스트 중..." python3 -c " from dotenv import load_dotenv import os load_dotenv() port = os.getenv('PORT', '8000') data_dir = os.getenv('DATA_DIR', './data') print(f'✅ .env 파일 로딩 성공') print(f' - PORT: {port}') print(f' - DATA_DIR: {data_dir}') " 2>/dev/null && echo "✅ python-dotenv 동작 확인" || echo "❌ python-dotenv 설치 필요: pip install python-dotenv" # 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 "18000"; then echo "✅ 포트 18000 방화벽 규칙 확인됨" else echo "⚠️ 포트 18000 방화벽 규칙 없음" echo " 다음 명령어로 포트를 열어주세요:" echo " sudo ufw allow 18000" fi else echo "✅ UFW 방화벽 비활성화됨" fi else echo "✅ UFW 방화벽 미설치" fi echo "" echo "🎉 환경 설정 완료!" echo "" echo "📋 다음 단계:" echo "1. 가상환경 활성화:" echo " source venv/bin/activate" echo "" echo "2. 애플리케이션 실행:" echo " python app/main.py" echo " 또는" echo " uvicorn app.main:app --host 0.0.0.0 --port 18000 --reload" echo "" echo "3. 웹 브라우저에서 접속:" echo " http://localhost:18000 (메인 페이지)" echo " http://localhost:18000/docs (Swagger UI)" echo " http://localhost:18000/health (헬스체크)" echo "" echo "4. API 테스트:" echo " curl -X POST \"http://localhost:18000/collect\" \\" echo " -H \"Content-Type: application/json\" \\" echo " -d '{\"query\":\"치킨\",\"region\":\"서울\",\"pages\":2}'" echo "" echo "💡 문제 발생 시:" echo " - 로그 확인: tail -f 로그파일" echo " - 환경변수 확인: cat .env" echo " - .env 로딩 확인: python -c \"from dotenv import load_dotenv; load_dotenv(); import os; print(os.getenv('PORT'))\"" echo " - 네트워크 확인: curl https://dapi.kakao.com" echo "" echo "🔧 설정 파일 위치:" echo " - 환경변수: $(pwd)/.env" echo " - 데이터 저장: $(pwd)/data/" echo " - 애플리케이션: $(pwd)/app/" deactivate 2>/dev/null || true echo "" echo "✅ 환경 설정이 완료되었습니다!"