- deploy/ 폴더: docker-compose.synology.yml, deploy.sh, package.sh - NAS 배포 패키지 생성/전송/설치 자동화 스크립트 - 삭제 로그 테이블 마이그레이션 (018_add_deletion_log_table.sql) - 사진 필드 마이그레이션 유틸리티 (migrate_add_photo_fields.py) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
107 lines
3.2 KiB
Bash
Executable File
107 lines
3.2 KiB
Bash
Executable File
#!/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 ""
|