#!/bin/bash # 인페인팅 서버 자동 설치 및 실행 스크립트 # 다른 머신에서 git clone 후 바로 실행할 수 있도록 합니다. set -e # 색상 코드 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 로그 함수들 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" } # 도움말 표시 show_help() { echo "인페인팅 서버 자동 설치 및 실행 스크립트" echo "" echo "사용법: $0 [옵션]" echo "" echo "옵션:" echo " --jetson Jetson Xavier 최적화 설치" echo " --x86 x86_64 시스템용 설치" echo " --no-venv 기존 가상환경 사용 (새로 생성하지 않음)" echo " --no-models 모델 파일 다운로드 건너뛰기" echo " --no-start 설치만 하고 서버 시작하지 않음" echo " -h, --help 이 도움말 표시" echo "" echo "예시:" echo " $0 # 시스템 자동 감지하여 설치 및 실행" echo " $0 --jetson # Jetson Xavier 최적화 설치" echo " $0 --x86 # x86_64 시스템용 설치" } # 기본 설정 JETSON_MODE=false X86_MODE=false CREATE_VENV=true DOWNLOAD_MODELS=true START_SERVER=true PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # 명령줄 인자 처리 while [[ $# -gt 0 ]]; do case $1 in --jetson) JETSON_MODE=true shift ;; --x86) X86_MODE=true shift ;; --no-venv) CREATE_VENV=false shift ;; --no-models) DOWNLOAD_MODELS=false shift ;; --no-start) START_SERVER=false shift ;; -h|--help) show_help exit 0 ;; *) log_error "알 수 없는 옵션: $1" show_help exit 1 ;; esac done # 시스템 자동 감지 detect_system() { if [ "$JETSON_MODE" = true ]; then SYSTEM_TYPE="jetson" log_info "🚁 Jetson Xavier 모드로 설정됨" elif [ "$X86_MODE" = true ]; then SYSTEM_TYPE="x86" log_info "🖥️ x86_64 모드로 설정됨" else # 자동 감지 if [ "$(uname -m)" = "aarch64" ] && uname -a | grep -q "tegra"; then SYSTEM_TYPE="jetson" log_info "🚁 Jetson Xavier (ARM64) 시스템 자동 감지" elif [ "$(uname -m)" = "x86_64" ]; then SYSTEM_TYPE="x86" log_info "🖥️ x86_64 시스템 자동 감지" else log_error "지원되지 않는 시스템 아키텍처: $(uname -m)" exit 1 fi fi } # Python 버전 확인 check_python() { log_info "Python 환경 확인 중..." if ! command -v python3 &> /dev/null; then log_error "Python3가 설치되지 않았습니다" log_info "Ubuntu/Debian: sudo apt install python3 python3-pip python3-venv" exit 1 fi PYTHON_VERSION=$(python3 --version | cut -d' ' -f2) log_info "Python 버전: $PYTHON_VERSION" # Python 3.8 이상 확인 if ! python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)"; then log_error "Python 3.8 이상이 필요합니다. 현재 버전: $PYTHON_VERSION" exit 1 fi log_success "Python 환경 확인 완료" } # 가상환경 설정 setup_venv() { if [ "$CREATE_VENV" = false ]; then log_info "기존 가상환경 사용" return 0 fi log_info "가상환경 설정 중..." cd "$PROJECT_ROOT" # 기존 가상환경 제거 (있다면) if [ -d "venv" ]; then log_warning "기존 가상환경 제거 중..." rm -rf venv fi # 새 가상환경 생성 python3 -m venv venv # 가상환경 활성화 source venv/bin/activate # pip 업그레이드 pip install --upgrade pip log_success "가상환경 설정 완료" } # 의존성 설치 install_dependencies() { log_info "의존성 설치 중..." cd "$PROJECT_ROOT" # 가상환경 활성화 확인 if [ "$CREATE_VENV" = true ]; then source venv/bin/activate fi # requirements.txt 확인 if [ "$SYSTEM_TYPE" = "x86" ]; then REQ_FILE="requirements_x86.txt" else REQ_FILE="requirements.txt" fi if [ ! -f "$REQ_FILE" ]; then log_error "$REQ_FILE 파일을 찾을 수 없습니다" exit 1 fi # 시스템별 최적화 설치 if [ "$SYSTEM_TYPE" = "jetson" ]; then log_info "Jetson Xavier 최적화 패키지 설치 중..." # Jetson 전용 패키지가 있다면 여기에 추가 fi # 기본 패키지 설치 pip install -r "$REQ_FILE" log_success "의존성 설치 완료" } # 모델 파일 확인 및 다운로드 setup_models() { if [ "$DOWNLOAD_MODELS" = false ]; then log_info "모델 파일 다운로드 건너뛰기" return 0 fi log_info "모델 파일 확인 중..." cd "$PROJECT_ROOT" # 모델 디렉토리 생성 mkdir -p app/models/onnx mkdir -p app/models/pt # 필요한 모델 파일들 확인 MODEL_FILES_MISSING=false if [ ! -f "app/models/onnx/migan_pipeline_v2.onnx" ]; then log_warning "MIGAN 모델 파일이 없습니다: app/models/onnx/migan_pipeline_v2.onnx" MODEL_FILES_MISSING=true fi if [ ! -f "app/models/pt/big-lama.pt" ]; then log_warning "LAMA 모델 파일이 없습니다: app/models/pt/big-lama.pt" MODEL_FILES_MISSING=true fi if [ "$MODEL_FILES_MISSING" = true ]; then log_warning "일부 모델 파일이 없습니다" log_info "모델 파일들을 수동으로 다운로드하여 다음 위치에 배치하세요:" log_info " - MIGAN: app/models/onnx/migan_pipeline_v2.onnx" log_info " - LAMA: app/models/pt/big-lama.pt" log_info "서버는 사용 가능한 모델로만 동작합니다" else log_success "모든 모델 파일 확인 완료" fi } # 환경 설정 setup_environment() { log_info "환경 설정 중..." cd "$PROJECT_ROOT" # .env 파일 생성 (없다면) if [ ! -f ".env" ] && [ -f ".env.example" ]; then cp .env.example .env log_info ".env 파일 생성됨" fi log_success "환경 설정 완료" } # 서버 시작 start_server() { if [ "$START_SERVER" = false ]; then log_info "서버 시작 건너뛰기" return 0 fi log_info "서버 시작 중..." cd "$PROJECT_ROOT" # start_server.sh 실행 권한 확인 if [ ! -x "scripts/start_server.sh" ]; then chmod +x scripts/start_server.sh fi # 시스템별 최적화 옵션 if [ "$SYSTEM_TYPE" = "jetson" ]; then ./scripts/start_server.sh --jetson-optimize else ./scripts/start_server.sh fi } # 설치 완료 정보 출력 print_completion_info() { echo "" echo "==========================================" echo "🎉 인페인팅 서버 설치 완료!" echo "==========================================" echo "시스템 타입: $SYSTEM_TYPE" echo "프로젝트 경로: $PROJECT_ROOT" if [ "$START_SERVER" = true ]; then echo "" echo "🚀 서버 접속 정보:" echo " - 메인 API 서버: http://localhost:8008" echo " - API 문서: http://localhost:8008/docs" echo " - 모니터링 대시보드: http://localhost:8888" echo " - 헬스 체크: http://localhost:8008/health" else echo "" echo "서버를 시작하려면 다음 명령을 실행하세요:" echo " cd $PROJECT_ROOT" echo " ./scripts/start_server.sh" fi echo "" echo "🛠️ 유용한 명령어:" echo " - 서버 중지: ./scripts/stop_server.sh" echo " - 서버 상태: ./scripts/status.sh" echo " - API 테스트: python tests/scripts/test_api.py" echo "" echo "📚 더 많은 정보는 README.md를 참고하세요" echo "==========================================" } # 메인 실행 함수 main() { echo "🚀 인페인팅 서버 자동 설치 시작" echo "==========================================" detect_system check_python setup_venv install_dependencies setup_models setup_environment start_server print_completion_info } # 스크립트 실행 main "$@"