EZSET-AWS EC2로 배포하기

EZSET 프로젝트의 기록


0. EZSET프로젝트 환경

  • BackEnd : Node.js
  • FrontEnd : Vue.js
  • Database : MongoDB
  • Server : AWS EC2

1. AWS EC2 인스턴스 생성

  • AWS Management Console 에 로그인하고 EC2 서비스를 클릭해준다.

  • 인스턴스 시작을 눌러준다.

1.1 AMI 선택

  • 좌측에 프리티어만을 체크해주고 ubuntu Server를 선택한다.

1.2 인스턴스 유형 선택

  • t2 micro를 선택한다.

1.3 보안그룹 구성

  • 상단에 6.보안 그룹 구성을 선택하고 아래와 같이 작성해 준다.

  • 22번은 SSH사용, 5000번은 Node.js API 포트, 5050번은 socket.io를 위해 사용한다.

1.4 Key pair 생성

  • 키 페어 이름을 작성하고 키페어 다운로드를 한다.
  • 이 키는 잘 보관해야한다.

1.5 인스턴스 생성완료

  • public DNS,IPv4 주소를 확인한다.

2. SSH 접속하기

  • PuTTY 를 사용하여 SSH 연결하기

2.1 PuTTY 설치

  • 먼저 PuTTY 에 접속해서 Download it here을 눌러 PuTTY 를 다운로드하고 설치한다.

2.2 PuTTYgen을 사용하여 프라이빗 키 변환

  • [1]번과정에서 저장한 프라이빗 키를 PuTTY 형식으로 변환한다.

2.2.1 PuTTYgen 실행

  • 시작에서 PuTTYgen을 찾아 실행한다. 실행시킨 화면은 아래와 같다.

2.2.2 Parameter 설정

  • PuTTYgen 실행 후 하단의 Parameter 탭에서 Type of key to generateRSANumber of bits in a generated key2048로 지정한다.

2.2.3 프라이빗 키 로드

  • 프로그램 중간의 Action탭에서 Load버튼을 클릭 하고 우측 하단의 파일 형식을 All Files(*.*)선택 후 [1]에서 저장한 프라이빗 키를 선택한다.

  • 아래와 같은 Notice가 뜨면 확인을 눌러준다.

2.2.4 PuTTY 에서 사용가능한 형식으로 저장

  • Sabe private key를 선택하여 파일을 저장한다.

  • 경고창이 뜨면 확인을 눌러주고

  • 경로와 이름을 지정하고 저장한다. (이 게시글에서는 바탕화면에 PuTTY_EZSET_KEY.ppk로 저장했습니다.)

2.2.5 생성완료

2.3 SSH 접속

  • PuTTY 를 실행한다.

2.3.1 Host Name, Port, Connection type 입력

  • ubuntu@public_dns_name 형태로 입력한다.

  • public_dns_name 은 [1]에서 확인한 주소이다.

  • ex) ubuntu@ec2-@-@@-@@@-@@.us-east-2.compute.amazonaws.com

  • Port 는 22, Connection type은 SSH 로 설정한다.

2.3.2 Keepalive 설정

  • 좌측의 Category에서 Connection 선택 후 Seconds between keepalives에 180 입력
  • 세션의 활성 상태를 유지하기 위해 일정간격으로 keepalive데이터를 자동 전송하게 한다.

2.3.3 PuTTY 형식으로 변환된 프라이빗 키 로드

  • 좌측 Category에서 Connection-SSH-Auth를 선택 후 Private key file for authentication에 [2.2]에서 생성한 PuTTY 형식의 프라이빗 키를 선택한다.

2.3.4 Session 저장

  • 다시 CategorySession(처음화면)으로 돌아와서 Saved Sessions에 구별할 수 있는 이름을 작성하고 Save버튼을 눌러 현재까지의 설정을 저장한다.

  • 다음에 PuTTY를 킬때 Saved Session에서 지정한 이름을 클릭 후 Load 버튼을 누르면 현재 적용한 설정값을 불러와서 편하게 SSH 접속을 할 수 있다.

2.3.5 접속

  • 하단의 Open버튼을 눌러 세션을 실행한다.

  • 보안 알림창이 뜨면 를 눌러준다.

2.3.6 접속 확인


3. Node.js, MongoDB, Ngnix 설치 및 Ngnix 설정하기

3.1 설치

  • 2번에서 SSH 접속한 상태에서 이어집니다.

3.1.1 설치준비

sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install curl

3.1.2 Node.js 설치하기

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

3.1.3 MongoDB 설치하기

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod

3.1.4 Nginix 설치하기

sudo apt-get install -y nginx

3.1.5 UFW(FIREWALL) 설치하기

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw --force enable

3.1.6 Yarn 설치하기

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install -y yarn

3.1.7 PM2 설치하기

npm install -g pm2

3.2 Nginx 설정하기

sudo rm /etc/nginx/sites-available/default
sudo vim /etc/nginx/sites-available/default
  • 아래와 같은 내용으로 작성해줍니다.
# /etc/nginx/sites-available/default
server {
  listen 80 default_server;
  server_name _;

  # node api reverse proxy
  location / {
    proxy_pass http://127.0.0.1:5000/;
  }
}
  • nginx 서비스 재시작
sudo systemctl restart nginx

5. 실행하기

  • 실행은 EZSET/tools/에 존재하는 update.sh스크립트에 자동화 되어있습니다.

  • update.sh 내용은 아래와 같습니다.(20-03-01)

(update.sh)
#!/bin/bash
echo "====PULL EZSET===="
cd ./../
git fetch --all
git reset --hard origin/master
git pull
echo "====ENV SETTING===="
export DATABASE_URI=mongodb://localhost:27017/ezset
export PORT=5000
export SOCKET_PORT=5050
export JWT_SECRET=somesecretwowowowokasjdk
echo " DATABASE_URI : $DATABASE_URI"
echo " PORT : $PORT"
echo " SOCKET_PORT : $SOCKET_PORT"
echo " JWT_SECRET : $JWT_SECRET"
echo "====start service===="
cd ./frontend
yarn
yarn build
cd ./../backend
yarn
yarn build
yarn start
echo "====================="
  1. 최신버전을 강제로 pull` 합니다.
  2. 환경변수를 지정합니다.
    1. DATABASE_URI : MongoDB의 URI입니다.
    2. PORT : 서버 api가 통신할 포트번호를 지정합니다.
    3. SOCKET_PORT : socket.io를 위한 포트번호를 지정합니다.
    4. JWT_SECRET : 로그인과 비밀번호관리를 위한 JWT Key를 지정합니다.
  3. frontend,backend 가 저장된 폴더로 이동해 각각 yarn, yarn build명령을 실행해 빌드합니다.
  4. 마지막으로 yarn start 명령으로 실행합니다.
  • 이 스크립트를 pm2로 실행시키면서 백그라운드에서 서버가 실행되도록 하는 방식입니다.

5.1 Clone 하기

  • 먼저 프로젝트를 클론 합니다. 명령을 실행하는 디렉토리는 home/ubuntu 디렉토리입니다.
git clone https://github.com/Tekiter/EZSET.git
  • 만약 프로젝트를 새로운 레포지토리에 옮기신 경우 https://github.com/Tekiter/EZSET.git 위치에 레포지토리 주소를 입력합니다.

5.2 update.sh 권한수정 및 실행

  • update.sh 스크립트의 권한을 수정해 줍니다.
cd ./EZSET/tools
sudo chmod a+x update.sh

  • pm2update.sh스크립트를 실행합니다.
pm2 start --name EZSET update.sh

  • log를 확인하려면 pm2 log명령을 입력하면 됩니다.
pm2 log

  • log 확인중 ctrl+c로 빠져나올 수 있고, pm2 실행 목록은 pm2 list를 통해 확인이 가능합니다.

  • 서버를 종료시키고 싶다면 pm2 delete all명령을 통해 pm2실행을 중지할 수 있습니다.


7. 접속 확인

  • pm2 log명령으로 log 확인시 아래와 같이 되어있다면

  • ec2 인스턴스의 퍼블릭 DNS를 주소로 입력해 접속을 확인 합니다.

  • 처음 접속 계정은 서버를 처음 실행하실 때 log를 확인 해 보면

  • Superadmin created 부분을 확인하시면 됩니다.

8. 참고


프로젝트의 전체 코드는 EZSET github 에서 확인하실 수 있습니다.

좋은 웹페이지 즐겨찾기