-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
61 lines (52 loc) · 1.64 KB
/
deploy.sh
File metadata and controls
61 lines (52 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
# 1. 현재 떠있는 컨테이너 확인
IS_GREEN=$(docker ps | grep poti-green)
DEFAULT_CONF="/etc/nginx/conf.d/service-url.inc"
if [ -z "$IS_GREEN" ]; then
echo "### Blue => Green 배포"
TARGET_CONTAINER="poti-green"
TARGET_PORT=8081
STOP_CONTAINER="poti-blue"
else
echo "### Green => Blue 배포"
TARGET_CONTAINER="poti-blue"
TARGET_PORT=8080
STOP_CONTAINER="poti-green"
fi
# 2. 이미지 받기 및 실행
echo "### 1. 이미지 Pull..."
docker compose pull $TARGET_CONTAINER
echo "### 2. 컨테이너 실행..."
docker compose up -d $TARGET_CONTAINER
# 3. 헬스 체크
echo "### 3. Health Check (서버 뜰 때까지 대기)..."
HEALTH_CHECK_PASSED=false
for i in {1..10}; do
response=$(curl -s http://127.0.0.1:$TARGET_PORT/actuator/health)
if [ "$response" == "OK" ] || [ "$response" == '{"status":"UP"}' ]; then
echo "### ✅ 서버 정상 구동"
HEALTH_CHECK_PASSED=true
break
else
echo "### ⏳ 대기 중... ($i/10)"
sleep 10
fi
done
if [ "$HEALTH_CHECK_PASSED" = false ]; then
echo "### ❌ 헬스 체크 실패! 배포를 중단합니다."
docker compose stop $TARGET_CONTAINER
docker compose rm -f $TARGET_CONTAINER
exit 1
fi
# 4. Nginx 스위칭
echo "### 4. Nginx 포트 변경 ($TARGET_PORT) 및 Reload..."
echo "set \$service_url http://127.0.0.1:$TARGET_PORT;" | sudo tee $DEFAULT_CONF
sudo nginx -s reload
# 5. 기존 컨테이너 종료 (5초 대기)
echo "### ⏳ 기존 요청 처리 대기 (5초)..."
sleep 5
echo "### 5. 기존 컨테이너 중단..."
docker compose stop $STOP_CONTAINER
docker compose rm -f $STOP_CONTAINER
docker image prune -f
echo "### 🎉 배포 완료!"