스프링부트

Docker 네이버 클라우드 플랫폼으로 프로젝트 배포하기

하이자바 2024. 7. 31. 19:15

1. 네이버 클라우드 플랫폼 접속

- VPC 생성

 

- Subnet 생성

 

-서버 생성

 

 

 

 

공인 IP는 서버 생성하면서 같이 생성

인증키는 새로운 인증키 생성하여서 .pem파일을 저장하기 (새로운 인증키 설정하면 다운로드 됨)

 

그 다음으로 SSH 접속

사용 툴 : PortX

https://portx.online/ko/

 

PortX V2 - ko

크로스 플랫폼 SSH 클라이언트 크로스 플랫폼 SSH 클라이언트 다운로드 다운로드 필요한 모든 것이 있습니다 필요한 모든 것이 있습니다 단순하지만 포괄적인 UI로 PortX는 순수한 터미널 에뮬레이

portx.online

 

 

그리고 터미널 세션으로

이름에는 공인 IP 포트22

그리고 세션 등록 정보에서 사용자 이름은 root이고

암호는 네이버 클라우드 플랫폼의 서버에서 서버 관리 및 설정 변경 -> 관리자 비밀번호 확인을 클릭 후 서버 만들 때 생성했던

.pem 파일을 드래그해서 넣으면 비밀번호가 생성된다. 입력 후 접속하면 다음과 같은 창이 뜬다.

 

 

이제 첫 번째로 도커 설치하기

 

https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

 

다음 사이트를 참고하여 도커를 설치하고 정상적으로 동작하는 지 확인하고자 docker를 입력해본다

not found가 아닌 헬프가 뜬다면 정상적으로 설치된 것이다.

 

이제 도커가 다운로드됐으니 jdk와 mysql을 설치해보자

docker pull openjdk:23-ea-17-jdk-bullseye

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

 

그리고 배포하려는 jar 파일을 만들어서 SFTP 프로토콜을 통해 현재 세션에 보내려고 한다

다음과 같이 만들면 되고 비밀번호 또한 .pem 파일에서 SSH와 같이 작성하면 된다.

SFTP가 완료되면 다음과 같은 화면이 뜨는데 오른쪽에 보이는 게 현재 SSH이다.

저기로 보낼 파일을 드래그앤드랍으로 넣을 수 있다.

이제 인텔리제이로 가서 jar 파일을 만들어보자

 

패키징하기전에 우선 포트포워딩을 없이 진행할 것이기 때문에 application.properties에서 다음과 같이 설정해주어야 한다.

경로와 유저 네임과 패스워드를 수정해주면 된다.

172.17.0.1은 도커에서 제공하는 경로이고 아이디 비밀번호는 설치할 때 세팅한 값이다.

그리고 메이븐으로 가서 package를 두 번 클릭하면 타겟 폴더 안에 jar 파일이 생긴다.

이제 open in을 통해 폴더를 열고 본인이 편하게 쓸 수 있도록 이름을 변경한 후 PortX의 STFP를 통해 SSH로 파일을

드래그인드랍하면 파일이 다운로드 된 것을 볼 수 있다.

 

이제 SSH 로 가서 실행을 해보자

 

실행을 해보니 도커의 jdk 컨테이너를 만들지 않아 에러가 jdk가 없다고 뜬다. 그래서 그냥 아래와 같이 jdk를 설치해주고

apt install openjdk-17-jre-headless

 

java -jar 파일명.jar를 실행해준다.

실행되는 것을 확인할 수 있지만 바로 아래에 DB가 세팅되지않아 실행할 수 없다는 에러가 뜬다.

이제 그럼 DB를 세팅해보자

나의 경우 Mysql Workbench를 통해 세팅하겠다.

 

 

이러고 실행하니 에러가 떠서 확인해보니 ACG 설정을 하지않았다.

네이버 클라우드 플랫폼 웹으로 가서 ACG를 설정해보자

 

Server -> ACG에 가서 ACG 설정을 눌러 80, 8080과 3306 포트를 추가해준다.

 

 

그럼 이제 정상적으로 접속이 될 것이다. 

이제 내가 사용할 DB 스키마를 Export/import 를 시켜야한다.

기존에 사용하던 계정으로 접속하여 내가 필요한 DB를 Export 시켜준다. 

 

 

기존에 사용하던 계정으로 접속하여 필요한 DB를 선택하고 Export해준다 그러면 덤프 폴더가 생기고 이제 그걸 서버에서 사용할

DB로 임포트 시키면 된다.

 

폴더에 있는 모든 sql을 team이라는 스키마에 임포트 시킨다. 하기 전에 스키마는 먼저 만들어둬야 한다.

이렇게 임포트를 하면

다음과 같이 테이블이 들어온 것을 볼 수 있다.

이제 다시 SSH로 가서 실행시켜보면

 

동작이 되고 웹페이지를 열어서 확인해보면

http://223.130.137.80:8080/auth/login

(공인IP:8080/경로)

 

 

 

웹 페이지가 열리는 것을 확인할 수 있다.

그리고 다음 페이지로 넘어갔더니 500에러가 발생했다.

이 경우는 아마 Getmapping에서 return을 할 때 return "main/index"가 아닌 "/main/index" 를 작성하여 발생한

오류인 듯하다. 리턴할 때 슬래시를 붙여 슬래시를 두 개로 판단하여서 발생한 것으로 생각된다.