PM2
뜬금없이 pm2에 대한 포스팅을 하는 이유는 이제 서버에서 호스팅을 시작하기 때문이다. pm2는 process manager 의 약자로 nodeJS를 이용해 서버를 돌리는 사람에게 많은 도움을 준다고 생각하면 된다.
대표적인 기능
- 앱에서 충돌이 발생할 경우 앱을 자동으로 다시 시작
- 런타임 시 서버가 자원을 얼마나 먹는지에 대해서 알 수 있음
- 클러스터링으로 성능 향상
1번기능이 아주 매력적이라고 생각이든다. 서버가 살아있는지 죽었는지 매시간 매분 매초마다 확인할 수 없기 때문에 아주 유용한 것 같다.
pm2 설치
이제 저도 맥으로 바꿔서 맥용으로 작성하도록 하겠다.
윈도우는 앞 $
명령어만 제거하시면 될 것 같다.
$npm install pm2 -g
호스팅하는 시점이니 npm
은 당연히 설치가 되있을 거라고 본다.
설치가 완료되었으면 버전을 확인해보자
$pm2 -v
-------------
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
_\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
_\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
_\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
_\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
_\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
_\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
_\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
_\///______________\///______________\///__\///////////////__
Production Process Manager for Node.js apps
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
http://pm2.io
-------------
[PM2] Spawning PM2 daemon with pm2_home=/Users/rock/.pm2
[PM2] PM2 Successfully daemonized
이렇게 뜨면 잘 설치가 된 것이다.
일단 저같은 경우에는 Frontend개발을 하므로 nodeJS 애플리케이션의 실행파일인 app.js가 없다.
app.js가 있는경우 해당 파일이 있는 경로에서
$ pm2 start app.js
위 명령어를 치면 해당하는 서버가 구동이 된다.
Jaerockui-MacBook-Pro:~ rock$ pm2 start app.js
[PM2][ERROR] script not found : /Users/rock/app.js
script not found : /Users/rock/app.js
┌──────┬──────┬────────┬───┬─────┬────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
└──────┴──────┴────────┴───┴─────┴────────┘
Use `pm2 show <id|name>` to get more details about an app
실제로 있는 경우에는 저기 표에해당하는 Name에 app이름이 뜨고 등등등이 뜬다
___
pm2 명령어
프론트개발자라도 자주 쓸 듯하다.
- pm2 list : 현재 서버에서 실행되고 있는 프로세스 목록을 보고 싶을 때 사용.
- pm2 stop 'app name' : 현재 서버에서 실행되고 있는 프로세스 중지.
- pm2 delete 'app name' : 현재 서버에서 실행되고 있는 프로세스 삭제.
- pm2 log : 마지막 로그내용과 함께 이후 출력되는 로그 내용을 화면에 뿌려주게 된다.
- pm2 flush : 모든 로그 삭제
최근에 실수한 것 이 stop은 말 그대로 배포를 중지하는 것 일 뿐이다. 즉 프로세스가 아직 cpu에 올라가 있다고 생각하면된다.
delete 같은 경우는 아예 삭제하는 것이기 때문에 pm2 list를 쳐보면 프로세스가 없어짐을 알 수 있다.
pm2 stop
>> pm2 start
와 pm2 delete
>> pm2 start
의 차이를 명확히 알 필요가 있다.
그리고 만약에 서버에서 git pull
만 받아도 바로 변경사항이 적용된다면 구지 pm2 start
를 할 필요가 없다.
이정도만 알면 아직까지는 배포하는데 크게 문제가 없을 듯 하다.
더 필요한 것이 생기면 계속 추가하도록 해야겠다.