Skip to content

Latest commit

 

History

History
85 lines (49 loc) · 6.49 KB

File metadata and controls

85 lines (49 loc) · 6.49 KB

AWS에 배포하기

Amazon AWS는 1년간 프리 티어(무료 할당량)을 제공하므로, 여러분의 프로젝트를 호스팅하고 개발 실력과 더불어 DevOps 실력을 키울 수 있는 매우 좋은 선택지입니다.

회원 가입하기

가장 먼저 여러분은 회원가입 을 하셔야 합니다.

Amazon은 다양한 기능을 제공하지만 여기서는 EC2 간단히 배포하는 방법에만 알려드릴 겁니다. AWS Management 콘솔로 이동한 후, EC2 대시보드로 이동하세요.

보안 그룹

새로운 인스턴스(서버)를 만들기 전에 좌측 메뉴에서 보안 그룹을 먼저 설정해야 합니다. 현재는 개발에 필요한 포트들만 전체에게 개방했습니다. 배포 단계로 가면 더 깊게 규칙들에 대해 고려해보아야 합니다(SOURCE의 IP 범위 등).

기본적인 보안 그룹 규칙들은 다음과 같이 생겼습니다. 두 개의 커스텀 포트는 개발용 서버와 몽고DB용 포트입니다. 다른 포트를 사용한다면 포트를 수정하거나 규칙을 더 추가하면 됩니다.

  TYPE          PROTOCOL    PORT RANGE    SOURCE
  HTTP            TCP           80       0.0.0.0/0
  SSH             TCP           22       0.0.0.0/0
  HTTPS           TCP           443      0.0.0.0/0
Custom TCP Rule   TCP           3000     0.0.0.0/0
Custom TCP Rule   TCP           27017    0.0.0.0/0
인스턴스 세팅하기

이제 인스턴스를 만들 시간입니다. 먼저 우측 상단에 리전(지역)을 확인하세요. 여러분의 지리적 위치와 가장 가까운 곳이 좋습니다. 한국 사람은 서울로 고르면 됩니다.

리전 설정을 완료했으면 인스턴스 시작 버튼을 클릭하세요.

프리 티어 사용 가능인 Ubuntu Server 18.04 LTS를 선택하고 다음을 눌러 넘어가세요, 대부분 기본 설정이면 충분합니다. 6. 보안 그룹 구성에서 이전에 만들었던 보안 그룹을 선택하세요, 검토 후 시작하면 됩니다.

마지막 단계는 기존 키 페어 선택 또는 새 키 페어 생성입니다. 새롭게 받았다면 안전한 곳에 보관하세요(GitHub같은 곳에 올리지 마세요!)

몇 분이 지나면 여러분의 인스턴스가 준비되고, 실행 중인 인스턴스 목록에 표시됩니다. 여러분은 여러분의 사이트에 퍼블릭 IP를 통해여 접근할 수 있습니다. 이 퍼블릭 IP는 계속 바뀌므로 좌측 메뉴에서 탄력적 IP를 고른 후 인스턴스와 연결하면 좋습니다.

탄력적 IP

탄력적 IP를 인스턴스에 할당하는 것은 간단히 버튼 클릭만으로도 가능합니다. 방금 만든 여러분의 인스턴스와 연결하면 됩니다. 탄력적 IP는 원래 유료이지만 인스턴스와 연결한 경우 무료입니다. 따라서 인스턴스와 연결되지 않은 탄력적 IP가 있으면 요금이 부과됩니다.

탄력적 IP까지 설정되었다면 인스턴스에 연결할 차례입니다. 22번 포트(보안 그룹에서 허용함)를 사용하는 SSH를 사용해서 연결할 것입니다.

인스턴스 연결하기

EC2 대시보드에서 실행 중인 인스턴스 페이지로 가서 인스턴스를 선택하면 우측 상단 연결 버튼이 활성화됩니다. 거기에 인스턴스에 연결하는 방법이 나와 있습니다. SSH 클라이언트 메뉴를 참조하세요. 보통은 터미널에서 다음과 같이 입력하면 됩니다.

ssh -i "키페어.pem" ubuntu@ec2-##-#-###-###.compute-1.amazonaws.com

그러면 터미널을 통해 인스턴스에 연결됩니다. 서버에는 아무것도 설치되어 있지 않아서 우리가 직접 설치해야 합니다.

소프트웨어 설치하기

먼저 노드 를 설치하세요. 그리고 몽고DB 를 설치하세요. 리눅스 버전마다 설치 방법이 달라서 Ubuntu 18.04에 호환되는 방법을 선택해야 합니다.

임시로 몽고 서버를 켜기 원한다면 다음 명령어를 사용하세요. sudo /usr/bin/mongod --dbpath /home/ubuntu/db/data 영구적으로 켜길 원한다면 다음 명령어를 사용해야 합니다. sudo /usr/bin/mongod --dbpath /home/ubuntu/db/data --fork --logpath /var/log/mongodb.log

파일 업로드하기

이제 SCP 명령어를 사용해서 우리의 소스 코드를 업로드할 것입니다.

scp -i 키페어.pem -r 소스경로 ubuntu@ec2-##-##-##-###.compute-1.amazonaws.com:다운경로

키페어는 인스턴스를 생성할 때 다운로드받았던 그 파일입니다. 소스경로는 소스코드를 담고 있는 폴더의 경로를 지정하면 되고, 다운경로는 EC2 서버의 폴더를 지정하면 됩니다.

이 방법을 사용할 때 node_modules 폴더는 업로드하지 않는 것을 강력히 권장합니다. 소스 코드 업로드 후 npm install로 패키지들을 설치하세요.

프로젝트 실행하기

이제 파일들과 디펜던시 패키지들이 모두 서버에 있으니, npm start를 입력하면 서버가 실행됩니다. 그러나 계속 유지되지는 않습니다. 터미널을 닫아 SSH 연결이 끊기면 서버도 같이 종료됩니다.

서버 계속 돌아가게 하기

이 현상을 고치기 위해 우리는 pm2 를 사용할 것입니다. 먼저 pm2를 sudo npm install pm2 -g로 전역 설치하고 sudo pm2 start npm -- start로 서버를 실행하면 됩니다.

포트 리다이렉팅하기

포트를 80에서 3000으로 리다이렉트하는 가장 간단한 방법은 IP 테이블을 사용하는 것입니다. sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000 명령어를 입력하세요. 보안에 민감하지 않고, URL이 깔끔한(포트 3000이 안 붙은) 작은 프로젝트를 호스팅하길 원한다면 이 정도만 하면 됩니다.

실무에 더 적합한 방법은 NginX 를 사용해서 역방향 프록시를 설정하는 것입니다. 우리 서버는 포트 3000에서 돌아가고 사용자는 포트 80으로 접근할 수 있습니다. 간단한 튜토리얼은 여기 에 있습니다. NginX를 사용하면 로드 밸런싱 및 IP 차단을 할 수 있고, 웹 공격 감지와 서비스 보호 기능을 사용할 수 있습니다.