AWS

스프링부트 aws ec2 리눅스 서버에 배포하기

코딩공장공장장 2021. 5. 23. 22:16

 

스프링부트를 aws ec2 리눅스 서버에 배포해보겠습니다. 

 

배포하기전 미리 준비해야할 사항이 있는데

 

배포할 프로젝트를 git에 push 하여주세요.

 

그리고 ec2 서버도 미리 만들어놔주세요.

 

셋팅은 같이 할 것입니다. 

 

목차는 아래와 같습니다.

 

  • ec2 서버에 자바 설치 
  • ec2 서버에 깃 설치
  • 깃으로 리포지터리 클론
  • 배포

 

 

ec2 서버에 자바 설치 

 

자신의 스프링부트 자바버전에 맞게 자바를 다운 받겠습니다. 

 

먼저 다운 가능한 자바 버전 목록을 보겠습니다.

 

(참고로 root로 로그인해주세요. 자바 다운 및 환경설정은 루트권한에서만 가능합니다.)

 

yum list java*jdk-devel

 

 

제 프로젝트는 자바 8 버전에 맞춰져 있어서 8버전으로 다운을 받겠습니다.

 

yum install java-1.8.0-openjdk-devel.x86_64

 

본인의 버전에 맞게 다운 받아주세요.

 

 

설치하는데 y/n이 나오면 y를 눌러주세요.

 

설치를 확인하겠습니다.

 

javac -version

rpm -qa java*jdk-devel

 

 

자바의 설치 경로를 알기 위해

 

which javac

readlink -f /usr/bin/javac

 

라고 입력합니다. which javac는 javac명령어의 위치를 알려주고, 이때 나온 결과는 심볼릭 링크이므로

 

실제 경로를 알기 위해 readlink -f /usr/bin/javac라고 입력해줍니다.

 

 

 

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.amzn2.0.1.x86_64가 JAVA_HOME의 경로가 됩니다.

 

 

환경변수 등록을 위해

 

vi /etc/profile

 

명령어를 입력하여 맨아래에

 

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.amzn2.0.1.x86_64

입력을 해줍니다.

 

 

 

vi 편집기를 잘 사용하지 못하시는 분은 vi편집기를 검색하여 간단한 사용법을 보고 따라해보시기 바랍니다.

 

 

:wq를 누르고 편집기를 저장하고 나오셨다면

 

source /etc/profile

 

을 입력하여 수정 사항이 바로 반영될수 있도록 하고

 

$JAVA_HOME/bin/javac -version

 

명령어를 통해 정상적으로 환경변수가 설정이 되었는지 확인합니다.

 

 

 

 

위와 같은 결과를 얻었다면 환경변수가 올바르게 적용된 것 입니다.

 

 

 

 

ec2 서버에 깃 설치

 

yum install -y git

 

깃 설치후 아래의 명령어로 깃이 올바르게 설치됬는지 확인 해보세요.

 

git --version

 

git 버전이 나온다면 올바르게 설치된것입니다.

 

 

 

 

깃으로 리포지터리 클론

 

 

 이제 루트에서 exit 하고 ec2-user 권한으로 배포를 하겠습니다. 

 

 

/home/ec2-user 밑에 apps 폴더를 만들고 이 apps 폴더에 배포할 프로젝트를 다운 받겠습니다.

 

cd /home/ec2-user

mkdir apps

cd apps

 

 

자 이제 배포할 깃 리포지터리 url을 복사해와주세요.

 

 

 

git clone https://github.com/****/myordinary.git

 

깃으로 클론 햇다면 자신의 배포한 폴더로 들어가주세요.

 

cd myordinary

 

자 이제 ec2-user에 빌드 권한을 부여하겠습니다.

 

sudo chmod 777 ./gradlew

 

 

자 이제 모든 준비는 끝이났고 아래 명령어를 입력하여 빌드를 하겠습니다.

 

./gradlew build

 

빌드 success 한 경우가 있고 빌드 failed가 뜨는 경우도 있을 것입니다.

 

 

저의 경우에도 initializationError와 unmappable character for encoding UTF-8 에러로 failed가 떳지만

 

작동에 지장이 없습니다.(unmappable character for encoding UTF-8은 작동에 지장있음)

 

우선 배포하는 과정을 위한 글이니 무시하고 진행하겠습니다. 

 

( 혹시 저처럼 unmappable character for encoding UTF-8 에러 나신 분은 맨 밑에 참고해주세요.)

 

 

 

 

이제 하위 폴더인 build/libs로 가서 다운받아진 jar파일을 확인해보세요.

 

cd build/libs

ll

 

 

위 처럼 jar파일이 뜰것입니다. 하나만 뜨는 경우도 잇을텐데 신경쓰지 말고

 

나와 있는 jar파일을 실행하겠습니다. 

 

java -jar myordinary-0.0.1-snapshot.jar

 

 

 

자 이렇게 배포를 완료했습니다. 

 

그런데 지금 실행한 방식으로는 putty 창을 끄면 서버도 종료됩니다. 

 

putty창 종료와 상관없이 계속 실행될수 있도록 하며

 

또 지금 알아본건 배포는 알아봤지만 재배포에 대해서는 안알아봤죠

 

재배포 하는 방법도 알아보겠습니다. 

 

우선 재배포하는 방법부터 

 

재배포 하는 방법

 

수정한 내용을 깃에 푸시 했다면, ec2 리눅스에서 프로젝트 경로로 이동하여 pull 명령어를 실행합니다. 

 

cd /home/ec2-user/myordinary

git pull

 

그 다음 과정은 이전과 같습니다. 

 

 

빌드하고

 

./gradlew build

 

 

jar 파일이 있는 위치로 이동한 다음 

 

cd build/libs

ll

 

jar 파일을 실행하면 됩니다.

java -jar myordinary-0.0.1-snapshot.jar

 

 

배포용 코드 작성

 

이제 root권한으로 로그인 합니다. 

 

 

배포용 쉘을 작성하겠습니다.

vi deploy.sh

 

#!/bin/bash
REPOSITORY=/home/ec2-user/apps/myordinary # 자신의 프로젝트 경로
cd $REPOSITORY
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
sudo ./gradlew build
echo "> Build 파일 복사"
sudo cp ./build/libs/myordinary-0.0.1-SNAPSHOT.jar $REPOSITORY/   # 프로젝트 밑의 jar경로
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f myordinary) # 프로젝트명
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 'myordinary-0.0.1-SNAPSHOT.jar' | tail -n 1) #jar파일명
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME &

 

#주석 부분을 보고 알맞게 수정해주세요.

 

그리고 root에서 exit하고 ec2-user로 로그인된 상태에서 아래 명령어를 실행해주세요.

 

sudo chmod 775 ./deploy.sh
./deploy.sh

 

끝났습니다.

 

밑의 명령어로 콘솔창을 실시간 확인 가능합니다.

 

tail -f nohup.out

 

 

이렇게 스프링 부트 ec2 리눅스 서버 배포에 대해 모두 알아보았습니다.

 

 

 

 

----여담-----

 

배포 하는 중

 

unmappable character for encoding UTF-8

 

에러가 났음

 

 

처음 배포할때 한글파일이 다 깨져 나와서 이런저런 수정을 다 만져줫지만 로컬에서는 잘 작동하는게

 

배포환경에서는 다 실패.

 

이유는 자바 파일들이 iso로 설정되있었음, 이클립스 설정으로 utf-8으로 고쳐줬지만 커밋이 되지 않고 있었음

 

자바파일 한줄이라도 엔터를 치거나 공백만들어서 커밋되게끔 해야함.

 

결국 자바 파일 클래스마다 다 엔터 하나씩 쳐서 utf-8으로 바뀐 설정으로 커밋함

 

결과 성공 

 

unmappable character for encoding UTF-8 에러 해결

반응형