EC2 서버 배포

Spring boot Server Deploy

Posted by Damin on April 1, 2021

프로젝트 Clone

2021-04-01 기준으로 EC2 18.04 Ubuntu free tier 를 새로 만들면 git은 깔려 있다.

그래도 혹시 모르니, git 설치 및 버전 확인을 해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt update
sudo apt upgrade

sudo apt install git

git --version # 이후에 다 깔렸는지 확인차 버전 확인 !

mkdir /home/ubuntu && mkdir /home/ubuntu/step1 # clone 받은 프로젝트를 저장할 디렉터리 생성

cd /home/ubuntu/step1 # 생성된 폴더로 이동

git clone (github에서 복사한 주소) # 이동 후 clone

cd /home/ubuntu/step1/{project-name} # 해당 프로젝트로 이동

chmod +x ./gradlew # gradlew 에 실행 권한 부여

배포 스크립트 만들기

step1 디렉터리에 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
REPOSITORY=/home/ubuntu/app/step1
PROJECT_NAME=spring-nginx-CD

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git Pull"

git pull

echo "> 프로젝트 Build 시작"

./gradlew build

echo "> step1 디렉터리로 이동"

cd $REPOSITORY

echo "> Build 파일 복사"

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.war $REPOSITORY/

echo "> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -fl {war파일 이름} | awk '{print $1}')

echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"

if [ -z "$CURRENT_PID" ]; then
   echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else    
        echo "> kill -15 $CURRENT_PID"
        kill -15 $CURRENT_PID
   sleep 5
fi
echo "> 새 애플리케이션 배포"
WAR_NAME=$(ls -tr $REPOSITORY/ | grep **.war | tail -n 1)
echo "> WAR Name: $WAR_NAME"
nohup java -jar \
       -Dspring.config.location=classpath:/application.properties,/home/ubuntu/app/application-rds.properties \
       $REPOSITORY/$WAR_NAME 2>&1 &

deploy 만든 위치에서 ./deploy.sh 명령어로 실행 후 확인!

gitignore 된 properties 만들어주기

보안을 위해 git 에 올라가지 않은 파일들을 만들어줘서, Spring Server 에서 환경설정을 불러올 수 있게 만들어 주자.

서버에서 직접 이 설정들을 가지고 있으면 된다.

/home/ubuntu/app 디렉터리에 ignore 된 properties 파일 생성

ex) vim /home/ubuntu/app/application-rds.properties

기존 프로젝트에 있는 application-rds.properties 파일의 내용을 복사 - 붙여넣기

인바운드 규칙 수정

ec2 보안정책에서 인바운드 규칙 수정을 해서 외부에서 접근이 가능하도록 만들자.

spring boot 의 기본 포트인 8080 포트를 모든 IP에서 접근 가능하도록 수정

그 다음 해당 포트로 접속 후 제대로 된 response 가 날라오는지 확인하자.