327 lines
8.6 KiB
Bash
Executable File
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 "$@"
|