본문 바로가기
AWS

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

by 코딩공장공장장 2021. 5. 23.

 

스프링부트를 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 에러 해결

반응형