inpaintServer/scripts/setup_and_run.sh

327 lines
8.6 KiB
Bash
Executable File

#!/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 "$@"