pm2 가 없다면 설치한다.

npm install -g pm2

pm2 init

init을 하면 ecosystem 파일이 생성된다.

내 설정은 아래와 같다.

module.exports = {
  apps : [{
    name: 'API',
    script: './index.js',

    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '512M',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'ec2-user',
      key  : '$home/.ssh/key.pem',
      host : '13.209.56.51',
      ref  : 'origin/master',
      repo : '<https://github.com/almond-bongbong/gns_api.git>',
      path : '/deploy/gns-api',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

<aside> 💡 앱 재 시작에는 restart 대신 reload를 사용하는 편이 낫다. 전자는 프로세스를 즉시 종료시키고 재 시작하기에 접속이 불가능한 시간이 발생할 수 있다. 하지만 후자는 그런 간격이 생기지 않도록 해준다. reload 명령어는 앱 프로세스와 관련된 프로세스를 정리한 후 준비된 상태에서 다시 시작하는 gracefulReload에 해당된다. 그리고 reload 명령어를 사용할 때 현재 실행 중인 프로세스가 없다면 자동으로 start 명령어로 대체한다.

</aside>

배포

pm2 deploy production setup

pm2 deploy ecosystem.config.js production

setup은 첫 배포시에만 해주면 된다.

참고

https://blog.rhostem.com/posts/2018-05-27-pm2-deploy