새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


모던웹(NEMV) 혼자 제작 하기 3기 - 35 pm2로 실제 서버에 배포하기

2 분 소요

개발피씨에서 pm2는 사실 켜둘 필요가 없습니다.

서버에 문제가 생기면 디버그를 해야지 재시작하는 것이 바람직하지는 않겠죠?

그런데도 pm2를 개발피씨에서 설치한 이유는 바로 배포 때문입니다.

package.json에 환경 추가하기

실제 서버에서 사용하기 위해 pm2 라는 것을 하나 더 만들어봤습니다.

package.json

{
  "name": "nemv",
  "version": "0.0.1",
  "scripts": {
    "dev": "NODE_ENV=development node ./be/bin/www",
    "serve": "cd fe && yarn serve",
    "pr": "cd fe && yarn && yarn build && cd ../be && yarn && NODE_ENV=production PORT=80 node ./bin/www",
    "pm2": "cd fe && yarn && yarn build && cd ../be && yarn && cd .. && pm2 start --env pr"
  },
  "dependencies": {}
}
$ yarn pm2

이제 종속요소들 전부 설치하고 pm2로 시작할 수 있게되었습니다.

서버에 적용하기

중요: 2018.10.23 연결 변경

이제 토스트에서 새로운 인스턴스 생성시 루트로 접근을 못하게 막아놓았습니다..

$ ssh -i nemvKey.pem centos@x.x.x.x
$ sudo -i

centos라는 일반 유저로 접속한 후에 sudo -i 루트로 다시 접근해야합니다..

pm2 서버에 설치하기

서버에도 pm2를 설치합니다.

# $ yarn global add pm2  
$ npm i pm2 -g
$ pm2 -v
3.0.4

2018.10.23 이후..
전역 설치는 npm으로 하겠습니다. yarn으로 설치하니 패스를 잡아줘야하는 번거로움이 있네요..

서버코드 최신화 후 실행

$ git pull
$ yarn pm2

배포하기

배포의 원리는 이렇습니다.

  • 서버에서 pm2로 돌아가는 중
  • 개발피씨에서 pm2 deploy라는 명령을 함
  • 서버에 ssh로 연결
  • 연결 후 git pull로 코드 최신화
  • 코드 최신화 끝난 후 각종 패키지 설치 후, 재 실행

ecosystem.config.js

  deploy : {
    pr : {
      user : 'root',
      host : 'x.x.x.x',
      key: 'nemvKey.pem',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/nemv3',
      'post-deploy' : 'yarn pm2'
    }
  }

pm2 설정파일을 수정하고 나서

$ pm2 deploy pr

하면 끝이납니다.

pm2 배포 취소 이유

pm2를 배포(deploy)말고 다른 방법을 추후에 알려드리겠습니다.

취소하는 이유는 2가지 입니다.

첫번째 이유는 토스트에서 root로 접속을 못하게 했기 때문입니다.

기본 유저인 centos로 해보려 했는데 여러가지를 주물럭 거려야 됩니다..

포트 80문제부터 시작해서 권한 상승 및 여러가지 세팅을 해줘야됩니다.

해보니 리눅스를 너무 많이 파야되서 취지에 어긋나는 것 같습니다.

아마도 기억은 안나지만 aws나 gcp도 root접속 안되는 것은 마찬가지 일 것 같습니다.

두번째 이유는 어짜피 pm2 배포는 안 쓸 것입니다..

왜냐하면 나중에 오토스케일(auto-scale) 구성을 사용할 것인데 간략히 설명 드리면..

서버가 힘들어지면(cpu점유율이 몇분동안 30%이상 같은) 자동으로 복제 서버를 만드는 구조 입니다.

그런데 복제된 서버는 공인 IP가 없습니다. 만들 수는 있지만 의미가 없죠..

pm2 배포는 타겟 공인 IP가 있다는 가정에서 사용되는 것이라..

오토스케일링 되고 있는 서버 여러대를 한꺼번에 업데이트하려면 다른 솔루션이 필요합니다.

다음 강좌에서 진행할 오토스케일로 서버를 두게 되면 이제 정말 서버는 잊고 살아도 되는 것이죠~

오토스케일 배포 솔루션을 다음 강좌에 진행해보겠습니다~

그래도 싱글서버 배포는 정말 편리한 솔루션이라 소개시켜드린 것인데 안타깝네요~

pm2 시작프로그램 등록

$ pm2 startup
$ pm2 save

pm2 status 로 현재 동작하고 있는 앱들을 pm2 save 로 기억 해두 면

서버가 재시작할때 기억해둔 앱들을 다시 살려놓습니다.

pm2 log 관련

pm2를 켜두면 로그가 무자막지하게 쌓이고 결국 리눅스가 사망합니다.

$ pm2 install pm2-logrotate
$ pm2 set pm2-logrotate:retain 7

pm2 내장 모듈인 pm2-logrotate를 설치하면 한덩어리 파일을 날짜별로 쪼개줍니다.

그리고 retain 7로 하면 7일치만 보관하게 됩니다.

마치며

여기까지 왔다면, 이제 서버는 잊고 살아도 됩니다.

매번 서버에 접속해서 명령어를 날리고 재시작해줄 필요가 없기 때문입니다.

개발피씨에서 열심히 작업하다가 이때다 싶으면 pm2 deploy 로 보내면 끝입니다.

영상

댓글남기기