개발이 취미인 사람

[Node.js] PM2 사용법 - 서버를 무중단으로 사용하기 본문

백앤드(Back-End)/Node.JS

[Node.js] PM2 사용법 - 서버를 무중단으로 사용하기

RyanSin 2021. 4. 17. 18:09
반응형

- 개요

안녕하세요. 이번 시간에는 PM2에 대해 알아보겠습니다.

 

Node.js를 사용할 때 배포 단계에서 서버를 무중단으로 설정해야 하는 상황이 발생합니다.

 

그때 여러 모듈이 있긴 하지만, 그중에 하나인 PM2에 대해 알아보겠습니다.

 

PM2는 Node.js 프로세스 관리자입니다. 공식 홈페이지에서도 대문짝만 하게 설명하고 있습니다.

 

그럼 이제 설정하는 방법에 대해 알아보겠습니다. :)

 

- 설정

첫 번째로 해야 하는 건 pm2 모듈을 Golobal로 설치해야 합니다.

 

- PM2 설치

sudo npm install pm2 -g

sudo 권한으로 설치해야 로컬 npm 모듈에 접근할 수 있습니다.

 

- ecosystem.config.js 파일 생성

pm2 ecosystem

위 명령어를 실행하면 ecosystem.config.js 파일이 생성됩니다. 해당 파일은 PM2 설정 파일입니다.

 

샘플 코드는 아래와 같습니다.

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 ecosystem.config.js --env production',
      'pre-setup': ''
    }
  }
};

 

apps 항목에 우리가 사용할 설정을 설정해서 사용하며, deploy는 원격 서버와 git을 연동해서 배포하는 방식입니다.

 

이번 시간에는 apps에 대한 내용에 대해 알아보겠습니다.

 

- apps 사용되는 옵션

1. name : 실행 모드 이름

2. script : 실행되는 파일

3. instances : 프로세스 수

4. autorestart : 재시작 on/off

5. watch : watch on/off

6. env: Node.js 환경변수

 

저는 위와 같은 옵션들을 활용해서 아래와 같이 설정해서 사용합니다.

module.exports = {
  apps : [{
    name: 'projectName-dev',
    script: './index.js',
    instances: 1,
    autorestart: false,
    watch: false,
    env: {
      Server_PORT:4000,//Express PORT
      NODE_ENV: 'development',
      MariaDB_HOST: "localhost",
      MariaDB_PORT:3306,
      MariaDB_USER:"root",
      MariaDB_PASSWORD:"",
      MariaDB_NAME:"DB-Name",
      Redis_HOST: "localhost",
      Redis_PORT: 6379
    },
  },
  {
    name: 'projectName-pd',
    script: './index.js',
    instances: -1, // 클러스터 모드
    autorestart: false,
    watch: false,
    env: {
      Server_PORT: 1234,
      NODE_ENV: 'production',
      MariaDB_HOST: "localhost",
      MariaDB_PORT:3306,
      MariaDB_USER:"root",
      MariaDB_PASSWORD:"",
      MariaDB_NAME:"DB-Name",
      Redis_HOST: "localhost",
      Redis_PORT: 6379
    },
  }]
};

 

다른 필요한 설정이 있다면 공식 홈페이지를 확인하세요 :)

공홈 : pm2.keymetrics.io/

 

PM2 - Home

Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro service management, at a glance.

pm2.keymetrics.io

이제는 옵션을 설정했다면 실행하는 방법에 대해 알아보겠습니다.

 

package.json 파일에서 scripts 영역에 명령 구문을 넣으면 됩니다.

  "scripts": {
    "dev": "pm2 start ecosystem.config.js --only projectName-dev --env development",
    "start": "pm2 start ecosystem.config.js --only projectName-pd --env production",
    "del": "pm2 del all"
  },

위 명령어에서 중요한 옵션은 --only와 --env입니다.

 

--only 옵션은 ecosystem.config.js 파일에서 name 값이 projectName-dev인 항목에 설정들을 실행시키주는 옵션입니다.  

--env 옵션은 실행되는 항목에 env 설정들을 실행시켜주는 옵션입니다.

 

위 명령어는 개발 모드와 배포 모드에서 각각 따로 실행 되는 명령어입니다.

 

- PM2 주요 명령어

우리는 지금까지 프로젝트 안에 PM2를 설정하는 방법을 알아봤습니다.

 

그럼 PM2 주요 명령어에 대해 알아보겠습니다.

 

1. 프로젝트 실행

 

   명령어 :  pm2 start [프로젝트 실행 파일]

pm2 start index.js

2. 프로세스 상태 확인

 

    명령어 : pm2 status

pm2 status

3. 프로세스 삭제

 

    명령어 : pm2 delete [프로세스 id]

pm2 delete 0

   모든 프로세스 없애기

   명령어 : pm2 kill

4. 프로세스 재실행 (프로세스 kill 후 다시 실행한다. 비추천...)

 

    명령어 : pm2 restart [프로젝트 실행 파일]

 

5. 프로세스 리로드(프로세스를 kill 하지 않고 바로 적용)

 

    명령어 :  pm2 reload index.js

 

이번 시간에 PM2에 대해 알아봤습니다.

 

직접 실습해보시는 걸 추천드리겠습니다. 감사합니다. :)

'백앤드(Back-End) > Node.JS' 카테고리의 다른 글

[Node.js] Express TypeScript 설정  (0) 2021.11.05
[Node.js] babel 설정  (0) 2021.04.16
[Node.js] Sequelize Migration 사용법  (0) 2021.02.13
[Node.js] Sequelize Seeders 사용법  (1) 2021.02.13
[Node.js] Sequelize CRUD 사용법  (0) 2021.02.12