[Nest.js] 서버 배포 및 도메인 관리 (with. cerbot unauthorized)

HoonDong_K·2023년 8월 17일
0

[project #3] Planner Bot

목록 보기
4/4
post-custom-banner

프로젝트 마감일 직전, 나에게 주어진 목표는 서버를 배포하고 도메인을 구매하여 https 인증서를 발급받는 것이었다.

🙈 험난했던 나의 배포 과정

⚙️ EC2 인스턴스 생성

  1. Ubuntu를 서버로 사용할 것이기 때문에 AMI와 인스턴스 유형은 프리티어에 해당하는 종류로 선택해주었다.

  2. SSH로 접속할 것이기 때문에 새로운 키 페어(.pem)를 생성해주고 putty를 통해 .ppk 형식의 키를 새롭게 저장하였다.
    -> 처음부터 ppk 형식으로 발급받아도 될 법했는데..ㅎ

  3. Putty를 통해 서버에 연결해줄 수 있지만 이번에는 Mobaxterm을 사용해보았다.
    -> GUI를 지원해주니 폴더 내부 구조를 한 번에 볼 수 있다는 게 장점인 것 같다.

  4. 미리 저장해둔 깃허브 레퍼지토리에서 소스 코드와 Ubuntu용 Node.js를 다운받고, .env 파일을 설정해준다.

  5. 서버를 실행시키고, "퍼플릭 IPv4 주소:포트번호"로 요청을 보내본다.

⚙️ 호스팅 영역 생성

  1. AWS Route53을 통해 호스팅 영역을 생성해주었다.
  2. A 유형의 api.plannerbot.com 레코드 값으로 퍼블릭 IP주소를 입력하여 생성해주었다.
  3. 도메인 등록을 해주었으니 당연히 성공하겠지라는 마음으로 "api.plannerbot.com:포트번호"에 요청을 보내봤지만 당연히 통신에 실패하였다.
  4. 뭔가 꺼림칙했지만 일단 설정을 잘못했다는 생각이 들어,일단 SSL인증서를 받아 https 통신을 연결하자는 생각을 하였다.

🔑 SSL 인증서 받기

  1. Nginx 설치
sudo apt-get update
sudo apt-get install nginx

//nginx 구동 테스트
sudo service nginx start
sudo service nginx stop
  1. Nginx Proxy Server 만들기
cd /etc/nginx/sites-enabled
// 기존 defaul 파일 삭제
sudo rm default 
// 새로운 default 파일 작성
sudo vi default
//default

server {
	listen 80;
	server_name api.plannerbot.com;
	location / {
		proxy_pass http://127.0.0.1:8080;
	}
}

- http 기본 포트인 80포트로 요청이 들어오면 http://127.0.0.1:8080으로 연결해준다. 
- 8080은 자신이 설정한 서버 포트 번호다
- 만약 server_name을 퍼블릭 Ipv4로 설정을 해두면, 더이상 IP뒤에 포트번호를 붙이지 않고 접속할 수 있다.
  1. certbot 설치 후 인증서 요청
//certbot 설치
sudo add-apt-repository ppa:certbot/certbot
sudo apt install certbot python3-certbot-nginx

//도메인 SSL인증서 요청
sudo certbot --nginx
  1. 설정이 완벽하게 되었다면 Congratulations! Your certificate,, 이런 메세지가 등장해야하지만 나는 unauthorized Error가 등장하였다.

🙊 해결

00시까지 프로젝트를 마감하고 제출해야하지만 현재 시간은 23시였고 나에게는 1시간밖에 남지 않았다,,

하지만 아무리 cerbot Unauthorized에 대한 에러를 구글링하여도 .well-known/acme-challenge/에 파일을 만들어, nginx 설정을 바꾸거나 어려운 조작법들이 설명되어 있어 마음은 더 급해졌다.

다시 마음을 다잡고 내가 거쳐온 과정을 하나씩 천천히 복기해본 결과, 정말 바보같은 실수를 했다는 것을 깨달았다.

🐥 도메인 구매

큰 힘에는 큰 책임이 따르는 법,,,
도메인 사용에는 요금이 따라간다는 사실,,

급한 마음에 도메인을 사지도 않고, 존재하지도 않는 도메인으로 호스팅 영역을 생성하고 있었던 것이다.

🐥 얼른 도메인 구매

  1. 다시 AWS Route 53으로 가서 원하는 도메인 이름을 적고 사용가능한 도메인 이름 중 가장 저렴한 것을 구매하였다.
    -> 원하는 이름은 다 가격이 비싸서 planbot.click으로 생성(
    -> .click은 1년에 3달러 / .com은 1년에 13달러

  2. 새롭게 생성한 planbot.click의 호스팅 영역을 추가해주었다.
    ->api.planbot.click에 Ipv4 주소를 넣으니 "api.planbot.click:포트번호" 요청 성공

  3. Nginx proxy server 설정에서 server_pass 값에 구매한 도메인 이름 삽입

  4. 존재하는 도메인으로 Certbot 인증을 받으니 성공적으로 인증서를 발급받을 수 있었다.

  5. 추가로 프론트 페이지랑 동일한 도메인을 사용하고 싶어서, vercel에서 제공하는 레코드 값들을 www.planbot.click 레코드에 값들로 추가하여 연결하였다.

참고

https://velog.io/@jeff0720/2018-11-18-2111-%EC%9E%91%EC%84%B1%EB%90%A8-iojomvsf0n

profile
개발을 잘하고 싶은 개발자
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기