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

1. IP

Internet Protocol 의 약자로 우리가 사용하고 있는 인터넷의 개인 주소라고 생각하면 된다.

IP에는 IPv4와 IPv6 두 가지 유형이 있는데, IPv4의 확장성과 용량면에서 한계를 해결하기 위해 IPv6가 등장하였다.

주소공간은 IPv4 - 32비트에서 IPv6 - 128 비트로 확장되었으며 인터넷 사용의 폭증을 수용하기 위해 IPv6로의 전환은 필수적이다.

 

my ip address 

온라인 검색 -> 통신사가 제공하고 있는 나의 ip주소 확인이 가능하다.

 

Terminal -> ipconfig

공유기에 의하여 할당받고 있는 ip주소. 통신사 -> 공유기에 의해서 여러 갈래로 그 주소가 분배되고 분배된 주소 중 내가 할당 받은 주소가 보여지는 IPv4주소이다. 

 

HTTP / HTTPS

둘다 프로토콜 (데이터 교환방식을 정의하는 체계) 을 의미하며 http와 같은 경우 인터넷 초기에 모든 웹사이트에서 기본적으로 사용되었던 프로토콜이다. 현재는 https가 권장되고, 또한 주로 사용되고 있는데 약자에서 알수 있듯이 (Hypertext Transfer Protocol Secure) https 프로토콜은 SSL을 사용함으로써 서버와 브라우저 사이에 암호화된 연결을 만들 수 있게 도와준다. 

 

SSL

SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 1995년 처음으로 개발되었으며 TLS 암호화의 전신이라고 할 수 있다.

 

이미지 참고 https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/

DNS (Domain Name System)

Amazon Route 53과 같은 DNS 서비스는 전 세계에 배포된 서비스로서, www.example.com과 같이 사람이 읽을 수 있는 이름을 192.0.2.1과 같은 숫자 IP 주소로 변환하여 컴퓨터가 서로 통신할 수 있도록 한다. 인터넷의 DNS 시스템은 이름과 숫자 간의 매핑을 관리하여 마치 전화번호부와 같은 기능을 한다. 도메인은 서비스를 제공하는 CloudFlare나 cafe24 와 같은 기업에서 구매가 가능하다.

 

 

 

 

 


 

 

 

2. AWS EC2

 

Amazon Elastic Compute Cloud (Amazon EC2)는 500개가 넘는 인스턴스, 그리고 최신 프로세서, 스토리지, 네트워킹, 운영 체제 및 구매 모델의 옵션과 함께 워크로드의 요구 사항에 가장 잘 부합할 수 있도록 가장 포괄적이고 심층적인 컴퓨팅 플랫폼을 제공한다.

 

AWS EC2에서 인스턴스를 발급 받는 방법과 생성한 인스턴스에 tomcat을 설치하는 방법은 youtube나 google에 서칭해보면 매우 잘 나온다. 보면서 따라하기만 하면 된다. 인스턴스 생성과 tomcat을 설치한 이후,


(1) Tomcat Folder

인스턴스 내에 설치한 톰캣의 경로를 확인한다. 나의 경우 설치가 어디 되어있는지 opt와 var 폴더를 헤메다가 var>lib 폴더 내에 설치가 되어있는 것을 확인하였다. AWS terminal의 경우 해당 repo로 들어가기 위해서는 gitbash와 다르게 /(슬래시)를 명령어에 포함시켜주어야 한다. 윈도우가 아닌 리눅스 환경임을 기억하자.

 

cd /opt > ls

cd /var > ls

cd ./var /lib > ls > tomcat9 찾음

 

톰캣이 설치된 위치를 먼저 찾자


(2) Tomcat 설정 변경

var/lib/tomcat9/conf$ sudo nano tomcat-users.xml 

 

sudo nano tomcat-users.xml :

- sudo는 명령어를 실행할때 사용하는 리눅스 용어 

- nano는 linux 내의 에디터를 말한다. vim 에디터도 존재한다. 

- tomcat-users.xml은 말그대로 파일 이름.

 

tomcat9 폴더에서 cd conf 해주면 xml이 위치한 폴더로 들어갈 수 있다. 다음에 해당 sudo 명령어를 입력해서 xml을 열어주자. 나는 설정 몇 가지를 변경해주었다. 

 

tomcat 실행하는 김에 password와 username 변경해준다.

 

포트넘버도 8080에서 임의로 바꿔주었다.

 

나는 tomcat 설치하는 시점에 username과 password 설정을 건드리지 않았기 때문에 Id/Pwd 를 이때 변경해주었다. 

변경한 후에는 ctrl + o 눌러서 저장하는 것 잊지말자.


(3) Tomcat start

 

중요한 걸 빼먹을 뻔 했다.

톰캣 구동을 시켜줘야한다. ctrl + x 키로 저장한 xml을 닫아주고 ctrl + c 키로 명령어 창을 띄워준다. 

 

구동은 sudo systemctl start tomcat9 ( tomcat 버전 다르면 해당 버전으로...)

톰캣 끄는 명령어는 sudo systemctl stop tomcat9

 

중요한 것이 한 가지 더 있는데, tomcat9를 구동시키거나 꺼준 이후에는 sudo systemctl status tomcat9 로 구동 상태를 확인해주어야 한다.

 

왜냐하면

Linux는 ui가 매우 불친절하기 때문이다... 아니 ui가 없다...

 

 


(4) IP + Tomcat port #

 

 instance ip주소 + : instsance에서 tomcat 설정한 port 번호를 주소창에 입력하면 아래와 같이 tomcat이 성공적으로 구동되고 있음을 알려주는 화면이 나온다. (나의 경우 8080이 아닌 ex- 6452 port를 설정해주었기 때문에 151.621.6542 : 6452를 주소창에 입력해주었다.

 

발급받은 instance의 ip / + 하이픈 뒤에는 임의로 설정해준 port number


(5) war파일 배포.

 

it works 라는 문구를 확인하면 tomcat이 정상적으로 구동되고 있는 것이다. 해당 화면에서 manager webapp을 클릭하여 

하기 페이지로 넘어간다.

해당 이미지에서는 잘리긴 했는데, war File을 upload 할 수 있는 스페이스가 아래 더 있다.

 

STS 또는 Eclipse에서 파일을 export 해야한다. localhost:8080으로 프로젝트가 문제 없이 돌아가는 지 확인하고 나면

File -> export -> war 순서대로 프로젝트를 export 해주면 된다. 

 

이때 주의 할 점은, localhost에서 가장 처음으로 띄워졌던 화면의 주소가 localhost8080/Test01 라고 한다면 war file의 파일명도 Test01로 변경해주어야 한다는 점이다. 

 

이름 변경이 완료되었다면 file upload를 진행한 후 

 

 

 

 

 

 

 

 

 

 

++

 

 

다음에 알아볼 내용

what ci cd stands for?  

+ Recent posts