배포 자동화 - pm2

pm2의 특징과 사용방법에 대해서 알아봅시다

작성자

홍세민

홍세민

MarcusHong

ecosystem.config.js

  • 개발 서버, 프로덕션 서버로 구분
  • deploy에서 ssh 접속을 할 인증서 경로, user, host, git branch를 설정한다.
  • pre-setup: 최초 필요한 패키지 설치
  • post-deploy: git pull 후 실행할 명령어
  • env에서 환경변수를 설정할 수 있다.
module.exports = {
  apps: [
    {
      name: 'backend',
      cwd: './',
      script: 'npm',
      args: ['start'],
      log_date_format: "YYYY-MM-DD HH:mm:ss Z",
      env: {
        COMMON_VARIABLE: 'true',
        NODE_ENV: 'development'
      },
      env_production: {
        NODE_ENV: 'production'
      }
    }
  ],
  deploy: {
    development: {
      key: '~/.ssh/{key path}',
      user: '{root user}',
      host: '{host address}',
      ref: 'origin/develop',
      repo: '{git repo}',
      ssh_options: ['StrictHostKeyChecking=no', 'PasswordAuthentication=no', 'ForwardAgent=yes'],
      path: '{install path}',
      'pre-setup' : 'scripts/pre-setup.sh',
      'post-deploy': 'npm i --production;pm2 startOrReload ecosystem.config.js development',
      env: {
        COMMON_VARIABLE: 'true',
        NODE_ENV: 'development'
      }
    },
    production: {
      key: '~/.ssh/{key path}',
      user: '{root user}',
      host: '{host address}',
      ref: 'origin/{branch}',
      repo: '{git repo}',
      ssh_options: ['StrictHostKeyChecking=no', 'PasswordAuthentication=no', 'ForwardAgent=yes'],
      path: '{install path}',
      'pre-setup' : 'scripts/pre-setup.sh',
      'post-deploy': 'npm i --production;pm2 startOrReload ecosystem.config.js production',
      env: {
        COMMON_VARIABLE: 'true',
        NODE_ENV: 'production'
      }
    }
  }
}

pre-setup

  • 최초 필요한 패키지 설치등 필요한 명령어를 실행할 수 있다.
  • 서버가 늘어날 경우 설치가 손쉽다.
#!/usr/bin/env bash

#update instance
sudo yum -y update

# add nodejs to yum
curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs npm git 

# install pm2 module globally
sudo npm install -g pm2
pm2 update

ssh -o StrictHostKeyChecking=no git@github.com

package.json

  • git push 후 실행할 명령어 지정
  • setup-dev: 개발서버 설치
  • setup-production: 프로덕션서버 설치
  • deploy-dev: 개발서버 배포
  • deploy-production: 프로덕션서버 배포
{
  "name": "backend",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "local": "NODE_ENV=local nodemon --exec node ./backend/bin/www",
    "start": "node ./bin/www",
    "setup-dev": "pm2 deploy ecosystem.config.js development setup",
    "setup-production": "pm2 deploy ecosystem.config.js production setup",
    "deploy-dev": "pm2 deploy ecosystem.config.js development",
    "deploy-production": "pm2 deploy ecosystem.config.js production"
  },
  "dependencies": {
    "express": "^4.16.3"
  },
  "devDependencies": {
    "nodemon": "^1.18.3"
  }
}

정리

git으로 관리한다는 점이 있긴 하지만 프로젝트 안에서 스크립트를 수정할 수 있고, git deploy key 없이도 배포할 수 있다는 점이 장점이다.

Tags : pm2 

comments powered by Disqus