[게시판 서버] spring boot 원격 서버에 올려서 배포하기
프로그래밍 언어 및 기타/Spring Boot

[게시판 서버] spring boot 원격 서버에 올려서 배포하기

https://isolia.shop/

 

Isolia

 

isolia.shop

(언제까지 열어놓을지는 모르겠지만..)

 

https://github.com/sglee487/isolia/tree/fa5f2bdd7aecf67516dfe14ac61b02e274b602e0

 

GitHub - sglee487/isolia: https://isolia.shop/

https://isolia.shop/. Contribute to sglee487/isolia development by creating an account on GitHub.

github.com

https://github.com/sglee487/isolia-spring-api/tree/8827fab436508a33d8684cedcb4b84feef397646

 

GitHub - sglee487/isolia-spring-api: change FastAPI to Spring boot

change FastAPI to Spring boot. Contribute to sglee487/isolia-spring-api development by creating an account on GitHub.

github.com

 

원격서버의 포트 개방, 방화벽 설정, 클라우드 서비스의 포트 설정, 도메인 구입 및 원격서버에 연결은 다 했다고 하고 그 다음 과정을 보자.

 

일단 백엔드용 코드를 git에 올린 뒤 clone해서 가져온다.

 

앱에 실제 배포할 환경변수를 적어준다. 이건 git에 올리면 안된다. 귀찮으면 .gitignore에 추가하던가 하자.

포트는 8080으로 한다. 어차피 나중에 그냥 프론트용으로 띄울 isolia.shop 말고 앞에 api.isolia.shop을 추가할건데, 현재 컴퓨터의 api.isolia.shop 443 포트로 요청을 날리면 이 컴퓨터의 8080포트로 proxy설정 해줄거다.

 

저렇게 했으면 kotlin spring boot를 실행시킬 .sh를 짜주고, 저걸 pm2 start로 넣어준다. 이렇게 하면 nohup 같은거 안해도 백그라운드에서 실행 가능.

원래 gradle bootRun인가 하고 싶었는데 자꾸 멈춰서 저렇게 했음.

 

이러면 백엔드 서버 실행은 끝났다. proxy만 연결시켜주면 되기 때문에 다음엔 프론트엔드를 진행했다.

 

얘도 마찬가지로 git으로 clone해서 가져온다. yarn을 한번 해줘서 종속성 설치를 마친다.

.env환경변수도 배포용에 맞게 설정해준다.

 

이게 중요한 부분인데, 정적인 nginx로 배포할건데, 얘를 yarn build할 때 우분투에서 기본적으로 만들어주는 www 계정 이하에 해준다. 현재 계정으로 해도 상관은 없지만 nginx에서 더 설정해줘야 하고 보안상 위험할 수 있기 때문.

저 빌드해주는 폴더 경로에 화면에 띄울 index.html이 만들어지기 때문에 저 폴더 경로를 nginx에서 설정해줘야 한다.

 

yarn build를 했다면(난 이미 했었음) 저 폴더경로에 build된 html및 css, js들이 만들어졌을 것이다. 그럼 이제 nginx만 설정해주면 된다.

 

 

nginx 설치 방법은 검색하면 금방 나오니 그냥 하면 된다. 중요한건 sites-available 폴더와 sites-enabled 폴더.

sites-available폴더엔 후보군을 올려놓고, sites-enabled에 올리면 실제 동작하는 거다.

보통 sites-available에 만들고 sites-enabled에는 sites-available에 만든 링크 파일이 들어있는 편이다.

 

각 파일 내용을 보자.

 

아까 yarn build했을 때의 경로를 맞춰준다. 즉, isolia.shop으로 내 컴퓨터에 들어왔을 경우, 저 경로의 index.html을 띄워준다는 소리. 서버를 여는게 아닌 정적 파일만 연결시켜주면 되기 때문에, 저러면 끝난다. 뒤의 Certbot 어쩌구 하는건 이따가.

 

 

이제 백엔드 연결을 보자.

백엔드는 위의 정적 파일인 것과 달리, 실제 서버를 열어서 실행하는 것이기 때문에 proxy_pass로 이 컴퓨터(127.0.0.1)의 8080 포트로 가라고 안내해준다. 즉, 아까 spring boot을 열었을 때의 포트로 이동해라.

그럼 서버를 열때 애초에 다른 컴퓨터를 사고 거기 도메인의 443으로 해주면 이런 proxy를 쓸 일이 없지 않느냐? 맞다. 근데 보안상 위험할 수 있음. 또 개인 ip를 spring에서 직접 볼 수 있는것도 그렇고. 그리고 난 한 컴퓨터로 다 하는거라.

저렇게 다 했으면 저 파일들의 바로가기 링크를 ln -s를 통해 sites-enabled에 그대로 추가해준다. nginx 다시 시작하는거 잊지 말고.

 

그럼 프론트에서 api.isolia.shop으로 요청을 보내면 api.isolia.shop:443 -> 컴퓨터의 8080으로 proxy돼서 spring으로 와 반응을 해주는 것.

 

/ws-mine-connect/를 또 해준건 socket은 따로 해줘야 하더라. 안그럼 에러 뜸.

 

 

여기까지 다 했으면 certbot같은 걸로 ssl 인증서 넣어주면 http에서 https로 된다. 없으면 주고받는 정보가 다 보이니 해주자.

 

https://certbot.eff.org/

 

Certbot

Tagline

certbot.eff.org

물론 난 이미 다 해놨다.

 

 

 

그냥 이런거라도 안적으면 나조차 했었는지 모를테니 적어둔다...

이제 공부하면서 다른거라도 만들어보자.