EC2로 node.js (express)배포하기(pm2, nginx 사용)

2019. 11. 5. 16:46서버 배포

안녕하세요.

 

이번 시간에는 AWS EC2로 node.js(express)를 배포해보겠습니다.

 

먼저, AWS 홈페이지에 EC2에 메뉴에 들어갑니다.

 

Launch instance를 누른 후 instance 종류를 선택합니다.

 

저 같은 경우 ubuntu 16.04 LTS를 선택하겠습니다.

 

그 다음 계속 기본 설정으로 다음을 누르고 Step 6: Configure Security Group에서 설정을 추가해줍니다.

 

먼저 ngnix를 쓸거기 때문에 ngnix가 받는 포트인 80(http), 443(https)을 설정해주고 pm2를 쓸거기 때문에 pm2가 사용하는 3000포트를 추가해줍니다.

 

맨 마지막에 있는 27017포트는 제가 MongoDB를 쓰는데 MongoDB를 배포한 서버가 27017 포트를 쓰기 때문에 추가해줬습니다. 만약 다른 DB를 쓴다면 그 DB에 맞는 포트를 추가해주시면 됩니다. 

 

설정을 완료하면 review and launch를 클릭하고 설정이 잘 맞는지 확인하고 Launch합니다.

 

그럼 다음과 같은 화면이 나오는데 기존에 이미 key pari가 있는 분들은 그걸 쓰셔도 되고 새로 만드셔도 됩니다. 저는 제가 하고 있는 프로젝트인 60Decibel로라는 이름의 기존 key pair를 사용하겠습니다.

 

만약 새로 만드신다면 먼저 다운로드를 하시고 기억할 수 있는 위치에 이동을 시켜야합니다.

 

그 다음 이용 약관에 찬성하고 Launch instances를 누릅니다.

 

어느정도 기다리면 다음과 같이 정상적으로 running 되고 있는걸 볼 수 있습니다. 지금까지 node.js를 배포하기 위한 AWS EC2 instance를 만들어 보았구요 이제 생성된 EC2에 필요한 모듈들을 깔아 보겠습니다.

 

connect를 눌러보면 다음과 같이 뜹니다.

 

먼저 아까 터미널에서 key pair(pem 파일)을 다운 받은 위치로 갑니다.

 

그 다음 

$ chmod 600 60Decibel.pem(chmod 400 60Decibel.pem하셔도 됩니다. 개인적으로 600을 더 추천드려요. 보안상의 이유로)

그 다음 위 화면에서 Example에 있는 코드를 복사해 붙여넣습니다.

 

$ ssh -i "60Decibel.pem" ubuntu@ec2-13-125-237-79.ap-northeast-2.compute.amazonaws.com

 

yes or no가 뜨면 yes를 눌러 줍니다.

 

그럼 ubuntu에 들어왔습니다.

 

그 다음 $ sudo apt-get update를 해줍니다.

 

그런 다음, $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash

 

깔았으면 nvm --verison를 쳐봅니다. 만약 nvm command not found가 뜨면 exit 했다가 다시 접속해줍니다.

 

나갔다 들어오니

 

nvm이 잘 깔린걸 볼 수 있죠?

nvm이 깔렸다면 $ nvm install 10.16.3을 통해 node 버전을 깔아줍니다. 저는 10.16.3 버전을 깔아보겠습니다.

 

$ node --version를 쳐보면 잘 깔린 것을 볼 수 있습니다. 

 

$ npm --version를 쳐보면 npm도 잘 깔린것을 볼 수 있습니다.

 

이제 $ sudo apt-get install nginx로 nginx를 깔아줍니다.

 

잘 깔렸습니다.

 

그다음 cd를 통해 root 디렉토리로 이동합니다.

 

다음으로 cd /etc/nginx/로 이동한 후 sudo service nginx start를 통해 nginx를 실행시켜 봅니다.

 

그 다음 인스턴스 설정에 있는  본인의 Public DNS에 들어가봅니다.

 

다음 화면이 보이면 제대로 실행되는 겁니다 ㅎㅎ

 

그 다음 /etc/nginx/sites-available로 이동해서 $ sudo vim 파일이름( ex) sudo vim 60Decibel)을 해줍니다.

 

그 다음 다음과 같이 쳐줍니다. location에 있는 3000포트는 여러분이 ec2를 만들때 설정한 포트로 해줍니다.

 

그런 다음

/etc/nginx/sites-enabled로 이동한 다음

 

$ sudo ln -s ../sites-available/파일이름(sites-available에 만들어 놓은 파일) 심볼릭 링크 이름

ex) sudo ln -s ../sites-available/60Decibel slb60Decibel

 

다음과 같이 ls를 하면 심볼릭 링크가 색깔로 잘 나오는걸 볼 수 있습니다. 

 

그 다음 git clone를 해줍니다.(만약 디렉토리가 하위라면 $ cd를 통해 root 디렉토리로 이동 후 git clone을 해줍니다. 여러분들의 repo를!!)

 

이제 package.json이 있는 폴더로 이동해 $ npm install을 해줘 필요한 모듈들을 다운받아 줍니다.

 

node_modules가 잘 깔린 것을 봅니다.

 

그 다음 사진과 같이 입력해 환경 변수를 설정해줍니다.

 

추가로 $ export PORT=여러분의 포트( ex) export PORT=3000) 

 

$ printenv를 통해 잘 바꼈는지 봅니다.

 

다르 환경 변수를 설정하고 싶다면 export 변수이름=값 형식으로 입력하면 됩니다.

 

다음으로 pm2를 전역으로 깔아줍니다. $ npm install pm2 -g

 

그런 다음 $ pm2 start src/index.js를 통해 pm2 인스턴스를 실행시킵니다.

 

다음과 같이 잘 실행됩니다.

 

이제 aws에 있는 Public IP에 들어가면 성공입니다!

 

고생하셨습니다~