-
AWS EC2로 Node.js 애플리케이션 배포하기(+ pm2)Node.js/백엔드 2020. 3. 5. 10:17
1. ubuntu의 Home dir(~)에서 npm install git으로 git을 설치한다.
2. git clone 원격저장소주소로 원격저장소를 EC2 인스턴스에 복제한다.
3. EC2 인스턴스에 Nodejs를 설치한다. EC2 인스턴스에 설치하는 방법은 아래 공식 문서에 자세히 나와있다!
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash 로 nvm 먼저 설치하고,
. ~/.nvm/nvm.sh 로 nvm을 활성화 시키고,
nvm install node 로 Node.js의 latest 버전을 설치하면 된다.
nvm은 Node.js의 다른 여러 버전들을 쉽게 설치할 수 있도록 도와주며(nvm install 버전), 현재 버전 또한 쉽게 바꿀 수 있게 해준다(nvm use 버전).
4. T4server로 들어가서 npm i 으로 의존하는 모듈들을 설치해주고(node_modules 생성됨), .env도 새로 만들어준다.
여기까지만 해도 npm start로 바로 서버를 실행시킬 수 있다!
문제는 EC2 인스턴스에서 로그아웃하면 서버도 꺼진다..
클라이언트에서 언제든지 서버로 요청을 보낼 수 있어야 하는데 그렇다고 EC2 인스턴스에 온종일 접속해있을 수도 없는 노릇이다.
이를 pm2가 뚝닥 해결해준다!
5. PM2는 Node.js를 위한 프로세스 관리자로, 개발자나 Devops가 배포 환경에서 Node.js 애플리케이션들을 관리할 수 있게 도와주고.
로드밸런싱, declarative application configuration, 배포 시스템과 모니터링을 자동화해준다.
npm i pm2 -g로 전역설치 해준다!
그리고 pm2 start src/server.ts를 해주면..
내 경우엔 에러가 뜬다=,.=!! 보통 바로 실행시킬 거면 pm2 start app.js를 해주면 된다는데
난 InterpreInterpreter /home/ubuntu/.nvm/versions/node/v13.9.0/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /home/ubuntu/.nvm/versions/node/v13.9.0/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.) 이런 에러가 떴다..
아무래도 ts-node가 써져있는 걸로 보아 타입스크립트 문제인 거 같아서 삽질을 좀 한 결과.
Ecosystem File을 만들어주면 되는 것이었다.
6. 먼저 npm i ts-node를 하고, 로컬에 설치된 ts-node 패키지 경로를 script에 적어준다.
Ecosystem File은 Javascript, JSON, YAML 포맷을 지원한다. JSON이 가장 간단해보여서 JSON으로 만들었다.
script -> pm2 start로 실행시키는 스크립트의 경로
args -> CLI를 통해 script로 전달되는 모든 인자
더 자세한 건 여기 https://pm2.keymetrics.io/docs/usage/application-declaration/
7. 마지막으로 pm2 start ecosystem.json을 실행하면
T4server 상태가 online으로 되고.
이제 EC2 인스턴스에서 로그아웃해도 서버는 계속 실행될 것이다.
혹시 서버 코드가 수정이 되면 commit을 remote git repo로 push하고.
EC2 인스턴스에 ssh 접속한 후, T4server(배포한 애플리케이션)로 이동하고.
git pull을 해서 가장 최신 버전을 가져온 후, 다시 pm2 start ecosystem.json을 해주면 된다!
git push부터 pm2 start까지의 이런 배포 라이프사이클을 지금처럼 개발자가 손수 명령어 쳐가면서 하는 게 아니라, Jenkins로 자동화해줄 수 있다고 한다.
Jenkins는 다음에 알아봐야겠다!
https://pm2.keymetrics.io/docs/usage/cluster-mode/
'Node.js > 백엔드' 카테고리의 다른 글
Cookie (0) 2021.05.01 app.locals, req.app.locals, res.locals의 차이 (0) 2020.04.05 (ppt슬라이드) Express로 서버 구축하기, Sequelize란? (0) 2020.01.31 What app.set function do (Express.js) (0) 2020.01.30 Node MySQL2 (0) 2020.01.30