#!/bin/bash # ============================================================================= # M-Project Synology NAS 배포 스크립트 # ============================================================================= set -e echo "==========================================" echo "M-Project (부적합관리) 배포 시작" echo "==========================================" # 1. 환경 변수 파일 확인 if [ ! -f .env ]; then echo "❌ .env 파일이 없습니다." echo " .env.synology 파일을 복사하고 값을 수정하세요:" echo " cp .env.synology .env" exit 1 fi # 비밀번호 미설정 확인 if grep -q "변경필수" .env; then echo "❌ .env 파일에 기본값이 남아있습니다." echo " 모든 '변경필수' 항목을 실제 값으로 수정하세요." exit 1 fi # 2. Docker 이미지 빌드 echo "" echo "🔨 Docker 이미지 빌드 중..." docker-compose -f docker-compose.synology.yml build --no-cache # 3. 기존 컨테이너 중지 echo "" echo "🛑 기존 컨테이너 중지 중..." docker-compose -f docker-compose.synology.yml down 2>/dev/null || true # 4. 컨테이너 시작 echo "" echo "🚀 컨테이너 시작 중..." docker-compose -f docker-compose.synology.yml up -d # 5. DB 초기화 대기 echo "" echo "⏳ 데이터베이스 초기화 대기 중 (15초)..." sleep 15 # 6. DB 마이그레이션 실행 echo "" echo "📦 DB 마이그레이션 실행 중..." for sql_file in ./init-db/*.sql; do if [ -f "$sql_file" ]; then echo " 실행: $(basename "$sql_file")" docker exec -i m-project-db psql -U "${POSTGRES_USER:-mproject}" "${POSTGRES_DB:-mproject}" < "$sql_file" 2>/dev/null || true fi done # 7. 데이터베이스 복원 (백업 파일이 있는 경우) BACKUP_FILE=$(ls -t backup_*.sql 2>/dev/null | head -1) if [ -n "$BACKUP_FILE" ]; then echo "" read -p "📦 DB 백업 발견: $BACKUP_FILE - 복원하시겠습니까? (y/N) " -n 1 -r echo "" if [[ $REPLY =~ ^[Yy]$ ]]; then echo "📦 데이터베이스 복원 중..." docker exec -i m-project-db psql -U "${POSTGRES_USER:-mproject}" "${POSTGRES_DB:-mproject}" < "$BACKUP_FILE" echo "✅ 데이터베이스 복원 완료" fi fi # 8. 상태 확인 echo "" echo "==========================================" echo "📊 컨테이너 상태" echo "==========================================" docker-compose -f docker-compose.synology.yml ps # 9. 헬스체크 echo "" echo "🔍 서비스 확인 중..." sleep 5 check_service() { local name="$1" local url="$2" printf " %-20s " "$name" status=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "$url" 2>/dev/null || echo "000") if [ "$status" -ge 200 ] && [ "$status" -lt 400 ]; then echo "✅ OK ($status)" else echo "❌ FAIL ($status)" fi } check_service "Backend API" "http://localhost:16000/api/health" check_service "Frontend" "http://localhost:16080/" echo "" echo "==========================================" echo "✅ 배포 완료!" echo "==========================================" echo "" echo "접속 URL:" echo " - 웹 UI: http://NAS_IP:16080" echo " - API: http://NAS_IP:16000" echo " - DB: NAS_IP:16432 (PostgreSQL)" echo ""