#!/bin/bash # TK-FB-Project 시놀로지 NAS 923+ 배포 스크립트 # 생성일: 2025-11-05 # 작성자: TK-FB-Project Team set -e echo "🚀 TK-FB-Project 시놀로지 배포 시작..." # 색상 정의 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" } # 1. 시스템 요구사항 확인 log_info "시스템 요구사항 확인 중..." if ! command -v docker &> /dev/null; then log_error "Docker가 설치되지 않았습니다. Docker를 먼저 설치해주세요." exit 1 fi if ! command -v docker-compose &> /dev/null; then log_error "Docker Compose가 설치되지 않았습니다. Docker Compose를 먼저 설치해주세요." exit 1 fi log_success "Docker 및 Docker Compose 확인 완료" # 2. 필요한 디렉토리 생성 log_info "시놀로지 볼륨 디렉토리 생성 중..." VOLUME_PATH="/volume2/docker/tkfb" sudo mkdir -p ${VOLUME_PATH}/{mysql_data,api_logs,api_uploads,fastapi_logs,redis_data} sudo chmod -R 755 ${VOLUME_PATH} log_success "볼륨 디렉토리 생성 완료" # 3. 환경 설정 파일 준비 log_info "환경 설정 파일 준비 중..." if [ ! -f ".env" ]; then if [ -f "env_config.txt" ]; then cp env_config.txt .env log_success "환경 설정 파일 생성 완료" else log_error "env_config.txt 파일이 없습니다." exit 1 fi else log_warning "기존 .env 파일이 존재합니다. 백업 후 계속 진행합니다." cp .env .env.backup.$(date +%Y%m%d_%H%M%S) fi # 4. 기존 컨테이너 정리 log_info "기존 컨테이너 정리 중..." if [ "$(docker ps -aq -f name=tkfb_)" ]; then docker stop $(docker ps -aq -f name=tkfb_) 2>/dev/null || true docker rm $(docker ps -aq -f name=tkfb_) 2>/dev/null || true log_success "기존 컨테이너 정리 완료" fi # 5. Docker 이미지 빌드 log_info "Docker 이미지 빌드 중..." docker-compose build --no-cache log_success "Docker 이미지 빌드 완료" # 6. 서비스 시작 log_info "서비스 시작 중..." docker-compose up -d # 7. 서비스 상태 확인 log_info "서비스 상태 확인 중..." sleep 30 # 각 서비스 헬스체크 services=("tkfb_db_prod" "tkfb_api_prod" "tkfb_web_prod" "tkfb_fastapi_prod") for service in "${services[@]}"; do if [ "$(docker ps -q -f name=$service -f status=running)" ]; then log_success "$service 서비스 실행 중" else log_error "$service 서비스 실행 실패" docker logs $service --tail 20 fi done # 8. 네트워크 연결 테스트 log_info "네트워크 연결 테스트 중..." # API 서버 테스트 if curl -f http://localhost:20005/api/ping >/dev/null 2>&1; then log_success "API 서버 연결 성공 (포트: 20005)" else log_warning "API 서버 연결 실패 - 잠시 후 다시 시도해주세요" fi # 웹 서버 테스트 if curl -f http://localhost:20000 >/dev/null 2>&1; then log_success "웹 서버 연결 성공 (포트: 20000)" else log_warning "웹 서버 연결 실패 - 잠시 후 다시 시도해주세요" fi # 9. 배포 완료 안내 echo "" echo "🎉 TK-FB-Project 시놀로지 배포 완료!" echo "" echo "📋 접속 정보:" echo " - 메인 애플리케이션: http://[시놀로지IP]:20000" echo " - API 서버: http://[시놀로지IP]:20005" echo " - FastAPI 브리지: http://[시놀로지IP]:8000" echo " - phpMyAdmin: http://[시놀로지IP]:8080" echo "" echo "🔧 관리 명령어:" echo " - 서비스 중지: docker-compose down" echo " - 서비스 재시작: docker-compose restart" echo " - 로그 확인: docker-compose logs -f [서비스명]" echo " - 상태 확인: docker-compose ps" echo "" echo "📁 데이터 위치: ${VOLUME_PATH}" echo "" log_success "배포 스크립트 실행 완료"