-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdeploy.sh
executable file
ยท79 lines (62 loc) ยท 2.18 KB
/
deploy.sh
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
main() {
PRODUCTION_SERVER="https://habitbread.com"
BLUE_SERVER="http://localhost:3000"
GREEN_SERVER="http://localhost:4000"
BLUE=$(curl -s $BLUE_SERVER)
GREEN=$(curl -s $GREEN_SERVER)
if [ -z "$BLUE" ]
then
echo "Changing Green -> Blue Server"
sudo cp -f -v ./nginx/conf.d/upstream.blue.conf ./nginx/conf.d/upstream.conf
docker-compose -f docker-compose.blue.yml up -d
wait_server $BLUE_SERVER
if [ $? -eq 0 ]; then exit 1; fi # Response fail
docker exec -t node-nginx-lb service nginx reload
wait_server $PRODUCTION_SERVER
if [ $? -eq 0 ]; then # Response fail -> restore
sudo cp -f ./nginx/conf.d/upstream.green.conf ./nginx/conf.d/upstream.conf
docker exec -t node-nginx-lb service nginx reload
docker-compose -f docker-compose.blue.yml down
else # Success
docker-compose -f docker-compose.green.yml down
docker exec -t node-server-blue pm2 scale node-server 2
fi
else
echo "Changing Blue -> Green Server"
sudo cp -f -v ./nginx/conf.d/upstream.green.conf ./nginx/conf.d/upstream.conf
docker-compose -f docker-compose.green.yml up -d
wait_server $GREEN_SERVER
if [ $? -eq 0 ]; then exit 1; fi
docker exec -t node-nginx-lb service nginx reload
wait_server $PRODUCTION_SERVER
if [ $? -eq 0 ]; then # Response fail -> restore
sudo cp -f ./nginx/conf.d/upstream.blue.conf ./nginx/conf.d/upstream.conf
docker exec -t node-nginx-lb service nginx reload
docker-compose -f docker-compose.green.yml down
else # Success
docker-compose -f docker-compose.blue.yml down
docker exec -t node-server-green pm2 scale node-server 2
fi
fi
}
# ์๋ฒ ์ฌ๋ผ๊ฐ ๋ ๊น์ง waitํ๋ ํจ์
function wait_server() {
SERVER_URL=$1
max_iterations=10
iterations=1
while true; do
echo "$SERVER_URL : Connection Count $iterations"
sleep 5
http_code=$(curl -s -o /dev/null -w '%{http_code}' $SERVER_URL)
if [ $http_code -eq 200 ]; then # ==
echo "Server Up"; return 1;
fi
if [ $iterations -ge $max_iterations ]; then # >=
echo "Loop Timeout"; return 0;
fi
((iterations++))
done
}
# ๋ฉ์ธ ํจ์ ์คํ
main