Back-end/Aws

[AWS] aws에 spring-boot 배포하기

moguogu 2021. 7. 28. 20:02

Springboot Jar 파일 배포

aws t2.micro에 구현한 프로젝트를 jar파일로 배포해 보자 .

이때 nginx로 로드밸런싱도 도전했다.


aws 배포 방법

먼저, t2.micro 인스턴스를 하나 만들어 둔 상태이다.

Gradle로 jar 파일 생성 및 putty에 전송

1. IntelliJ에서 bootJar을 통해서 jar 파일을 만들어준다
2. Putty로 ec2에 접속한다.
3. git clone으로 프로젝트를 다운받는다.
4. jar파일이나 war파일은 업로드하면 안되기 때문에 Filezila를 통해서 받아야한다.

jar 파일 실행

1. gradlew가 없어서 만들고 다시 github에 업로드한다.
gradle init #gradle초기화 진행
gradle wrapper 
2. 깃클론 및, 환경 구성
git clone "주소"
sudo apt-get update #업데이트
java -version #자바 버전 확인 
sudo chmod 777 ./gradlew #gradlew 권한 부여 필수 
sudo ./gradlew build #gradle 빌드
java -jar 파일명.jar #jar 파일 실행 테스트

jar파일을 실행 한 뒤, ec2인스턴스의 Ip주소:8080을 입력하여 제대로 출력되는지 확인한다.

3. deploy.sh파일 생성    
#!/bin/bash
REPOSITORY=/home/ubuntu/Springboot-JPA-hikariCP-restAPI-CRUD-example # TODO 경로 수정
cd $REPOSITORY
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
sudo ./gradlew build
echo "> Build 파일 복사"
sudo cp ./build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f Springboot-JPA-hikariCP-restAPI-CRUD-example) # TODO 피드명 수정
echo "$CURRENT_PID"
if [ -z $CURRENT_PID ]; then

        echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
        echo "> kill -2 $CURRENT_PID"
        kill -9 $CURRENT_PID
        sleep 5
fi
echo "> 새 어플리케이션 배포"
JAR_NAME=$(ls $REPOSITORY/ |grep 'restapi-0.0.1-SNAPSHOT.jar' | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME &
#nohup java -Dserver.port=9092 -jar 이름.jar

아랫줄의 주석 처럼 포트번호를 정해주어 열 수 있다.

sudo chmod 775 ./deploy.sh #권한 부여
./deploy.sh #배포 코드 실행 

배포 코드가 실행되면 putty를 닫아도 ec2의 주소로 이동하면 실행되는 것을 확인할 수 있다.

4. 포트 리다이렉트 하기   
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

위의 명령어를 사용하면 port번호 없이 주소만 입력해도 자동으로 실행된다.

이 과정까지하면 배포는 끝난다


5. nginx를 통한 로드 밸런싱
sudo yum install nginx #nginx 다운로드 
sudo vim /etc/nginx/nginx.conf #nginx 설정 파일 수정
sudo service nginx restart #파일 재설정 후 항상 재시작 해야 반영됨

고찰

이번에 배포를 하면서 배운게 있다.

1. 인스턴스를 만들고 elastic ip를 만들었으면 인스턴스를 중지시키면 비용이 부과된다.   

2. 로드 밸런싱은 아직 추가적으로 공부할 부분이 많은 것 같다. 
3. t2 micro는 nohup명령어가 2개 실행이 되지 않는다. (너무 작아서 그런듯)
4. putty 접속이 안될때 ec2의 인바운드 규칙 언제나 확인하자!!

nginx는 추가적으로 공부하고 다시 포스팅할 필요가 있는 것 같다.

참고한 블로그

1. gradlew 만들기

2. jar 파일 배포

3. Filezila로 aws ec2 연결

4. nginx 설치 및 로드밸런싱

'Back-end > Aws' 카테고리의 다른 글

[AWS] EC2 볼륨 확장  (0) 2021.07.29