S E P H ' S

[AWS & SpringBoot] Ubuntu EC2 인스턴스에 배포 본문

Cloud Service/AWS Cloud

[AWS & SpringBoot] Ubuntu EC2 인스턴스에 배포

yoseph0310 2021. 7. 27. 23:20

(이 포스팅은 EC2 인스턴스는 생성, boot 프로젝트가 만들어져 있다는 가정하에 시작)

 

SpringBoot 프로젝트를 AWS EC2 인스턴스에 배포하는 방법을 적어보려고 한다.

AWS 인스턴스는 Ubuntu를 사용했다. 

지금까지 시도해본 방법은 총 두 가지가 있다.

 

1. jar 파일 build

- EC2 인스턴스에 접속

ssh -i '발급받은키'.pem '사용자이름'@'도메인주소 or IPv4'

- Boot 프로젝트를 Git에 등록하고 그 프로젝트를 clone

 

Test 가 git clone 되었다.

 

- Test 로 접근

 

gradlew란 gradle wrapper 를 말하는 것으로 java나 gradle을 설치하지 않고도 빌드 할 수 있게 해주는 역할을 한다. 

밑의 명령어들을 차례로 수행하면 빌드가 된다.

sudo chown 777 ./gradlew
./gradlew build

gradlew build를 하게 되면 폴더에 build 파일이 생성이 되고 libs로 접근하면 jar 파일이 생성된다.

 

# 참고해야할 것

더보기

1. Ubuntu 환경에서 JAVA_HOME이 설정이 되지 않았다면 :compilejava 에러가 발생할 것이다.

   Ubuntu 에 jdk를 설치해주고 JAVA_HOME을 지정해주면 해결된다.

 

2. 필자는 깃에 등록된 프로젝트 내 gitignore에 applicaion.properties(사용자에 따라 yml 등등이 될 수도 있다.)를 지정해줘서 build 시에 오류가 났었다. 반드시 properties 파일을 포함하고 build를 해주어야한다.

 

cd build/libs

java -jar '프로젝트명'-0.0.1-SNAPSHOT.jar

위의 명령어를 실행하면 spring boot가 실행되고 다음과 같이 나오면 '서버도메인 or 서버공인IP':8080을 켜보자.

 

 

 

2. Docker image 활용

- 프로젝트 루트 폴더에서 New - File - Dockerfile 생성 파일명이 중요하다. 오타나지 않게 조심!

- Dockerfile 에 다음을 입력.

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

내용을 잠시 들여다보자면 open jdk java 8버전의 환경을 구성하고 ARG는 build 시점에 활용되는 변수선언문으로 JAR_FILE이라는 변수에 build/libs/*.jar라는 표현식을 담은 것이라고 보면 된다. 또한 이를 복사하여 app.jar 로 복사하고, ENTRYPOINT 명령어로 기존 jar 파일을 단순 실행하듯이 java -jar /app.jar 라는 jar 파일을 실행하는 명령어를 실행하면서 스프링부트가 올라간다.

 

- 도커 허브

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com

- 도커 허브에 가입한다. Github와 같이 Repository를 갖고 원격 저장소로 활용할 수 있다.

- 로그인 한 후 Create Repository를 해서 Repository를 하나 생성해준다.

- 간단히 Repo명을 설정하고 public을 유지한 채 create를 한다.

- Dockerfile 빌드 

 

이제 도커 파일을 빌드해보자.

 

maven, gradle 에 따라 다르다.

 

Gradle

docker build --build-arg DEPENDENCY=build/dependency -t '도커허브아이디'/'도커허브 Repository 명' . 

 

Maven

docker build -t '도커허브아이디'/'도커허브 Repository 명' .

 

이렇게 하면 도커파일이 빌드됐고 이미지를 생성한 것이다. 이것을 도커 Repository 공간에 push 한다.

push 명령어는 도커 허브에서도 확인이 가능하다. 태그네임만 때고 실행해주면 된다.

# push에서 denied가 된다면 docker login을 해서 도커 허브 id와 pwd로 로그인 하면 된다.

 

 

위와 같이 확인이 된다면 push가 완료된 것이다. 이제 이를 EC2 인스턴스에서 pull 하여 사용하면 된다. 

 

docker run -t -p 8080:8080 '도커아이디'/'도커이미지이름'