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 generate
는RSA
로Number of bits in a generated key
는2048
로 지정한다.
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 저장
- 다시
Category
에Session
(처음화면)으로 돌아와서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 "====================="
최신버전을 강제로
pull` 합니다.- 환경변수를 지정합니다.
DATABASE_URI
: MongoDB의 URI입니다.PORT
: 서버 api가 통신할 포트번호를 지정합니다.SOCKET_PORT
:socket.io
를 위한 포트번호를 지정합니다.JWT_SECRET
: 로그인과 비밀번호관리를 위한 JWT Key를 지정합니다.
- frontend,backend 가 저장된 폴더로 이동해 각각
yarn
,yarn build
명령을 실행해 빌드합니다. - 마지막으로 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
pm2
로update.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 에서 확인하실 수 있습니다.
Author And Source
이 문제에 관하여(EZSET-AWS EC2로 배포하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hschoi1104/EZSET-AWS-EC2로-배포하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)