[배포/ AWS] im-sprint-practice-deploy

윤태영 | Taeyoung Yoon·2022년 6월 6일
0

TIL (Today I Learned)

목록 보기
51/53
post-thumbnail

Bare Minimum Requirement

서버 배포 (EC2)

EC2 콘솔을 통해 EC2 인스턴스를 생성해야 합니다.
간단한 서버 애플리케이션을 생성하고 EC2 인스턴스에 코드를 배포해야 합니다.
서버를 실행시키고 브라우저에서 서버에 접속할 수 있어야 합니다.

클라이언트 배포 (S3)

S3 콘솔을 통해 버킷을 생성해야 합니다.
클라이언트 파일을 빌드하고 결과물을 버킷에 업로드해야 합니다.
정적 웹 호스팅 기능을 이용하여 클라이언트 코드를 배포해야 합니다.

데이터베이스 연결 (RDS)

RDS 콘솔을 통해 RDS 인스턴스를 생성해야 합니다.
로컬 터미널 혹은 EC2 인스턴스가 실행되고 있는 터미널을 통해 RDS 인스턴스에 연결해야 합니다.

AWS에 접속하고 콘솔에 로그인한다.
리전은 아시아 태평양 (서울) ap-northeast-2로 정했다.

백엔드 배포

EC2 인스턴스 생성

AWS > 서비스 > EC2 검색

인스턴스 시작 버튼을 클릭하여 인스턴스 생성

인스턴스 이름을 설정하고

용도에 맞게 AMI를 선택하는 과정이다.
AMI는 Ubuntu로 프리 티어 사용 가능 태그를 확인하여 과금이 되지 않도록 하였고
스프린트에서 권장하는 18버전으로 설정했다.

생성되는 인스턴스를 원격으로 제어하기 위해서는 SSH 연결을 통한 원격접속이 필요하다.

원격접속을 위해서 필요한 Key를 생성하고 다운로드하는 과정이다.

SSH

  • PC와 PC가 인터넷과 같은 Public Network를 통해 서로 통신을 할때 보안상 안전하게 통신을 하기 위한 프로토콜이다.

인스턴스 유형을 선택하는 과정이다. 생성하는 인스턴스의 CPU, RAM, 용량에 대한 선택이 가능하다.

인스턴스 시작 버튼을 눌러 인스턴스를 생성한다.

인스턴스 생성 마지막 단계에서 다운로드 한 파일은
SSH 통신을 위한 키 페어 중 프라이빗 키가 기록된 파일이다.

AWS에는 퍼블릭 키가 저장된다.

해당 키 페어 파일은 EC2 인스턴스에 연결을 할 때 사용하는 암호가 담긴 파일이다. 따라서 pem 파일은 관리에 유의해야 한다.

EC2 인스턴스 연결

생성한 인스턴스를 체크하고 상단 연결 버튼을 누른다.
SSH 클라이언트 탭에 설명이 적혀있다.

chmod 400 ~/Downloads/AWS_Deploy_Practice.pem
프라이빗 키 파일의 권한을 수정한다.

ssh 명령어를 통해 인스턴스에 접속한다.

EC2 인스턴스 개발 환경 구축

EC2 인스턴스에 처음 접속하면 서버를 구동하는 데 필요한 개발 환경을 구축하는 것부터 시작해야 한다.

인스턴스가 접속된 터미널에 다음과 같은 명령어를 사용한다.
$ sudo apt update
패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트한다.

NVM GitHub 페이지의 Install & Update Script 부분을 참조하여 nvm을 설치한다.

$ nvm install node

node.js를 설치한다.

$ sudo apt install npm

npm 명령어가 정상적으로 입력되지 않는 상황을 방지하기 위해서 npm 설치를 진행한다.

git을 통해 스프린트 클론 받기

$ git clone https://github.com/codestates/im-sprint-practice-deploy.git
스프린트 코드가 저장된 github 레포지토리 주소를 이용해 클론을 다운로드 한다.

username은 github 계정의 username을 입력해주고
password는 github 계정의 Personal access tokens을 입력한다.

EC2 인스턴스에서 서버 실행

$ cd im-sprint-practice-deploy/server/
해당 폴더로 이동하여 npm installsudo npm start로 서버 실행


정상적으로 서버가 실행되었다.

보안그룹 설정

보안 그룹이란 인스턴스로 들어가고 인스턴스에서 나가는 트래픽에 대한 가상 방화벽이다.

인바운드: 인스턴스로 들어가는 트래픽

아웃바운드: 인스턴스에서 나가는 트래픽

AWS EC2의 보안 그룹 탭으로 들어가 생성된 보안 그룹을 클릭

인바운드 규칙 편집으로 들어간다.

인바운드 규칙을 추가해준다.

EC2 인스턴스상의 node.js 서버 유지

ssh에서 EC2 접속 후 로컬 터미널을 강제 종료할 경우

  1. 로컬 ssh 프로세스가 강제 종료된다.
  2. EC2상의 node 프로세스가 강제 종료된다.
  3. node로 작동중인 웹 서버가 종료된다.

프로세스

프로세스는 컴퓨터 프로그램의 인스턴스로
일반적으로 "실행 중인 프로그램"을 의미한다.

프로세스를 보는 방법

  • 윈도우: 작업 관리자
  • 맥: 활성 상태 보기
  • 리눅스: ps 명령어

ps 명령어의 사용법을 통해 프로세스를 확인하는 법을 알아두면 서버 운영에 큰 도움이 된다.

node 프로세스가 항상 실행되게 만드는 법

백그라운드 실행 (linux/unix)

&라는 키워드를 명령 뒤에 붙여 백그라운드 실행으로 만들어줄 수 있다.
kill 명령을 통해 백스라운드에서 실행 중인 프로세스를 종료할 수 있다.

이런 명령어 대신에 프로세스를 전문적으로 관리해 주는 프로그램이
PM2 (Process Manage) 이다.

PM2

PM2는 node.js로 실행되는 프로그램(프로세스)를 관리해 주며, 백그라운드에서 실행되게 만들 수 있다.

단순히 백그라운드 실행뿐만 아니라 다양하고 강력한 기능을 제공한다.
서버 운영에서는 필수라고 할 수 있는 로그 관리를 좀 더 전문적으로 할 수 있다.

PM2 설치

EC2 인스턴스에서 서버가 접속된 상태에서 PM2를 설치해보자

npm install pm2 -g
스프린트 서버 디렉토리에 PM2 설치

PM2 실행

pm2 start app.js
node.js 앱을 백그라운드로 실행한다.
이제 터미널을 종료하더라도, node.js 애플리케이션이 프로세스로 실행된다.

명령어동작
pm2 start프로세스 시작
pm2 stop프로세스 중지
pm2 restart프로세스 재시작
pm2 ls프로세스 목록 보기
pm2 log프로세스 로그 보기

PM2 authbind 설치

현재상태에서 'pm2 start' 명령어로 프로세스를 실행할 경우 관리자 권한으로 실행시키지 못해 error가 뜬다.
PM2에 관리자 권한을 부여하기 위해서는 'authbind'라는 패키지를 추가적으로 설치해야 한다.

다음 명령어들을 차례대로 입력한다.
sudo apt-get update

sudo apt-get install authbind

sudo touch /etc/authbind/byport/80

sudo chown ubuntu /etc/authbind/byport/80

sudo chmod 755 /etc/authbind/byport/80

authbind --deep pm2 update

authbind 설치 전에 실행되고 있던 프로세스에는 관리자 권한을 부여하지 못하기 때문에
pm2 delete app.js 명령어를 통해 실행중인 프로세스를 삭제한다.

PM2에 관리자 권한을 부여하기 위해서는 authbind --deep 명령어를 앞에 추가해야 한다.

authbind --deep pm2 start app.js 명령어를 통해 서버를 실행한다.

0개의 댓글