1+ #! /bin/bash
2+ PROFILE=$1
3+ PROJECT=SpringRestApi
4+ PROJECT_HOME=/home/happydaddy/${PROJECT}
5+ JAR_PATH=${PROJECT_HOME} /build/libs/api-0.0.1-SNAPSHOT.jar
6+ SVR_LIST=server_${PROFILE} .list
7+ SERVERS=` cat $SVR_LIST `
8+ DEPLOY_PATH=/home/ec2-user/app
9+ AWS_ID=ec2-user
10+ DATE=` date +%Y-%m-%d-%H-%M-%S`
11+ JAVA_OPTS=" -XX:MaxMetaspaceSize=128m -XX:+UseG1GC -Xss1024k -Xms128m -Xmx128m -Dfile.encoding=UTF-8"
12+ PEM=AwsFreetierKeyPair.pem
13+ PORT=8083
14+
15+ echo Deploy Start
16+ for server in $SERVERS ; do
17+ echo Target server - $server
18+ # Target Server에 배포 디렉터리 생성
19+ ssh -i $PEM $AWS_ID @$server " mkdir -p $DEPLOY_PATH /dist"
20+ # Target Server에 jar 이동
21+ echo ' Executable Jar Copying...'
22+ scp -i $PEM $JAR_PATH $AWS_ID @$server :~ /app/dist/$PROJECT -$DATE .jar
23+ # 이동한 jar파일의 바로가기(SymbolicLink)생성
24+ ssh -i $PEM $AWS_ID @$server " ln -Tfs $DEPLOY_PATH /dist/$PROJECT -$DATE .jar $DEPLOY_PATH /$PROJECT "
25+ # 현재 실행중인 서버 PID 조회
26+ runPid=$( ssh -i $PEM $AWS_ID @$server pgrep -f $PROJECT )
27+ if [ -z $runPid ]; then
28+ echo " No servers are running"
29+ fi
30+ # 현재 실행중인 서버의 포트를 조회. 추가로 실행할 서버의 포트 선정
31+ runPortCount=$( ssh -i $PEM $AWS_ID @$server ps -ef | grep $PROJECT | grep -v grep | grep $PORT | wc -l)
32+ if [ $runPortCount -gt 0 ]; then
33+ PORT=8084
34+ fi
35+ echo " Server $PORT Starting..."
36+ # 새로운 서버 실행
37+ ssh -i $PEM $AWS_ID @$server " nohup java -jar -Dserver.port=$PORT -Dspring.profiles.active=$PROFILE $JAVA_OPTS $DEPLOY_PATH /$PROJECT < /dev/null > std.out 2> std.err &"
38+ # 새롭게 실행한 서버의 health check
39+ echo " Health check $PORT "
40+ for retry in {1..10}
41+ do
42+ health=$( ssh -i $PEM $AWS_ID @$server curl -s http://localhost:$PORT /actuator/health)
43+ checkCount=$( echo $health | grep ' UP' | wc -l)
44+ if [ $checkCount -ge 1 ]; then
45+ echo " Server $PORT Started Normaly"
46+ # 기존 서버 Stop / Nginx 포트 변경 후 리스타트
47+ if [ $runPid -gt 0 ]; then
48+ echo " Server $runPid Stop"
49+ ssh -i $PEM $AWS_ID @$server " kill -TERM $runPid "
50+ sleep 5
51+ echo " Nginx Port Change"
52+ ssh -i $PEM $AWS_ID @$server " echo 'set \$ service_addr http://127.0.0.1:$PORT ;' | sudo tee /etc/nginx/conf.d/service_addr.inc"
53+ echo " Nginx reload"
54+ ssh -i $PEM $AWS_ID @$server " sudo service nginx reload"
55+ fi
56+ break ;
57+ else
58+ echo " Check - false"
59+ fi
60+ sleep 5
61+ done
62+ if [ $retry -eq 10 ]; then
63+ echo " Deploy Fail"
64+ fi
65+ done
66+ echo Deploy End
0 commit comments