S E P H ' S
[AWS & SpringBoot] Ubuntu EC2 인스턴스에 배포 본문
(이 포스팅은 EC2 인스턴스는 생성, boot 프로젝트가 만들어져 있다는 가정하에 시작)
SpringBoot 프로젝트를 AWS EC2 인스턴스에 배포하는 방법을 적어보려고 한다.
AWS 인스턴스는 Ubuntu를 사용했다.
지금까지 시도해본 방법은 총 두 가지가 있다.
1. jar 파일 build
- EC2 인스턴스에 접속
ssh -i '발급받은키'.pem '사용자이름'@'도메인주소 or IPv4'
- Boot 프로젝트를 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 '도커아이디'/'도커이미지이름'
'Cloud Service > AWS Cloud' 카테고리의 다른 글
[AWS & Django] Ubuntu EC2 Django Docker 이미지로 배포하기 (0) | 2021.09.19 |
---|---|
[AWS Cloud] Elastic Load Balancing을 사용하여 트래픽 리디렉션 (0) | 2021.06.25 |
[AWS Cloud] Amazon EC2 확장 (0) | 2021.06.23 |
[AWS Cloud] Amazon EC2 요금 (0) | 2021.06.23 |
[AWS Cloud] Amazon EC2 인스턴스 유형 (0) | 2021.06.23 |