상세 컨텐츠

본문 제목

ubuntu :: pm2를 사용하여 background process로 서버 실행하기

AWS

by 비오스터딩 2021. 1. 28. 13:25

본문

서버가 켜져있지 않으면, 웹페이지로 접속이 불가능하다.

 

하지만 노드는 foreground process여서 터미널을 끄면 같이 꺼진다.

터미널에서 노드를 실행하면 로그만 볼 수 있을 뿐, 다른 명령어를 입력할 수 없었던 것도 이것때문이다.

foreground process 대신 background process로 바꾸어 주면, 터미널을 종료해도 서버는 종료되지 않는다.

 

pm2를 사용하여 background process로 바꾸어주자.

 

pm2 설치

vim package.json

package.json 파일을 vim 에디터로 연다.

start: pm2 start app.js 로 바꿔준다.

 

 

sudo npm start 를 입력하면 다음과 같은 화면이 뜬다.

**1024번 미만 포트는 root가 아닐 때는 실행이 되지 않는다.

80번 포트를 사용하려면 root계정으로 접속하거나 (sudo su)

명령어 앞에 sudo를 입력해야한다. sudo npm start로 접속하면 그 다음 pm2 명령어에도 sudo를 붙여야한다.

pm2는 백그라운드 프로세스이기 때문에, 서버를 실행하면서 명령어도 입력할 수 있다.

 

 

npx pm2 monit : 상태 불러오기. (list, logs, custom metrics, metadata 등이 나옴)

npx pm2 logs : 모든 로그 불러오기.

npx pm2 logs --error : 에러 로그 불러오기.

npx pm2 list : 리스트(npm start 하면 나왔던 표) 불러오기.

npx pm2 kill : pm2 종료

npx pm2 start app.js : app.js 실행

npx pm2 reload all : 서버 재시작 

 

 

lsof -i tcp:포트번호  : 포트로 실행중인 서버가 있는지 정보를 알려줌. (없으면 아무것도 뜨지 않는다.)

 

 

-

 

백엔드를 배포용 설정으로 바꿔주자.

aws는 ip를 고정해주지 않으면 ip가 주기적으로 바뀐다. 탄력적ip를 사용하면 ip가 고정됨 (비용 발생)

ip가 변하면 연결방법이 바뀐다.

 

내 컴퓨터 파일에서 배포용으로 설정해주자.

package에서 환경을 배포용으로 설정하기위해(.env를 사용하기위해) cross-env를 사용하자.

그리고 보안을 위해 helmet과 hpp를 설치한다.

 

환경설정이 배포용(production)일때는 자세하게 로그를 기록해주는 combined를 사용하자.

그리고 보안을 위해 hpp와 helmet을 사용한다.

 

pakcage.json 설정

npm start : 배포용일때 pm2로 app.js를 실행한다.

 

 

위와 같이 설정을 마친 후 커밋한다.

-

 

ssh 서버로 돌아와 git pull을 해주자.

 

만약 아래와 같이 Aborting 에러가 뜬다면(app.js에서 포트번호를 바꾼후 push하지 않아 생기는 에러)

git reset --hard를 입력한 후 다시 git pull 해준다.

 

 

다시한번 app.js에서 포트가 80인지 확인해주고,

sudo npm start

하면 서버가 정상적으로 실행됨을 볼 수 있다!

 

 

 

 

 

 

 

반응형

관련글 더보기

댓글 영역