ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. NestJs & Git Actions CI/CD - [ AWS EC2 배포 ]
    공부하기/node.js 2023. 2. 1. 23:44

    지난 글에서 EC2 인스턴스 접근을 다뤄보았습니다.

    이 글은 생성된 EC2 인스턴스에 nest-cli로 생성한 프로젝트의 아주 간단한 배포를 기록합니다.

    인스턴스에 접근한 초기 상태로 가정하고 글을 작성합니다.

     

    1.  AWS-EC2 인스턴스에서 yum 명령을 통해 git을 설치합니다.

    sudo yum update
    sudo yum install git
    git --version

     

    install git
    git --version 명령 결과

     


     

    2. Node.js를 설치합니다.

    [ CASE_1 ]
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
    . ~/.nvm/nvm.sh
    nvm install 16
    node -v
    npm -v
    
    [ CASE_2 ]
    nvm list
    nvm uninstall 다운로드한_18버전의_node
    nvm install 16
    nvm alias default v16.19.0
    node -v
    npm -v

    AWS-EC2자습서 를 따라서 Node.js를 설치하면 알 수 없는 버그가 존재합니다. ( 기준 2023.02.01 )

    자습서에 따르면 현재 아마존 리눅스는 node 18버전 지원이 정상적이지 않은것으로 확인됩니다.

    node 18.x 버전을 다운로드 후 node -v, npm -v 명령을 실행 시 아래 이미지와 같은 오류메시지가 반환됩니다.

    node not found error

    만약 자습서를 따라서 18 버전의 노드를 설치하셨다면 위 코드 블록의 [ CASE_2 ] 명령을 진행해주세요

    정상적으로 node.js를 설치하셨다면 노드 버전과 npm 버전을 확인할 수 있습니다.


    3. git clone 명령으로 EC2 인스턴스에 프로젝트 레파지토리를 클론합니다.

    npm install -g @nestjs/cli
    git clone https://github.com/깃유저명/레파지토리명.git
    ls
    cd ./클론레파지토리
    npm i
    npm run build
    npm run start:prod

    레파지토리를 클론 후 cd 명령을 통해 프로젝트 디렉토리에 접근합니다.

    인스턴스에서 정상적으로 인스턴스가 실행됩니다.


    4. 실행된 인스턴스에 접근합니다.

    저는 3000번 포트로 애플리케이션을 실행하고 있습니다.

    정상적으로 실행되었다면 브라우저의 url영역에 퍼블릭ip:3000를 입력여 접속이 될 것이라고 예상할 수 있습니다.

    하지만 접속을 시도하면 접속이 되지 않는것을 확인할 수 있습니다.

     

    원인은 저희는 인스턴스의 3000번 포트로 애플리케이션을 실행시켰지만 EC2 인스턴스의 3000번 인바운드 포트를 개방하지 않았기 때문입니다.

    AWS-EC2 대쉬보드에서 인스턴스를 클릭한 후 아래 보안탭을 클릭합니다.

    인스턴스 -> 보안탭 클릭
    보안 탭의 인바운드 규칙 섹션

    인바운드 규칙 섹션에서 링크가 걸려있는 보안그룹을 클릭합니다.

    인스턴스의 보안그룹으로 이동하게 되고 아래 인바운드 규칙 탭을 클릭 후 인바운드 편집 버튼을 클릭합니다.

    보안그룹 -> 인바운드 규칙

     

    새로운 인바운드 규칙을 추가합니다.

    새로운 인바운드 규칙 추가
    인바운드 규칙 결과

    이제 다시 브라우저를 통해 퍼블릭ip:3000 주소로 접속을하면 정상적으로 접근할 수 있는 것을 확인할 수 있습니다.

    ec2 인스턴스에서 실행중인 애플리케이션 접근 결과

    5. 이 배포 방법의 문제점은 무엇일까??

    1. 인스턴스에 접근한 터미널을 종료하면 인스턴스에서 실행하고 있는 앱도 같이 종료됩니다.
    2. 퍼블릭ip:포트번호로 접근합니다. 일반적으로 우리는 ip:포트번호로 접근하진 않습니다.
    3. 코드가 변경될 때마다 인스턴스에 접속후 최신 코드로 업데이트 후 다시 빌드 배포를 수행해야합니다.

    이어지는 글에서 문제점들을 하나하나 해결하도록 하겠습니다.

Designed by Tistory.