pm2와 config를 활용한 node.js app 실행 환경 관리

process managing

node.js 앱을 배포하다 보면, 모니터링, 프로세스 관리, std 로그 관리 등이 필요할 때가 있다. 요런 니즈로 사용하는 것들은 크게 forever, nodemon, pm2등이 있다.

forever,nodemon,pm2 npmtrends 생각보다 nodemon을 많이쓴다!?


그중에서도 pm2는 모니터링 및 프로세스의 현재 상태를 시각적으로도 잘 보여주고, 여러 프로세스를 관리할 때 용이하게 되어있어서 애용하는 도구다. 무엇보다 세련되게 생겼다.

http://pm2.keymetrics.io/

기존 pm2 1.x.x 버전을 쓰고 있는 서버가 있어서, 이번에 배포 환경 정리하면서 pm2 로 업그레이드하였고, pm2 2.x에서 나온 ecosystem을 활용했다.

ecosystem 외에도 clustering, deployment 등도 제공한다. 나중에 시간 내서 읽어보자. PM2 Documents

config

https://github.com/lorenwest/node-config

config 패키지를 사용하면 application 내에서 손쉽게 configuration에 접근할 수 있다. 물론 환경별로 configuration을 관리할 수 있고, default 값에 변경되는 값만 override 할 수도 있다.

pm2 + config

pm2의 ecosystem을 활용하면 실행 시에 NODE_ENV를 명시해서 넘길 수 있다.

pm2 ecosystem.config.js --env production

// ex) ecosystem.config.js
{
  "apps" : [{
    "name"        : "worker",
    "script"      : "./worker.js",
    "watch"       : true,
    "env": {
      "NODE_ENV": "development"
    },
    "env_production" : {
       "NODE_ENV": "production"
    }
  }]
}

전달받은 NODE_ENV 이름에 맞는 config 파일은 config/ 디렉토리 안에 추가해주면, application 전체에서 config로 쉽게 접근이 가능하다.

[Project Root]
  ├ (...)
  ├ package.json
  ├ config/
  │ ├ default.json // config 의 기본 파일이다.
  │ └ production.json
  │
  └ ecosystem.config.js