@@ -20,31 +20,47 @@ if [ ! -f "deploy/docker-compose.prod.yml" ]; then
2020 exit 1
2121fi
2222
23- # 현재 실행 중인 컨테이너 중지 및 제거
24- echo " 기존 컨테이너 중지 중..."
25- docker-compose -f deploy/docker-compose.prod.yml down --remove-orphans || true
26-
27- # GitHub Container Registry에서 최신 이미지 풀
23+ # GitHub Container Registry에서 최신 이미지 풀 (Zero-downtime을 위해 먼저 실행)
2824echo " 최신 이미지 다운로드 중..."
29- echo " GHCR 이미진 Pull: ghcr.io/projectvg/projectvgapi:latest"
30- docker-compose -f deploy/docker-compose.prod.yml pull
25+ echo " GHCR 이미지 Pull: ghcr.io/projectvg/projectvgapi:latest"
26+ docker-compose -f deploy/docker-compose.prod.yml pull projectvg-api
3127
3228# 이미지 풀 후 확인
3329if ! docker images ghcr.io/projectvg/projectvgapi:latest | grep -q latest; then
3430 echo " ERROR: 이미지 풀에 실패했습니다. GitHub Container Registry 인증을 확인하세요."
3531 exit 1
3632fi
3733
38- # 서비스 시작
39- echo " 서비스 시작 중..."
40- docker-compose -f deploy/docker-compose.prod.yml up -d
34+ # 기존 API 컨테이너만 중지 및 제거 (Zero-downtime strategy)
35+ echo " 기존 API 컨테이너 교체 중..."
36+ echo " 현재 실행중인 컨테이너 확인:"
37+ docker ps -f " name=projectvg-api"
38+
39+ docker-compose -f deploy/docker-compose.prod.yml stop projectvg-api || true
40+ docker-compose -f deploy/docker-compose.prod.yml rm -f projectvg-api || true
41+
42+ # 새 이미지로 API 서비스만 시작
43+ echo " 새 이미지로 API 서비스 시작 중..."
44+ docker-compose -f deploy/docker-compose.prod.yml up -d projectvg-api
4145
4246# 서비스 상태 확인
43- echo " 서비스 상태 확인 중..."
44- sleep 10
47+ # 빌드 후 불필요한 이미지 정리
48+ echo " 이전 이미지 정리 중..."
49+ old_images=$( docker images ghcr.io/projectvg/projectvgapi -f " dangling=true" -q)
50+ if [ ! -z " $old_images " ]; then
51+ docker rmi $old_images -f 2> /dev/null || true
52+ echo " 이전 이미지 정리 완료"
53+ else
54+ echo " 정리할 이전 이미지 없음"
55+ fi
56+
57+ # 컨테이너 상태 확인
58+ echo " API 컨테이너 상태 확인 중..."
59+ sleep 3
4560
46- # 컨테이너 상태 출력
47- docker-compose -f deploy/docker-compose.prod.yml ps
61+ # API 컨테이너 상태만 출력
62+ echo " API 컨테이너 상태:"
63+ docker ps -f " name=projectvg-api"
4864
4965# 헬스체크 (API가 응답하는지 확인)
5066echo " 헬스체크 수행 중..."
7086
7187if [ $retry_count -eq $max_retries ]; then
7288 echo " ERROR: API 서버가 시작되지 않았습니다. 로그를 확인하세요."
73- echo " API 컨테이너 로그:"
74- echo " Docker 컨테이너 상태:"
89+ echo " API 컨테이너 상태:"
7590 docker ps -a --filter name=projectvg-api
76- echo " "
91+ echo " API 컨테이너 로그 (최근 50줄): "
7792 docker-compose -f deploy/docker-compose.prod.yml logs --tail=50 projectvg-api
93+
94+ echo " 롤백을 수행하시겠습니까? 이전 이미지로 복구할 수 있습니다."
7895 exit 1
7996fi
8097
@@ -83,6 +100,14 @@ echo "배포가 성공적으로 완료되었습니다!"
83100echo " API 엔드포인트: http://localhost:7910"
84101echo " 헬스체크: http://localhost:7910/health"
85102
86- # 로그 출력 (선택적)
87- echo " 최근 로그:"
88- docker-compose -f deploy/docker-compose.prod.yml logs --tail=20
103+ # 최근 API 로그 출력
104+ echo " 최근 API 로그 (20줄):"
105+ docker-compose -f deploy/docker-compose.prod.yml logs --tail=20 projectvg-api
106+
107+ # 배포 완료 상태 요약
108+ echo " "
109+ echo " === 배포 완료 상태 요약 ==="
110+ echo " API 컨테이너:"
111+ docker ps --format " table {{.Names}}\t{{.Status}}\t{{.Ports}}" -f " name=projectvg-api"
112+ echo " 이미지 정보:"
113+ docker images --format " table {{.Repository}}:{{.Tag}}\t{{.CreatedAt}}\t{{.Size}}" ghcr.io/projectvg/projectvgapi:latest
0 commit comments