#!/bin/bash # SOY NV AI 배포 스크립트 # 사용법: bash deploy.sh set -e # 오류 발생 시 스크립트 중단 echo "==========================================" echo "SOY NV AI 배포 스크립트" echo "==========================================" # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 변수 설정 PROJECT_DIR="/var/www/soy-nv-ai" VENV_DIR="$PROJECT_DIR/venv" SERVICE_NAME="soy-nv-ai" # 함수 정의 print_success() { echo -e "${GREEN}✓ $1${NC}" } print_error() { echo -e "${RED}✗ $1${NC}" } print_info() { echo -e "${YELLOW}ℹ $1${NC}" } # 1. 프로젝트 디렉토리 확인 echo "" print_info "1. 프로젝트 디렉토리 확인..." if [ ! -d "$PROJECT_DIR" ]; then print_error "프로젝트 디렉토리를 찾을 수 없습니다: $PROJECT_DIR" exit 1 fi print_success "프로젝트 디렉토리 확인 완료" # 2. 가상환경 확인 및 생성 echo "" print_info "2. 가상환경 확인..." if [ ! -d "$VENV_DIR" ]; then print_info "가상환경이 없습니다. 생성 중..." python3 -m venv "$VENV_DIR" print_success "가상환경 생성 완료" else print_success "가상환경 확인 완료" fi # 3. 가상환경 활성화 및 의존성 설치 echo "" print_info "3. 의존성 설치..." source "$VENV_DIR/bin/activate" pip install --upgrade pip --quiet pip install -r "$PROJECT_DIR/requirements.txt" --quiet print_success "의존성 설치 완료" # 4. 필요한 디렉토리 생성 echo "" print_info "4. 필요한 디렉토리 생성..." mkdir -p "$PROJECT_DIR/instance" mkdir -p "$PROJECT_DIR/uploads" mkdir -p "$PROJECT_DIR/vector_db" mkdir -p "$PROJECT_DIR/knowledge_graphs" mkdir -p "$PROJECT_DIR/logs" print_success "디렉토리 생성 완료" # 5. 데이터베이스 초기화 echo "" print_info "5. 데이터베이스 초기화..." cd "$PROJECT_DIR" python -c "from app import create_app; app = create_app(); app.app_context().push(); from app.database import db; db.create_all(); print('Database initialized')" 2>/dev/null || print_info "데이터베이스가 이미 존재하거나 초기화 중 오류 발생 (무시 가능)" print_success "데이터베이스 확인 완료" # 6. 권한 설정 echo "" print_info "6. 권한 설정..." chmod -R 755 "$PROJECT_DIR" chmod -R 775 "$PROJECT_DIR/uploads" 2>/dev/null || true chmod -R 775 "$PROJECT_DIR/instance" 2>/dev/null || true chmod -R 775 "$PROJECT_DIR/vector_db" 2>/dev/null || true print_success "권한 설정 완료" # 7. .env 파일 확인 echo "" print_info "7. 환경 변수 파일 확인..." if [ ! -f "$PROJECT_DIR/.env" ]; then print_error ".env 파일이 없습니다!" print_info ".env 파일을 생성해주세요." print_info "예시:" echo "SECRET_KEY=your-secret-key" echo "OLLAMA_BASE_URL=http://localhost:11434" echo "FLASK_ENV=production" else print_success ".env 파일 확인 완료" fi # 8. systemd 서비스 확인 echo "" print_info "8. systemd 서비스 확인..." if systemctl is-active --quiet "$SERVICE_NAME"; then print_info "서비스가 실행 중입니다. 재시작합니다..." sudo systemctl restart "$SERVICE_NAME" print_success "서비스 재시작 완료" elif systemctl is-enabled --quiet "$SERVICE_NAME" 2>/dev/null; then print_info "서비스를 시작합니다..." sudo systemctl start "$SERVICE_NAME" print_success "서비스 시작 완료" else print_info "서비스가 설정되지 않았습니다." print_info "다음 명령어로 서비스를 설정하세요:" echo "sudo systemctl enable $SERVICE_NAME" echo "sudo systemctl start $SERVICE_NAME" fi # 9. 서비스 상태 확인 echo "" print_info "9. 서비스 상태 확인..." sleep 2 if systemctl is-active --quiet "$SERVICE_NAME"; then print_success "서비스가 정상적으로 실행 중입니다!" sudo systemctl status "$SERVICE_NAME" --no-pager -l else print_error "서비스가 실행되지 않았습니다!" print_info "로그를 확인하세요:" echo "sudo journalctl -u $SERVICE_NAME -n 50" fi # 10. Nginx 확인 echo "" print_info "10. Nginx 상태 확인..." if systemctl is-active --quiet nginx; then print_success "Nginx가 실행 중입니다" sudo nginx -t else print_info "Nginx가 실행되지 않았습니다" fi echo "" echo "==========================================" print_success "배포 스크립트 실행 완료!" echo "==========================================" echo "" print_info "다음 단계:" echo "1. 서비스 로그 확인: sudo journalctl -u $SERVICE_NAME -f" echo "2. 웹사이트 접속 테스트: http://YOUR_SERVER_IP" echo "3. Nginx 로그 확인: sudo tail -f /var/log/nginx/soy-nv-ai-error.log" echo ""