2. DNS 설정하기

 

Deployment 1 에서 생성한 vm에서 application을 배포하였다고 가정하자.

VM에서 돌고 있는 Frontend / Backend - local server 인 localhost:3000 / localhost:4040로 어떻게 외부 요청을 받아 넘겨줄까?

Azure Portal의 리소스 그룹 -> 네트워크 설정에서 확인할 수 있는 Public IP 로 요청을 날리면 된다. Public IP + port 로 날리면 되는 것이다. 다만 Public IP와 port 정보를 외부에 공개하는 것은 보안상 문제가 되기에 DNS 관리를 통하여 이 주소를 매핑해주는 것이 좋다.

 

그래서 할일은 -> DNS 호스팅을 통하여 URL을 매핑하고 nginx 를 통해 vm과 인증을 거쳐 연동시키는 과정이다.

좀 복잡하니 잘 보면 좋겠다. 

 

(1) VM access -> Nginx 설치 -> Certbot SSL 설치 -> DNS 설정

 

 

 

 

// 1. ssl 설치

sudo apt-get update

sudo apt-get install certbot -y => certbot 설치


// 2. access token 발급을 위한 여러 단계를 거친다. yes 로 넘어가다가 token을 받는 시점에 잠깐 스톱 & DNS 호스팅 플랫폼에 세팅을 한 후 다음 스테이지 yes 로 넘겨야 한다. 

sudo certbot certonly --manual

마지막에 _acme-challenge 값 나오면 DNS 호스팅 플랫폼에 세팅

 

 

2. 번에서 token 을 받는 시점에 DNS 호스트 설정 해주고, ( 해당 첨부 화면처럼 ) 그 다음 스탭으로 yes 눌러 넘어간다.

 

 

 

// 3. nginx 설치

sudo apt-get install nginx -y => Nginx 설치

cd /etc/nginx/sites-available => Nginx config 설정 위한 폴더로 이동

sudo vi default  => Nginx config 설정 위한 폴더로 이동

 

 

nginx 를 설치하고 나면 cd /etc/nginx 경로로 들어간 후 sites-available 이라는 폴더가 생성되었는지 확인한다. 

해당 폴더 안에 있는 default 파일을 통하여 nginx 설정을 업데이트 해주면 된다.

 

 

 

 

sudo vi default 라는 명령어를 입력하면 아래와 같은 화면이 보이게 되는데 server { listen 80 default ~~ } 에 해당하는 첫 번째 객체 부분 다음에 동일한 포멧이지만 조금은 다른 내용으로 설정을 추가해주면 된다. 수정 할 때 Insert 기능으로 전환하기 위해 i 누르는 것 잊지 말자.

 

 

i 를 누르면 밑에 Insert 라고 나온다.

 

// default 입력 되어 있던 부분.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _; # Catch all server_name.

    location / {
        try_files $uri $uri/ =404;
    }

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;
}

// port 443 으로 추가 입력한 부분.
// YOUR_DOMAIN 으로 표시해둔 부분은 ssl 진행하는 시점에서 certbot이 터미널에서 물어 보았던 your domain 그대로 입력하면 된다. 

server {
    listen 443 ssl;
    server_name ${YOUR_DOMAIN};

    root /var/www/html;

    ssl_certificate /etc/letsencrypt/live/${YOUR_DOMAIN}/fullchain.pem; # Managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/${YOUR_DOMAIN}/privkey.pem; # Managed by Certbot

    # https websocket
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;

    location / {
        proxy_pass http://localhost:3000;
    }

    location /apis {
        proxy_pass http://localhost:4040;
    }
}

 

 

 

이 정도 입력하였다.

 

입력한 후에는 esc 누르고 :wq! (write and quit) 입력 후 enter. 

 

주목해야 할 부분은 내가 입력해둔 server 443의 location / { proxy_pass http://localhost:3000} 과

location /apis { proxy_pass http://localhost:4040} 파트다.

 

{YOUR_DOMAIN}으로 들어온 요청은 localhost:3000 으로 연결 될 것이고, {YOUR_DOMAIN}뒤에 /apis 라는 prefix 가 붙은 요청들은 VM 에서 돌고 있는 localhost:4040 으로 request가 pass 된다는 의미이다. 

 

예를 들어, DNS 에서 example.com을 당신의 도메인으로 설정해두었다면, localhost:3000 (Frontend) 에 대한 요청은 example.com 으로 맵핑되고 localhost:4040/apis (backend) 에 대한 요청은 example.com/apis 로 맵핑된다고 이해하면 좋겠다. 

 

 

 

 

DNS / Nginx 설정 끝.

'Deployment > Guide' 카테고리의 다른 글

Deployment 3 - Backend (Nest.js)  (0) 2023.10.30
Deployment 1 - VM  (0) 2023.10.30

- 배포 환경 : Azure Portal

- DNS : Gabia

- Backend Server : Nest.js, Pm2 (process manager), Docker (App Isolator), ACI (Container Hub)

- Database : MongoDB 

- Frontend : Next.js 

 

1. VM 생성하기

 

 

앱을 배포하기 위해서 자체 서버를 돌리지 않는 이상, 당연히 VM이 필요하다.

마이크로소프트가 제공하는 에저의 클라우딩 서비스를 공부하는 중이기도 하고, 마침 회사에서도 B2B 솔루션을 메인잡으로 하고 있기에 Azure Portal 을 이용하여 VM을 생성하였다. 개인 소영업과 스타트업의 경우에는 AWS를 더많이 사용하는 추세인 듯 하다. 반대로 90%의 Industry Giant들은 MS가 제공하는 애저를 사용한다.

 

 

(1) Azure Portal -> Resource 만들기 -> 가상머신 만들기 

 

 

 

VM 에 필요한 리소스와 가용성, Cloud server location 등은 필요에 따라 맞춰주면 된다. 이미지의 경우 테스트를 위해 Ubuntu Server 중 가장 저렴한 것으로 설정했다.

 

 

아래는 가상머신 만들기의 기본 사항 탭이다. 그 중 관리자 계정 파트는 나중에 VM 에 접근 할 Auth를 설정하는 곳이라고 보면된다.

나와 같은 경우는 인증 형식을 암호로 체크하였다. 직관적이고 익숙한게 좋아서..

 

 

 

 

사용자 이름에는 본인이 사용하고 싶은 이름, 암호에는 본인이 사용하고 싶은 암호를 넣으면 된다. 

이 부분은 나중에 vm 접근 시에 당신이 만든 VM의 "ssh"+ "publicIP" + "-l" + "yourID" 순으로 터미널에 입력된다. 

그 이후에 터미널에서 묻는 query 에 설정한 password 를 입력하면 vm 으로 접근이 된다. 

 

방금 설명한 내용은 아래 참고하면 된다.

 

password 입력시에 안보인다고 쫄지 마시고, 끝까지 잘 입력 후 enter 누르시길.

 

 

(2) 디스크 설정 -> 네트워킹 설정 -> 관리 -> 모니터링 -> 고급

 

나머지는 건드릴 만한 내용이 솔직히 없다. 네트워킹과 같은 경우 인바운드 포트를 눌러보면 HTTP, HTTPS 가 나오는데 이 둘에도 체크를 해주자. 태그 탭에 이르면, VM 에 붙이고 싶은 이름과 값을 입력해주면 된다. 결론적으로 의무적으로 건드릴 부분은 기본사항 / 네트워킹 / 태그 / 검토 + 만들기 정도이다. (나머지는 필요에 의해서.)

 

 

왠만하면 부하 분산 옵션에 Load Balancer 도 체크해주자. 알아서 부하 분산을 체크하고 모니터링 해주는 Azure 자체 서비스다.

 

 

 

VM 생성이 잘 되었고 access 에도 문제가 없다면 docker 를 통한 app containerize 차례다.

아니다 그 이전에 nginx 로 DNS 먼저 잡아보자

'Deployment > Guide' 카테고리의 다른 글

Deployment 3 - Backend (Nest.js)  (0) 2023.10.30
Deployment 2 - DNS / NGINX  (0) 2023.10.30

+ Recent posts