ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS EC2에 Node/Nginx 설치
    Tech/Devops 2020. 3. 18. 23:46

    해당 게시글은 AWS EC2 인스턴스에 Node.js와 Nginx를 설치하고 실행시키는 과정을 다루었습니다.

     


    1. Putty를 이용해 AWS EC2 인스턴스에 ssh 접속하기(링크 참고)

     

    [문과 개발자] AWS EC2를 사용해보자

    해당 게시글은 AWS EC2의 인스턴스 서버를 생성하고, ssh 접속까지 하는 과정을 다루었습니다. #1. AWS EC2 접속하기 #2. 인스턴스 시작하기 #3. AMI 선택하기 * 나의 경우에는 Ubuntu를 사용하고자 하였고, 18..

    yunknows.tistory.com


    2. Node.js 설치하기

    다음을 입력해 노드 버전관리자인 'nvm' 설치하기

    $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

    명령줄에 다음을 입력해 nvm 활성화하기

    $ . ~/.nvm/nvm.sh

     

    nvm을 사용해 최신 버전의 Node 설치하기

    $ nvm install node

    node와 npm이 제대로 설치되어 있는지 확인하기

    $ node -v
    $ npm -v

    NVM(Node Version Manager)

    Node를 설치하고 관리하기 위한 도구임. Node 버전에 따라 사용할 수 있는 모듈들도 다르기 때문에 버전관리가 중요 함. 이에 nvm을 이용해 여러 버전의 Node를 쉽게 설치하고 버전 간의 전환도 가능하게 하고자 함.

    * nvm을 이용해 설치할 경우, npm도 그에 맞게 자동으로 설치됨

    NVM 관련 명령어

    #원격 저장소의 node 목록 확인하기
    $ nvm ls-remote
    $ nvm ls-remote v10 #v10.... 버전만 검색
    
    #현재 설치된 node의 버전 확인하기
    $ nvm ls
    
    #사용할 node의 버전 지정하기
    $ nvm use 13.11.0 #특정 node의 버전 사용하기
    $ nvm use v13 #v13버전 중 가장 최신의 버전을 사용한다
    
    #node 버전 고정시키기
    $ nvm alias default 13.11.0
    $ nvm alias default node #설치된 가장 최신 버전의 node를 디폴트로 사용
    
    #새로운 쉘을 실행하거나 띄우게 되면, node의 버전이
    #시스템 버전으로 변경되므로 이를 고정하기 위해 위와 같은 작업이 필요함.
    
    #현재 사용 중인 nvm 버전 확인하기
    $ nvm current

     

    NPM(Node Packaged Manager)

    Node로 만들어진 모듈을 설치하고 버전을 관리해 주는 도구임. 프로그램보다 조금 작은 단위인 여러 패키지들을 활용해 더욱 더 풍성한 서비스를 만들 수가 있게 됨.

    * 이와 관련해서, Facebook에서 개발한 Yarn이라는 새로운 패키지 매니저가 있는데. 이 부분도 추후에 다루고자 함.

    참고자료

    - 자습서 : AWS EC2 인스턴스에서 Node.js 설정    


    3. nginx 설치하기

    $ sudo apt-get install nginx

    sudo + <comman line>

    sudo의 본래 명칭은 슈퍼유저로서의 실행이라는  'superuser do'에서 유래하였으나, 후에는 'substitute user do'라는 다른 사용자의 권한으로 실행으로 해석되게 되었음. 아무튼, sudo는 root가 아닌 사용자가 root에 준하는 능력으로 sudo 다음에 나오는 명령을 실행하게 하는 명령어임.

    * 위키백과 참고

    apt-get(Advanced Packaging Tool)

    우분투를 포함한 데비안 계열의 리눅스 운영체제에서 쓰이는 패키지 관리 명령어 도구임.

    * 이와 관련해서, apt-get과 apt-cache를 하나의 명령어로 사용하기 위해 'apt'가 탄생했다고 하는대, 이 또한 추후에 다루고자 함.

     

    nginx가 설치되었는지 확인하기 위해서 브라우저를 통해 접속해 보도록 한다. 접속하기 위해서는 AWS EC2 인스턴스에 있는 DNS나 IP를 이용해 접속하도록 한다. 설치가 완료되었다면! 다음과 같은 웰컴 메시지가 출력된다.

    nginx 관련 명령어

    #설치되어 있는 nginx 버전 확인하기
    $ nginx -v
    
    # nginx 설정 변경된 경우, 중단없이 변경된 설정 반영하기
    $ service nginx reload
    
    # nginx 구동관련 명령어
    $ service nginx start
    $ service nginx stop
    $ service nginx restart

    4. node.js 실행하기

    우선, node 디렉토리를 만들어 주고, npm init을 통해 package.json 생성을 한다. 이후 node.js의 웹 프레임워크인 express를 설치하고 app.js 파일을 만들어 테스트 코드를 작성한다.

    $ mkdir node
    
    $ cd node
    
    $ npm init
    
    $ npm install express
    
    $ sudo vi app.js

    코드는 아래와 같다. node express 서버는 3000번 포트를 오픈하고, /proxy1과 /proxy2로 요청이 들어올 경우, 응답값을 전송할 수 있도록 했다.

    # app.js
    
    const express = require('express');
    const app = express();
    
    app.get('/proxy1', (req, res) => {
    	res.send('proxy1')
        }))
    
    app.get('/proxy2', (req, res) => {
    	res.send('proxy2')
        }))
    
    app.listen(3000, () => {
    	console.log('open 3000 port')
    })

    5. nginx 리버스 프록시 설정하기

    만약, 리버스 프록시가 설정되어 있지 않다면, node 서버와 통신하기 위해 3000번 포트로만 접속해야 한다. 하지만, nginx를 통해 리버스 프록시를 설정해 둔다면, 서비스 포트인 80번 포트로 접속해도 node 포트인 3000번 포트로 포워딩될 것이다.

     

    nginx의 설정과 관련한 디렉토리는 'etc/nginx'에 있기에 해당 디렉토리로 이동해 보자.

    $ cd /etc/nginx

    해당 폴더에서 sites-enabled에 있는 default 파일을 수정해 리버스 프록시를 설정하도록 한다. 즉, 클라이언트가 80번 포트로 접근할 시, 3000번 포트로 매핑할 수 있도록 하고자 한다.

    server {
    	listen 80 default_server;
        listen [::]:80 default_server;
        
        root /var/www/html
        
        index index.html index.htm index.nginx-debian.html;
        
        server_name _;
        
        location /proxy1 {
            proxy_pass http://localhost:3000/proxy1;
        }
        
        location /proxy2 {
            proxy_pass http://localhost:3000/proxy2;
        }
    }

     

    위에 있는 location 블럭에 있는 proxy_pass가 지시하는 것이 바로 '리버스 프록시'이다. location 블록('/proxy1' 이나 '/proxy2')에 매칭되는 모든 요청을 node가 돌아가는 localhost:3000으로 넘기는 것이다. 간단한 서비스의 경우, proxy_pass 옵션 정도로 충분하나, 더 복잡한 서비스의 경우 추가적인 작업을 해줄 수 있다. 하지만 여기서는 다루지 않고. 추후에 nginx와 관련해서 다시 다루어 보고자 한다.

     

    자, 그러면, 사이트에 접속해 보면서 어떻게 화면이 뜨는지 확인해 보자. 우선 nginx 설정을 바꾸었기에 재시작해 주고, node도 실행해 본다. 노드 실행하기 위한 명령어는 다음과 같다.

    $ node node/app.js

    노드가 실행된 화면

     

    jyuns.site의 경우 root 주소로, 이와 관련한 프록시 설정을 하지 않았기 때문에 'Welcome to nginx!' 페이지가 뜨게 된다. 그러나 jyun.site/proxy1와 /proxy2의 결과를 보면 express 설정했던 것과 같은 응답값이 출력된 것을 볼 수 있다.

     

    리버스 프록시가 설정되어 있지 않다면, 80번 포트로 접속하더라도 그대로이나, 리버스 프록시를 설정하여 다른 포트로 넘겨주거나 하면 위처럼 3000번 포트로 포워딩되어 클라이언트가 해당 웹페이지를 볼 수 있게 된다.

     

    결과 화면

     

     

    그렇다면, 지금까지 AWS EC2 인스턴스에 nginx와 node가 결합된 환경을 배포해보았다. 다음에는 nginx에 대해서 더 깊게 다루어 보고, 무중단 서비스를 위한 'PM2'에 대해서도 다루어 보고자 한다.

    'Tech > Devops' 카테고리의 다른 글

    Devops Roadmap 2021  (0) 2021.06.03
    AWS SAA C01 시험 후기  (1) 2020.06.16
    AWS 스토리지 서비스 파고 들기  (2) 2020.04.26
    CI/CD가 뭐야?  (0) 2020.04.02
    AWS EC2를 사용해보자  (0) 2020.03.14

    댓글 0

Designed by Tistory.