AWS EC2에 SpringBoot jar파일 배포하기(+ shell script 실행)

devdo·2022년 2월 2일
0

AWS

목록 보기
4/7
post-thumbnail

AWS EC2 서버 실행하기

AWS EC2 서비스를 통해서 인스턴스에 하나 만든다.
(프리티어: 서버타입 micro , os Ubuntu 선택, 스토리지 30GB 설정)

여기서 보안그룹에 들어가서
네트워크 인바운드 규칙을 추가시켜준다!

인바운드 규칙 편집을 클릭하고 사용자지정 8080포트를 넣어준다. 0.0.0.0/0은 IPv4버전의 모든 아이피를 대상으로 허용한다는 말이다.

MobaXterm(SSH 원격접속 프로그램)을 통해서 pem키를 등록하여 EC2 인스턴스에 들어간다.

keygen, 파일전송 프로그램 다 들어가 있고 여러모로 putty보다 훨씬 나은 프로그램이다.

session > SSH 선택

  • Remote host *
  • Advanced SSH settings > Use private key

여기 Use private key 앞에 사각형을 클릭해주고 안에 ssh-key로 만든 pem파일을 넣어주면 들어가 진다!

그리고 ok 를 선택,
(ec2 ubuntu 인스턴스라면) login as :ubuntu로 들어가 주면 된다.

$ login as : ubuntu


수동 실행

수동으로 칠 명령어는 다음과 같다.

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt install openjdk-11-jdk

$ java -version

$ ## sudo apt-get install git ## ubuntu는 이미 git이 깔려있음.

$ git clone https://github.com/mooh2jj/cpu-bound-application-1.git

$ cd cpu-bound-application-1/

$ ./mvnw clean package

빌드도구는 mavengradle이 있다.

빌드 명령어./mvnw clean package 하면 처음에는 권한부여 거절이 돼서 안될 것이다. 빌드를 해주는 mvnw파일에 실행권한부여를 해줘야 한다. 리눅스에서 실행권한을 편집하는 명령어 chmod 사용하면 된다.

$ chmod +x mvnw
## x(executable) 유저(user)에게 실행권한을 부여한다는 뜻 
$ ./mvnw clean package

다시 해보면 성공! target 폴더가 생성되고 여기에 jar 파일이 생겼을 것이다.

# 항시 jar를 실행할시 그 폴더위치에서 명령어를 친다.
$ cd target
$ java -jar cpu-0.0.1-SNAPSHOT.jar


gradle build 명령어

🌟 요즘 현업에서는 maven보다는 gradle 을 더 활용하므로 다음 명령어를 많이 볼 것이다!

## gradle도 마찬가지
$ chmod +x gradlew
$ ./gradlew clean build
$ cd build/libs
$ nohup java -jar cpu-0.0.1-SNAPSHOT.jar 2>&1 &
## 파일 실시간으로 끝 내용을 봄
$ tail -f nohup.out

✳️ 참고

nohup : 일반적인 리눅스 프로세스는 SSH 세션이 종료될 경우 백그라운드 여부와 관계 없이 종료된다. nohup을 사용하면 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어

  • 2>&1: 표준 에러 출력 스트림(2)을 표준 출력 스트림(1)으로 리디렉션
  • &: 프로세스를 백그라운드에서 실행
  • nohup.out : 에러와 출력 메시지를 모두 nohup.out 로그 파일로 저장

jar 파일이 EC2 인스턴스에 배포된 것을 터미널에서 확인한 후,
이제 실제 웹에서도 배포되었는지 확인하기 위해 웹을 킨다.

[퍼블릭 IPv4 주소]:8080/hello

  • 결과 : 성공적으로 뜨는 것을 확인 할 수 있다.

  • 프로세스 죽이기
# 어플리케이션 프로세스 죽이기
$ ps -ef | grep "8080"

$ kill -9 {pid}

shell script 로 실행하기

위 과정들의 절차를 한번에 파일로 실행할 수 있는 게 shell script 파일이다. vi 편집기로 만들어주면 된다.

shell script 문법 참고 블로그 : https://probe29.tistory.com/47

  • 간단한 예시 샘플

hello.sh

#!/bin/bash                   
# 쉘 스크립트의 시작

# echo 함수 사용 
echo "Hello Bash!"            

deploy.sh

#!/bin/bash
# 1
REPOSITORY=/home/ubuntu
PROJECT_NAME={본인의 깃 레포지토리 프로젝트 이름}


# 2
cd $REPOSITORY/$PROJECT_NAME/

# 3
echo "> Git Pull"
git pull origin main


# 4
echo "> 프로젝트 Build 시작"
./gradlew clean build


# 5
echo "> git 디렉토리로 이동"
cd $REPOSITORY
echo "> Build 파일 복사"

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


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

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

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


# 7
if [ -z "$CURRENT_PID" ]; then
    echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
    echo "> kill -15 $CURRENT_PID"
    kill -15 $CURRENT_PID
    sleep 5
fi

echo "> 새 애플리케이션 배포"


# 8
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"


# 9
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

$ sudo chmod +x deploy.sh

# deploy.sh 실행
$ ./deploy.sh

💥 주의사항
/bin/sh^M: bad interpreter: No such file or directory 오류 발생 시
이것은 윈도우에서 스크립트 파일을 만든 뒤, linux 에서 실행했기 때문에 나타나는 오류이다.
정확히는 줄 끝 (줄바꿈)을 의미하는 개행문자가 달라서 발생하는 문제인데 이것의 해결을 위해서는 다음의 방법 중 한 가지로 처리한다.

vi -b deploy.sh

vi 의 바이너리 모드로 들어가면 ^M 이라는 문자가 보인다. 이것을 지워주면 된다.



출처

profile
배운 것을 기록합니다.

0개의 댓글