스프링부트를 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 에러 해결
'AWS' 카테고리의 다른 글
스프링프레임워크&부트 redis 연동(로컬에서 실서버까지)[1] (0) | 2021.10.15 |
---|---|
다중서버에서 세션 관리(Redis 세션 클러스터링, Sticky Session) (0) | 2021.07.24 |
아마존 RDS의 개념과 RDS와 EC2 연동하기 (4) | 2021.04.03 |
[AWS]EC2 인스턴스 재부팅시 자바 + 톰캣의 메모리 초기화 이유 (0) | 2021.02.01 |
ec2 리눅스 서버에 jconsole과 visualVM 원격접속 [2] (use jconsole and visualVM to remote connect ec2 linux server) (0) | 2021.01.22 |