개발/Spring Boot 배포

Spring boot EC2 Nginx certbot 활용 배포(2)

sungin95 2023. 11. 9. 17:36

https://plants-growth.tistory.com/33

이전글 

 

이 글은 Spring을 활용하여 배포를 하기 위해 공부했던 내용을 하나로 정리를 하기 위해 작성이 되었습니다. 

 

이전 글에서 build 및 확인을 위한 배포까지 진행을 했고

이번글은 Nginx와 certbot 을 활용하여 무중단 배포하는 방법에 대해서 알아보겠습니다. 

 

! 포트번호는 80번과 443번 미리 열어 놓은 전제로 작성했습니다. 

! ubuntu를 사용하고 있습니다. 

 

Nginx 설치 

sudo apt install nginx     // nginx 설치 
sudo systemctl start nginx   // 설치한 Nginx 가 정상적으로 반영되도록 재시작
ps -ef | grep nginx        // 정상적으로 Nginx가 실행되었는지 확인

 

포트번호 없이 IP주소를 입력해 보면 nginx화면이 나오면 성공입니다. 

Nginx에서 가상 서버 환경 설정하기

다음으로 Nginx에 관한 추가적인 설정이 필요합니다.

 

설정을 하는 파일은 크게 두개가 있는데요. 

/etc/nginx/nginx.conf 와 /etc/nginx/sites-available/default 두개가 있습니다.

(/etc/nginx/sites-enabled/default는  /etc/nginx/sites-available/default와 같이 연동이 됩니다.)

 

sites-available의 default 파일만 vim 편집기를 통해 추가적인 설정을 하겠습니다. 

sudo vim /etc/nginx/sites-available/default

 

정상적으로 이동했다면 아래와 같은 vim 편집 화면이 나오게 될 겁니다. 

 

이제

아래로 내려가시면 location이 보이게 되는데. 여기를 수정해 주면 됩니다. 

 

proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;

 

저는 현재 8081 포트를 사용하고 있어서 http://localhost:8081 을 했고요. 기본포트라면 8080으로 하시면 됩니다. 

 

Nginx 문법에 이상이 없지는 확인 후 nginx를 다시 실행해 주세요. 

sudo nginx -t
sudo systemctl start nginx

 

문제가 없다면 성공입니다. 

 

 

certbot 활용 ssl인증서 발급받기

도메인문제 해결하기

이번에는 certbot을 활용하여 ssl 인증서를 받아 https를 적용하도록 하겠습니다. 

그 전에 ssl 인증서를 발급받기 위해서는 도메인 주소가 필요한데요. 

IP주소를 도메인 주소로 활용하는 방법이 있습니다. 

`.nip.io` 를 붙이는 방법이랑 `.sslip.io` 를 붙이는 방법입니다. 

ex)

3.34.137.59.nip.io

3.34.137.59.sslip.io

이를 통해 도메인을 구입 하진 않고도 ssl 인증서를 받을 수 있습니다. 

 

certbot 설치

sudo snap install --classic certbot

 

명령 준비

sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

인증서 발급 후 HTTPS 액세스 자동 활성화

sudo certbot --nginx # default 파일 자동 변경

위 명령어를 사용하면 default 파일을 자동으로 변경을 해 줍니다. 이 부분을 직접 하고 싶으시면 아래 명령어를 사용해 주세요. 

sudo certbot certonly --nginx # 수동 설정

 

위 명령어를 입력하면 몇가지 정보를 입력합니다. 

첫번째는 이메일로, ssl인증서 성공 여부를 해당 이메일로 보내줍니다. 

그리고 Y, Y 누르시면

도메인을 입력하라고 뜨는데. `.nip.io` 나 `sslip.io`를 선택해 입력해 주시면 됩니다. (저는 `.nip.io` 로 하니까 안된다고 해서 `.sslip.io`를 사용했습니다.)

 

자물쇠 모양의 아이콘이 생겼다면 성공입니다. 

 

 

 

확인

sudo systemctl restart nginx
java -jar build/libs/project-board-admin-v1.0.jar

이제 이 두 명령어를 입력하시면 홈페이지가 잘 나오면 정상입니다. 

 

무중단 배포

그런데 이와 같이 배포를 한다면, 터미널이 꺼지면 서버도 종료가 됩니다.

무중단 배포를 하시려면 nohup를 사용해야 합니다. 

nohup java -jar build/libs/project-board-admin-v1.0.jar &

 

진짜 완성.... 

 

 

if 재배포를 해야 한다면 우선 아래 명령어를 입력해 주세요. 

$ ps -ef
$ kill -9 {pid번호} // 서버 종료

그러면 리스트가 쭉 나오는데. 여기서 jar 명령어를 찾아 PID 번호를 찾아주세요. 

ex) kill -9 16043

 

서버를 종료하고 다시 입력하면 됩니다. 

ex) 

 # ex)
 sudo systemctl restart nginx
 nohup java -jar build/libs/project-board-admin-v1.0.jar &

 

 

 

 

참고자료

 

nginx 설치 및 설정

https://velog.io/@msung99/AWS-EC2-Spring-Boot-%EC%84%9C%EB%B2%84-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

 

AWS EC2, Nginx 를 활용하여 배포하기

localhost 로 돌리고 있던 본인의 스프링부트 프로젝트를 외부에 배포하고 싶을 때가 있습니다. 사이드 프로젝트를 진행하다보면 백엔드에서 개발한 API 서버를 클라이언트에게 넘겨줘야 할때 어

velog.io

 

IP주소를 도메인주소로 바꾸기 

 

https://velog.io/@jungsangu/Docker%EB%A1%9C-Lets-Encrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89%ED%95%98%EA%B8%B0-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%B0%9C%EA%B8%89-%EC%97%86%EC%9D%B4

 

Docker로 Let's Encrypt 인증서 발급하기 (도메인 발급 없이)

nip.io 도메인과 Docker Certbot으로 Let's Encrypt 인증서를 발급해보자!

velog.io

 

certbot nginx 설치 공식 문서

https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal

 

Certbot Instructions

Tagline

certbot.eff.org