#!/bin/bash # 인페인팅 서버 자동 설치 스크립트 # 플랫폼 자동 감지 및 최적 설치 방법 선택 # Usage: ./install.sh set -e # 색상 코드 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' MAGENTA='\033[0;35m' NC='\033[0m' # No Color # 로고 출력 print_logo() { echo -e "${CYAN}" echo " ██║ ███╗ ██╗██████╗ █████╗ ██╗███╗ ██╗████████╗" echo " ██║ ████╗ ██║██╔══██╗██╔══██╗██║████╗ ██║╚══██╔══╝" echo " ██║ ██╔██╗ ██║██████╔╝███████║██║██╔██╗ ██║ ██║ " echo " ██║ ██║╚██╗██║██╔═══╝ ██╔══██║██║██║╚██╗██║ ██║ " echo " ██║ ██║ ╚████║██║ ██║ ██║██║██║ ╚████║ ██║ " echo " ╚═╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝ " echo "" echo " 🎨 AI 인페인팅 서버 - 자동 설치 도구" echo -e "${NC}" } # 로그 함수들 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_step() { echo -e "${CYAN}[STEP]${NC} $1" } log_platform() { echo -e "${MAGENTA}[PLATFORM]${NC} $1" } # 플랫폼 감지 detect_platform() { local arch=$(uname -m) local os_info=$(uname -a) log_step "플랫폼 감지 중..." if [[ "$arch" == "aarch64" ]] && echo "$os_info" | grep -q "tegra"; then PLATFORM="jetson" PLATFORM_NAME="NVIDIA Jetson Xavier" INSTALL_SCRIPT="setup_jetson.sh" log_platform "🚀 $PLATFORM_NAME 감지됨" elif [[ "$arch" == "x86_64" ]] || [[ "$arch" == "amd64" ]]; then PLATFORM="x86" PLATFORM_NAME="x86-64 Desktop" INSTALL_SCRIPT="setup_x86.sh" log_platform "🖥️ $PLATFORM_NAME 감지됨" elif [[ "$arch" == "aarch64" ]]; then PLATFORM="arm64" PLATFORM_NAME="ARM64 (Generic)" INSTALL_SCRIPT="setup_jetson.sh" log_platform "💻 $PLATFORM_NAME 감지됨 (Jetson 설치 방법 사용)" else log_error "지원하지 않는 아키텍처: $arch" echo "지원 플랫폼:" echo " - x86-64 (Intel/AMD)" echo " - ARM64 (NVIDIA Jetson Xavier)" exit 1 fi echo "감지된 정보:" echo " 아키텍처: $arch" echo " 플랫폼: $PLATFORM_NAME" echo " 설치 스크립트: $INSTALL_SCRIPT" echo "" } # GPU 정보 표시 show_gpu_info() { log_step "GPU 정보 확인 중..." if command -v nvidia-smi >/dev/null 2>&1; then echo "=== NVIDIA GPU 정보 ===" nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader 2>/dev/null | while read line; do echo " GPU: $line" done echo "" else log_warning "NVIDIA GPU 또는 드라이버가 설치되지 않았습니다." echo "" fi } # 시스템 요구사항 확인 check_requirements() { log_step "시스템 요구사항 확인 중..." local errors=0 # Python 3.8+ 확인 if command -v python3 >/dev/null 2>&1; then local python_version=$(python3 --version 2>&1 | awk '{print $2}') if python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)" 2>/dev/null; then log_success "Python $python_version 확인됨" else log_error "Python 3.8 이상이 필요합니다. 현재: $python_version" errors=$((errors + 1)) fi else log_error "Python3가 설치되지 않았습니다." errors=$((errors + 1)) fi # Git 확인 if command -v git >/dev/null 2>&1; then log_success "Git 확인됨" else log_warning "Git이 설치되지 않았습니다. 설치 과정에서 자동으로 설치됩니다." fi # 메모리 확인 if [ "$PLATFORM" = "jetson" ]; then local total_mem=$(free -g | grep '^Mem:' | awk '{print $2}') if [ "$total_mem" -ge 16 ]; then log_success "메모리 ${total_mem}GB 확인됨 (Jetson 권장: 16GB+)" else log_warning "메모리 ${total_mem}GB (권장: 16GB+)" fi else local total_mem=$(free -g | grep '^Mem:' | awk '{print $2}') if [ "$total_mem" -ge 8 ]; then log_success "메모리 ${total_mem}GB 확인됨" else log_warning "메모리 ${total_mem}GB (권장: 8GB+)" fi fi # 디스크 공간 확인 local free_space=$(df -BG . | tail -1 | awk '{print $4}' | sed 's/G//') if [ "$free_space" -ge 10 ]; then log_success "디스크 여유 공간 ${free_space}GB 확인됨" else log_warning "디스크 여유 공간 ${free_space}GB (권장: 10GB+)" fi if [ $errors -gt 0 ]; then log_error "필수 요구사항이 충족되지 않았습니다. 위 문제를 해결한 후 다시 시도하세요." exit 1 fi echo "" } # 설치 옵션 표시 show_installation_options() { echo "=== 설치 옵션 ===" echo "" if [ "$PLATFORM" = "jetson" ]; then echo "🚀 Jetson Xavier 최적화 설정:" echo " - ONNX Runtime GPU (ARM64 특화)" echo " - 32GB 통합 메모리 최적화" echo " - CUDA + TensorRT 가속" echo " - 세션 풀: LAMA(4), MIGAN(4), REMBG(3)" echo " - 워커: 8개 (자동 조정)" else echo "🖥️ x86-64 데스크톱 설정:" echo " - ONNX Runtime GPU (x86-64)" echo " - RTX GPU 최적화" echo " - CUDA + TensorRT 가속" echo " - 세션 풀: LAMA(3), MIGAN(3), REMBG(2)" echo " - 워커: 4-8개 (GPU 메모리에 따라)" fi echo "" } # 사용자 확인 confirm_installation() { echo "=== 설치 확인 ===" echo "다음 설정으로 설치를 진행합니다:" echo " 플랫폼: $PLATFORM_NAME" echo " 설치 스크립트: $INSTALL_SCRIPT" echo "" read -p "계속 진행하시겠습니까? (y/N): " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "설치가 취소되었습니다." exit 0 fi echo "" } # 메인 실행 main() { clear print_logo # 스크립트 디렉토리로 이동 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" cd "$SCRIPT_DIR" detect_platform show_gpu_info check_requirements show_installation_options confirm_installation # 플랫폼별 설치 스크립트 실행 log_step "플랫폼별 설치 스크립트 실행 중..." if [ ! -f "$INSTALL_SCRIPT" ]; then log_error "설치 스크립트를 찾을 수 없습니다: $INSTALL_SCRIPT" exit 1 fi chmod +x "$INSTALL_SCRIPT" bash "$INSTALL_SCRIPT" # 설치 완료 echo "" echo "==========================================" log_success "🎉 인페인팅 서버 설치 완료!" echo "==========================================" echo "" echo "다음 단계:" echo " 1. 서버 시작: bash scripts/start_server.sh" echo " 2. 서버 상태 확인: bash scripts/status.sh" echo " 3. 서버 중지: bash scripts/stop_server.sh" echo "" echo "접속 주소:" echo " 🖥️ 모니터링 대시보드: http://localhost:8009" echo " 🔗 API 엔드포인트: http://localhost:8008" echo " 📊 헬스체크: curl http://localhost:8008/api/v1/health" echo "" if [ "$PLATFORM" = "jetson" ]; then echo "Jetson Xavier 참고사항:" echo " - tegrastats로 시스템 상태 모니터링 가능" echo " - 32GB 통합 메모리로 다중 세션 최적화됨" echo " - GPU 온도/클럭 정보가 모니터링 대시보드에 표시됨" else echo "x86-64 참고사항:" echo " - nvidia-smi로 GPU 상태 확인 가능" echo " - GPU 메모리에 따라 세션 수 자동 조정됨" echo " - TensorRT 사용 시 최고 성능" fi echo "" } # 스크립트 실행 main "$@"