framwork/nodejs

[Nodejs / PM2] PM2(Process Manager) 사용법

닉네임없음ㅎ 2024. 3. 15. 19:00

PM2를 사용해서 노드 서버를 실행시켜보자 ! 

*PM2 공식홈페이지 
https://pm2.keymetrics.io/

*PM2란?
-> Node.js 프로세스 관리자 
node는 싱글 스레드 기반이지만, 멀티 코어 멀티 스레딩을 사용할 수 있게 해준다 ! 
클라이언트로 부터 요청이 오면 알아서 여러 노드 프로세스에 고르게 분배하는 로드밸런싱 역할을 한다.



<설정>
1. pm2 모듈을 global로 설치한다.

 npm install pm2 -g



2. ecosystem.config.js 파일을 생성한다

pm2 ecosystem



=> 해당 파일을 생성하는 이유는 일반적으로 사용하는 env.dev 이런 파일을 pm2가 읽지 못한다고 한다 
그래서 pm2가 읽을 수 있는 환경설정 파일을 생성하는 것.

pm2 ecosystem을 실행하면  

module.exports = {
  apps : [{
    script: 'index.js',
    watch: '.'
  }, {
    script: './service-worker/',
    watch: ['./service-worker']
  }],

  deploy : {
    production : {
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystehttp://m.config.js --env production',
      'pre-setup': ''
    }
  }
};


이렇게 파일이 생성된다. 

apps 항목에 사용하게 될 설정을 작성하면 되고, 
deploy는 원격서버와 git을 연동해서 배포하는 방식이다. 


<ecosystem.config.js>

이렇게 작성을 해보았다.

(env에 본인의 환경에 맞게 세팅해야함 ! )


<package.json>


ecosystem.config파일과 함께 pm2를 실행하기 위해서 
pm2 start ecosystem 라고 하면 된다. 

나는 config파일안에 개발모드와 운영모드를 나누어 환경설정을 해두었기 때문에,
package.json 파일의 scripts에 명령구문을 넣는다

개발, 배포모드를 실행하는 명령어로 

start:pm2Dev

start:pm2Prod 를 추가했다 ! 

(그럼 npm run start:pm2Dev로 실행 가능하다)


-- only 옵션은 ecosystem.config.js파일에서 name값이 nodejs_project_dev 인 항목의 설정을 실행시켜주는 옵션이다.
-- env 옵션은 실행되는 항목에 env 설정을 실행시켜주는 옵션이다. 

 

 


이렇게 production 옵션으로 실행해보니 

cluster mode로 서버가 돌아가는것을 확인할 수 있다.

 



< pm2 의 기본 명령어들 >

 

-> 공홈에 가면 자세히 나와있음 


1. 프로젝트 실행

pm2 start 실행파일이름
pm2 start 실행파일이름 -i 0


=> ' -i 0 ' 옵션을 붙여주는 경우 클러스터 모드로 실행해줌 
=> pm2는 자동으로 로드밸러서 역할을 하여서 생성된 각 프로세스 간의 모든 http/ websocket / tcp/ udp 연결을 공유하게 해준다 !
=> 사용가능한 cpu에 따라 최대 프로세스를 시작해줌.

2. 프로세스 상태 확인

pm2 status


3. 프로세스 삭제

pm2 delete 프로세스아이디



4. 모든 프로세스 종료

pm2 kill

'framwork > nodejs' 카테고리의 다른 글

[NodeJS] pnpm 사용하기  (0) 2024.11.12
[NodeJS] Nodejs란?  (0) 2024.07.10