저번 글에 이어서 이제 만들어진 EC2서버에서 스프링부트를 배포하는법에 대해서 설명한다.
만약 저번글을 확인하고싶으면 아래 링크로 들어가보자
배포는 Docker를 통해 배포를 한다.
Docker는 설치가 되어있다는 가정하에 설명하겠다.
우선 프로젝트안에 docker 파일을 생성하겠다.
파일이름은 Dockerfile로한다.

그후 파일에 내용을 추가한다.
FROM amazoncorretto:18
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM은 현재 프로젝트의 SDK를 넣는다 확인하는 방법은 파일-프로젝트 구조-SDK를 확인하면된다.
그리고 프로젝트를 빌드하는 과정을 거쳐야한다. 인텔리제이에 터미널을 들어간후 이 명령어를 입력한다.
./gradlew build
빌드가 성공하게되면 아래경로에 jar파일이 생겼을 것이다.
build/libs 확인해보자.
만약 오류가 날수도있다.
zsh: permission denied: ./gradlew 이런 오류가 발생하면 gradle 권한이 없기에 나는 오류이다 그럼 이 명령어를 입력해주면 해결이 된다.
chmod +x ./gradlew
그후 다시 빌드를 시도해보면 정상적으로 작동하는걸 볼 수 있다.
그후 dockerhub 홈페이지에 들어갈것이다.
Docker Hub Container Image Library | App Containerization
Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.
hub.docker.com
여기서 로그인을 하면 이런 화면을 볼 수 있을것이다.

여기서 create repository를 들어간다.

여기서 Repository Name을 입력한후에 필요하면 description에 프로젝트 설명을 적어도 된다. 나는 name으로 test로 짓고 생성을 하겠다.

현재 허브에 생성된 repository의 초기화면이다. 다시 터미널로 돌아가겠다.
docker hub에 빌드된 파일을 넣기위해 docker 빌드를 거칠것이다. 이 명령어를 입력해주자.
docker build --build-arg DEPENDENCY=build/depnedency -t "Docker 아이디"/"REPOSITOY NAME" .
뒤에 점도 들어가야 정상실행된다.
그리고 빌드가 완성되면 docker에 push를 할것이다. 이 명령어를 입력해주자.
docker push "docker 아이디"/"repository name"
그리고 다시 docker hub를 확인해보면 tag에 무언가가 생겼을것이다.

그러면 ec2에 배포준비는 모두 마쳤다. 다시 ec2 화면으로 돌아가자.
ec2에서 이제 docker 설치를 해보자.
sudo yum install docker
설치가 완료되면 이제 docker를 실행시켜야한다. 아래 명령어를 입력해보자.
sudo systemctl start docker
그 후에 hub에 올린 빌드된 파일들을 가져와야한다. pull을 해오는 명령어를 입력해보자.
sudo docker pull "본인의 docker 아이디"/"docker repository 이름"
기다리다보면 docker 에서 파일을 가져올것이다.
이제 가져왔으면 서버에 스프링부트를 실행할 것이다. 아래 명령어를 입력하자.
sudo docker run -e TZ=Asia/Seoul -d -p 80:8080 "본인의 docker 아이디"/"본인의 docker repository 이름"
-e TZ는 docker상에서는 utc+0의 시간으로 설정되어있기에 한국시간으로 바꿔줘야한다. 그리고 -d는 docker를 background상으로 돌린다는 명령이며 이것이 빠지면 스프링부트 로그를 띄울 수 있지만 ec2 터미널을 끄면 같이 내려간다는 단점이 있기에 넣어줬다.
그리고 -p는 http 포트인 80을 8080으로 포워딩 해주는 명령어이다. 뒤에 아이디랑 레포지토리를 넣어주는 이유는 이 레포지토리에 있는 파일을 실행시켜야하기에 넣어줘야한다.
그러면 스프링부트가 실행이 되며 퍼블릭 ip로 접속을 해보면 잘 접속이 되는걸 볼 수 있을것이다.
nginx나 톰캣을 설정안한 이유는 스프링부트상에 아파치 톰캣 내부서버가 있기에 설정해주지는 않았다. 방법은 구글에 있으니 찾아봐서 적용시켜도 좋을것이다.
여기까지 ec2에서 스프링부트 배포하기에 대하여 글을 마친다.
'Infra' 카테고리의 다른 글
| Azure Cache for Redis를 스프링부트에 연결해보자. (0) | 2023.09.25 |
|---|---|
| 네이버 클라우드 플랫폼(NCP)에서 서버를 생성해보자. (0) | 2023.09.25 |
| Azure App Services로 스프링부트를 배포해보자. (0) | 2023.09.24 |
| AWS EC2를 생성해보자. (0) | 2023.07.25 |
| AWS 내용 정리 (0) | 2023.07.04 |