서버 배포 (EC2)
EC2 콘솔을 통해 EC2 인스턴스를 생성해야 합니다.
간단한 서버 애플리케이션을 생성하고 EC2 인스턴스에 코드를 배포해야 합니다.
서버를 실행시키고 브라우저에서 서버에 접속할 수 있어야 합니다.클라이언트 배포 (S3)
S3 콘솔을 통해 버킷을 생성해야 합니다.
클라이언트 파일을 빌드하고 결과물을 버킷에 업로드해야 합니다.
정적 웹 호스팅 기능을 이용하여 클라이언트 코드를 배포해야 합니다.데이터베이스 연결 (RDS)
RDS 콘솔을 통해 RDS 인스턴스를 생성해야 합니다.
로컬 터미널 혹은 EC2 인스턴스가 실행되고 있는 터미널을 통해 RDS 인스턴스에 연결해야 합니다.
AWS에 접속하고 콘솔에 로그인
한다.
리전은 아시아 태평양 (서울) ap-northeast-2
로 정했다.
AWS > 서비스 > EC2 검색
인스턴스 시작 버튼을 클릭하여 인스턴스 생성
인스턴스 이름을 설정하고
용도에 맞게 AMI를 선택하는 과정이다.
AMI는 Ubuntu로 프리 티어 사용 가능 태그를 확인하여 과금이 되지 않도록 하였고
스프린트에서 권장하는 18버전으로 설정했다.
생성되는 인스턴스를 원격으로 제어하기 위해서는 SSH 연결을 통한 원격접속이 필요하다.
원격접속을 위해서 필요한 Key를 생성하고 다운로드하는 과정이다.
SSH
- PC와 PC가 인터넷과 같은 Public Network를 통해 서로 통신을 할때 보안상 안전하게 통신을 하기 위한 프로토콜이다.
인스턴스 유형을 선택하는 과정이다. 생성하는 인스턴스의 CPU, RAM, 용량에 대한 선택이 가능하다.
인스턴스 시작 버튼을 눌러 인스턴스를 생성한다.
인스턴스 생성 마지막 단계에서 다운로드 한 파일은
SSH 통신을 위한 키 페어 중 프라이빗 키가 기록된 파일이다.
AWS에는 퍼블릭 키가 저장된다.
해당 키 페어 파일은 EC2 인스턴스에 연결을 할 때 사용하는 암호가 담긴 파일이다. 따라서 pem 파일은 관리에 유의해야 한다.
생성한 인스턴스를 체크하고 상단 연결 버튼을 누른다.
SSH 클라이언트 탭에 설명이 적혀있다.
chmod 400 ~/Downloads/AWS_Deploy_Practice.pem
프라이빗 키 파일의 권한을 수정한다.
ssh 명령어를 통해 인스턴스에 접속한다.
EC2 인스턴스에 처음 접속하면 서버를 구동하는 데 필요한 개발 환경을 구축하는 것부터 시작해야 한다.
인스턴스가 접속된 터미널에 다음과 같은 명령어를 사용한다.
$ sudo apt update
패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트한다.
NVM GitHub 페이지의 Install & Update Script 부분을 참조하여 nvm을 설치한다.
$ nvm install node
node.js를 설치한다.
$ sudo apt install npm
npm 명령어가 정상적으로 입력되지 않는 상황을 방지하기 위해서 npm 설치를 진행한다.
$ git clone https://github.com/codestates/im-sprint-practice-deploy.git
스프린트 코드가 저장된 github 레포지토리 주소를 이용해 클론을 다운로드 한다.
username
은 github 계정의 username을 입력해주고
password
는 github 계정의 Personal access tokens을 입력한다.
$ cd im-sprint-practice-deploy/server/
해당 폴더로 이동하여 npm install
후 sudo npm start
로 서버 실행
정상적으로 서버가 실행되었다.
보안 그룹이란 인스턴스로 들어가고 인스턴스에서 나가는 트래픽에 대한 가상 방화벽이다.
인바운드: 인스턴스로 들어가는 트래픽
아웃바운드: 인스턴스에서 나가는 트래픽
AWS EC2의 보안 그룹 탭으로 들어가 생성된 보안 그룹을 클릭
인바운드 규칙 편집으로 들어간다.
인바운드 규칙을 추가해준다.
프로세스
프로세스는 컴퓨터 프로그램의 인스턴스로
일반적으로 "실행 중인 프로그램"을 의미한다.프로세스를 보는 방법
- 윈도우: 작업 관리자
- 맥: 활성 상태 보기
- 리눅스: ps 명령어
ps 명령어의 사용법을 통해 프로세스를 확인하는 법을 알아두면 서버 운영에 큰 도움이 된다.
&
라는 키워드를 명령 뒤에 붙여 백그라운드 실행으로 만들어줄 수 있다.
kill
명령을 통해 백스라운드에서 실행 중인 프로세스를 종료할 수 있다.
이런 명령어 대신에 프로세스를 전문적으로 관리해 주는 프로그램이
PM2 (Process Manage) 이다.
PM2는 node.js로 실행되는 프로그램(프로세스)를 관리해 주며, 백그라운드에서 실행되게 만들 수 있다.
단순히 백그라운드 실행뿐만 아니라 다양하고 강력한 기능을 제공한다.
서버 운영에서는 필수라고 할 수 있는 로그 관리를 좀 더 전문적으로 할 수 있다.
EC2 인스턴스에서 서버가 접속된 상태에서 PM2를 설치해보자
npm install pm2 -g
스프린트 서버 디렉토리에 PM2 설치
pm2 start app.js
node.js 앱을 백그라운드로 실행한다.
이제 터미널을 종료하더라도, node.js 애플리케이션이 프로세스로 실행된다.
명령어 | 동작 |
---|---|
pm2 start | 프로세스 시작 |
pm2 stop | 프로세스 중지 |
pm2 restart | 프로세스 재시작 |
pm2 ls | 프로세스 목록 보기 |
pm2 log | 프로세스 로그 보기 |
현재상태에서 '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
명령어를 통해 서버를 실행한다.