스크립트 수정
This commit is contained in:
parent
e02dd258b6
commit
ea1e46e52c
|
|
@ -0,0 +1,288 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "============================================"
|
||||
echo "WACE 솔루션 - 전체 서비스 시작 (강제 업데이트) - Linux"
|
||||
echo "============================================"
|
||||
|
||||
echo ""
|
||||
echo "🚀 최신 코드로 백엔드와 프론트엔드를 강제 업데이트하여 시작합니다..."
|
||||
echo ""
|
||||
|
||||
# 시스템 정보 출력
|
||||
echo "시스템 정보:"
|
||||
echo " OS: $(uname -s)"
|
||||
echo " Architecture: $(uname -m)"
|
||||
echo " Kernel: $(uname -r)"
|
||||
echo ""
|
||||
|
||||
# Docker 및 Docker Compose 버전 확인
|
||||
echo "Docker 환경 확인:"
|
||||
docker --version 2>/dev/null || echo " ❌ Docker가 설치되지 않았습니다."
|
||||
docker-compose --version 2>/dev/null || echo " ❌ Docker Compose가 설치되지 않았습니다."
|
||||
echo ""
|
||||
|
||||
# Git 상태 확인
|
||||
echo "============================================"
|
||||
echo "0. Git 상태 확인 및 최신 코드 동기화"
|
||||
echo "============================================"
|
||||
|
||||
echo "현재 Git 상태:"
|
||||
git status --porcelain
|
||||
|
||||
echo ""
|
||||
echo "현재 브랜치: $(git branch --show-current)"
|
||||
echo "최신 커밋: $(git log -1 --oneline)"
|
||||
|
||||
# 수정된 파일이 있는지 확인
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo ""
|
||||
echo "⚠️ 수정된 파일이 있습니다. 다음 중 선택하세요:"
|
||||
echo "1. 수정사항을 커밋하고 계속"
|
||||
echo "2. 수정사항을 임시 저장(stash)하고 계속"
|
||||
echo "3. 수정사항을 무시하고 강제 리셋 후 계속"
|
||||
echo "4. 현재 상태로 빌드 계속"
|
||||
echo ""
|
||||
read -p "선택하세요 (1-4): " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
echo "변경사항을 커밋합니다..."
|
||||
git add .
|
||||
git commit -m "Auto commit before deployment - $(date)"
|
||||
;;
|
||||
2)
|
||||
echo "변경사항을 임시 저장합니다..."
|
||||
git stash push -m "Auto stash before deployment - $(date)"
|
||||
;;
|
||||
3)
|
||||
echo "변경사항을 무시하고 강제 리셋합니다..."
|
||||
git reset --hard HEAD
|
||||
git clean -fd
|
||||
;;
|
||||
4)
|
||||
echo "현재 상태로 계속합니다..."
|
||||
;;
|
||||
*)
|
||||
echo "잘못된 선택입니다. 현재 상태로 계속합니다..."
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# 원격 저장소에서 최신 코드 가져오기
|
||||
echo ""
|
||||
echo "원격 저장소에서 최신 코드를 가져옵니다..."
|
||||
git fetch origin
|
||||
current_branch=$(git branch --show-current)
|
||||
git pull origin $current_branch || echo "⚠️ Pull 실패 - 현재 상태로 계속합니다."
|
||||
|
||||
# 기존 컨테이너 및 이미지 완전 정리
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "1. 기존 서비스 완전 정리 중..."
|
||||
echo "============================================"
|
||||
|
||||
# 모든 관련 컨테이너 중지 및 제거
|
||||
echo "기존 컨테이너 중지 및 제거 중..."
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml down -v --remove-orphans 2>/dev/null || true
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml down -v --remove-orphans 2>/dev/null || true
|
||||
|
||||
# 관련 컨테이너 강제 제거
|
||||
docker stop pms-backend-prod pms-frontend-linux 2>/dev/null || true
|
||||
docker rm pms-backend-prod pms-frontend-linux 2>/dev/null || true
|
||||
|
||||
# 관련 이미지 제거 (캐시 무효화)
|
||||
echo "기존 이미지 제거 중..."
|
||||
docker rmi $(docker images | grep -E "(pms-|erp-node)" | awk '{print $3}') 2>/dev/null || true
|
||||
|
||||
# Docker 시스템 정리
|
||||
echo "Docker 시스템 정리 중..."
|
||||
docker system prune -f --volumes 2>/dev/null || true
|
||||
docker builder prune -f 2>/dev/null || true
|
||||
|
||||
# 네트워크 재생성
|
||||
echo "네트워크 재생성..."
|
||||
docker network rm pms-network 2>/dev/null || true
|
||||
docker network create pms-network 2>/dev/null || echo "네트워크 생성 실패 - 기본 네트워크 사용"
|
||||
|
||||
# 백엔드 먼저 시작
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "2. 백엔드 서비스 시작 중..."
|
||||
echo "============================================"
|
||||
|
||||
# 백엔드 의존성 체크
|
||||
echo "백엔드 의존성 확인 중..."
|
||||
if [ ! -f "backend-node/package.json" ]; then
|
||||
echo "❌ backend-node/package.json을 찾을 수 없습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "backend-node/src/app.ts" ]; then
|
||||
echo "❌ backend-node/src/app.ts를 찾을 수 없습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 백엔드 빌드 (캐시 무시)
|
||||
echo "백엔드 이미지 빌드 중... (캐시 무시)"
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml build --no-cache --pull
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ 백엔드 빌드 실패"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "백엔드 서비스 시작 중..."
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml up -d
|
||||
|
||||
echo ""
|
||||
echo "⏳ 백엔드 서비스 안정화 대기 중... (45초)"
|
||||
sleep 45
|
||||
|
||||
# 백엔드 상태 확인
|
||||
echo "백엔드 서비스 상태 확인:"
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml ps
|
||||
|
||||
# 백엔드 로그 확인
|
||||
echo ""
|
||||
echo "백엔드 최근 로그:"
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=10
|
||||
|
||||
# 프론트엔드 시작
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "3. 프론트엔드 서비스 시작 중..."
|
||||
echo "============================================"
|
||||
|
||||
# 프론트엔드 의존성 체크
|
||||
echo "프론트엔드 의존성 확인 중..."
|
||||
if [ ! -f "frontend/package.json" ]; then
|
||||
echo "❌ frontend/package.json을 찾을 수 없습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "frontend/next.config.mjs" ]; then
|
||||
echo "❌ frontend/next.config.mjs를 찾을 수 없습니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "프론트엔드 이미지 빌드 중... (캐시 무시)"
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml build --no-cache --pull
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ 프론트엔드 빌드 실패"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "프론트엔드 서비스 시작 중..."
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml up -d
|
||||
|
||||
echo ""
|
||||
echo "⏳ 프론트엔드 서비스 안정화 대기 중... (30초)"
|
||||
sleep 30
|
||||
|
||||
# 프론트엔드 상태 확인
|
||||
echo "프론트엔드 서비스 상태 확인:"
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml ps
|
||||
|
||||
# 프론트엔드 로그 확인
|
||||
echo ""
|
||||
echo "프론트엔드 최근 로그:"
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml logs --tail=10
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "🎉 모든 서비스가 시작되었습니다!"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "📊 서비스 접속 정보:"
|
||||
echo " [DATABASE] PostgreSQL: http://39.117.244.52:11132"
|
||||
echo " [BACKEND] Spring Boot: http://localhost:8080/api"
|
||||
echo " [FRONTEND] Next.js: http://localhost:5555"
|
||||
echo ""
|
||||
|
||||
# 서비스 헬스체크
|
||||
echo ""
|
||||
echo "🏥 서비스 헬스체크 수행 중..."
|
||||
echo ""
|
||||
|
||||
# 백엔드 헬스체크 (최대 2분 대기)
|
||||
echo "백엔드 헬스체크..."
|
||||
backend_healthy=false
|
||||
for i in {1..24}; do
|
||||
if curl -s -f http://localhost:8080/health >/dev/null 2>&1; then
|
||||
echo " ✅ 백엔드 서비스 정상"
|
||||
backend_healthy=true
|
||||
break
|
||||
else
|
||||
echo " ⏳ 백엔드 응답 대기 중... ($i/24)"
|
||||
sleep 5
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$backend_healthy" = false ]; then
|
||||
echo " ❌ 백엔드 헬스체크 실패"
|
||||
echo " 백엔드 로그:"
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=20
|
||||
fi
|
||||
|
||||
# 프론트엔드 헬스체크 (최대 1분 대기)
|
||||
echo "프론트엔드 헬스체크..."
|
||||
frontend_healthy=false
|
||||
for i in {1..12}; do
|
||||
if curl -s -f http://localhost:5555 >/dev/null 2>&1; then
|
||||
echo " ✅ 프론트엔드 서비스 정상"
|
||||
frontend_healthy=true
|
||||
break
|
||||
else
|
||||
echo " ⏳ 프론트엔드 응답 대기 중... ($i/12)"
|
||||
sleep 5
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$frontend_healthy" = false ]; then
|
||||
echo " ❌ 프론트엔드 헬스체크 실패"
|
||||
echo " 프론트엔드 로그:"
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml logs --tail=20
|
||||
fi
|
||||
|
||||
# 최종 상태 요약
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "🎯 배포 완료 요약"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Git 정보:"
|
||||
echo " 브랜치: $(git branch --show-current)"
|
||||
echo " 커밋: $(git log -1 --oneline)"
|
||||
echo " 상태: $(git status --porcelain | wc -l) 개의 수정된 파일"
|
||||
echo ""
|
||||
echo "서비스 상태:"
|
||||
if [ "$backend_healthy" = true ]; then
|
||||
echo " ✅ 백엔드: 정상"
|
||||
else
|
||||
echo " ❌ 백엔드: 오류"
|
||||
fi
|
||||
|
||||
if [ "$frontend_healthy" = true ]; then
|
||||
echo " ✅ 프론트엔드: 정상"
|
||||
else
|
||||
echo " ❌ 프론트엔드: 오류"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔧 유용한 명령어:"
|
||||
echo " 전체 로그 확인: docker-compose -f docker/prod/docker-compose.backend.prod.yml -f docker/prod/docker-compose.frontend.prod.yml logs -f"
|
||||
echo " 백엔드 로그: docker-compose -f docker/prod/docker-compose.backend.prod.yml logs -f"
|
||||
echo " 프론트엔드 로그: docker-compose -f docker/prod/docker-compose.frontend.prod.yml logs -f"
|
||||
echo " 컨테이너 상태: docker ps"
|
||||
echo " 서비스 중지: ./stop-all-linux.sh"
|
||||
echo ""
|
||||
|
||||
if [ "$backend_healthy" = true ] && [ "$frontend_healthy" = true ]; then
|
||||
echo "🎯 성공! 브라우저에서 http://localhost:5555 을 확인하세요."
|
||||
else
|
||||
echo "⚠️ 일부 서비스에 문제가 있습니다. 로그를 확인해주세요."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
read -p "계속하려면 Enter 키를 누르세요..."
|
||||
|
|
@ -45,7 +45,7 @@ docker network create pms-network 2>/dev/null || echo "네트워크가 이미
|
|||
|
||||
# 백엔드 빌드 및 시작
|
||||
echo "백엔드 이미지 빌드 중..."
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml build --no-cache
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml build --no-cache --pull
|
||||
|
||||
echo "백엔드 서비스 시작 중..."
|
||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml up -d
|
||||
|
|
@ -65,7 +65,7 @@ echo "2. 프론트엔드 서비스 시작 중..."
|
|||
echo "============================================"
|
||||
|
||||
echo "프론트엔드 이미지 빌드 중..."
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml build --no-cache
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml build --no-cache --pull
|
||||
|
||||
echo "프론트엔드 서비스 시작 중..."
|
||||
docker-compose -f docker/prod/docker-compose.frontend.prod.yml up -d
|
||||
|
|
|
|||
Loading…
Reference in New Issue