반응형
개요
PM2의 역할과 사용법을 간단하게 알아보자.
- 목차
- PM2란?
- pm2 설치
- pm2 명령어
PM2란?
공식 홈페이지에 나온 설명을 보면
PM2 is a daemon process manager that will help you manage and keep your application online. 요약하면 PM2는 어플리케이션의 관리와 온라인상태를 유지하도록 돕는 역할을 하는 데몬 프로세스 관리자 라고 한다.
PM2 장점
- 어플리케이션의 예상치 못한 종료시 자동 재시작
- 배포시에도 무중단 서비스
- 클러스터 모드
- 모니터링
PM2 설치
$ npm install pm2@latest -g
또는
$ yarn global add pm2
위 명령어로 최신버젼을 설치할 수 있다.
PM2 명령어
이 명령어로 간단한 pm2의 사용예를 볼 수 있다.
pm2 examples
서버 시작
app.js 라는 소스가 있다는 가정하에
$ pm2 start app.js
이 명령어 한 줄로 쉽게 서버를 데몬화 하고 모니터링 할 수 있다.
프로세스 관리
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name
app_name 대신에 all 이나 id 를 사용할 수 있다.
- all : 모든 프로세스를 실행한다.
- id : 특정 프로세스 id만 실행한다.
목록 보기
$ pm2 [list|ls|status]
로그 보기
$ pm2 logs // 기본 15줄의 로그가 보인다.
$ pm2 logs --lines 200 // 여러줄을 보고 싶을 경우 --lines 옵션을 사용한다.
실시간 로그도 간단한 명령어 하나로 확인 가능하다.
모니터링
$ pm2 monit
이 명령어로 대쉬보드 형태로 모니터링도 가능하다.
클러스터 모드
pm2를 클러스터 모드로 실행하지 않으면 fork 모드로 실행이 되는데 fork모드는 싱글스레드로만 동작한다.
pm2의 장점인 멀티 스레드를 활용하기 위해 클러스터 모드로 실행해보자.
- 클러스터 옵션
--watch : PM2가 어플리케이션 변경사항을 자동으로 감지하여 서버를 재시작함 -i (코어수) : 클러스터 모드로 실행할 시 사용할 코어수. max 로 적을시 cpu 코어 수 만큼 할당됨 --name : 어플리케이션 이름 --log (경로) : 로그 파일 경로 -- arg1 arg2 arg3 : 스크립트에 전달 될 파라미터 --restart-delay (딜레이 시간) : 재시작시 딜레이 시간 지정 (ms) --no-autorestart : 재시작 불가능하도록 설정함
클러스터를 더욱 편하게 관리하기 위해 전용 설정파일을 이용할 수도 있다.
$ pm2 ecosystem
File C:\ecosystem.config.js generated
위 명령어는 자동으로 ecosystem.config.js 파일을 생성한다.
이 파일에서 클러스터 옵션들을 설정하여 사용할 수 있다.
// ecosystem.config.js 설정 예
module.exports = {
apps : [{
name : "app1",
script : "./app.js",
env_production: {
NODE_ENV: "production"
},
env_development: {
NODE_ENV: "development"
}
}]
}
ecosystem.config.js 을 실행하는 것으로 해당 옵션이 실행된다.
하단에는 간단히 적은 옵션들.
- General
- name : “my_app” // 어플리케이션 명칭
- script : “./api/app.js” \/\/ pm2 시작 스크립트 경로
- cwd : “/var/www/” // 앱이 실행될 디렉토리
- args : “-a 13 -b 12” // CLI에서 실행하는 모든 아규먼트
- interpreter : “/usr/bin/python” // 인터프리터 경로 (기본값은 node)
- interpreter_args : “–harmony” // 인터프리터 파라미터 옵션
- node_args : // interpreter_args 의 별칭
- Advanced features
- instances : 0 // 인스턴스 수. 0이면 CPU 코어수만큼.
- exec_mode : “cluster” // cluster 또는 fork 모드 선택. 기본은 fork 모드
- watch : true // 폴더 혹은 하위 폴더를 감시하여 변경시 어플리케이션 reload
- ignore_watch : [”[\/\]./”, “node_modules”] // watch 제외경로
- max_memory_restart : “150M” // 설정한 메모리를 초과하면 자동으로 어플리케이션 재시작
- source_map_support : true // 소스 맵 파일의 활성화/비활성화 설정. 기본값은 true
- Log files
- log_date_format : “YYYY-MM-DD HH:mm Z” // 로그 날짜 포멧
- error_file : // 에러로그 파일 경로 (기본 경로는 $HOME/.pm2/logs/-error-.log)
- out_file : // 로그 파일 출력 경로 (기본 경로는 $HOME/.pm2/logs/-out-.log)
- log_file : // error_file, out_file 두 파일의 경로. 기본은 비활성화
- pid_file : // pid 파일경로 (기본 경로는 $HOME/.pm2/pids/-.pid)
- Control flow
- min_uptime : // 어플리케이션이 시작되었다고 생각하는 최소 시간
- listen_timeout : 8000 // 강제 reload가 일어나기 전 대기시간(ms)
- kill_timeout : 1600 // 최종 SIGKILL 을 보내기 전 대기시간(ms)
- shutdown_with_message : false // 어플리케이션 종료 수행 시 process.kill(pid, SIGINT) 명령어 대신 process.send(‘shutdown’)로 수행
- wait_ready : false // Reload 대기 이벤트 대신 어플리케이션의 process.send(‘ready’) 를 기다린다
- Deployment
- key : SSH key path. Default $HOME/.ssh
- user : SSH user
- host : SSH host
- ssh_options : SSH options with no command-line flag, see ‘man ssh’
- ref : GIT remote/branch
- repo : GIT remote
- path : path in the server
- pre-setup : Pre-setup command or path to a script on your local machine
- post-setup : Post-setup commands or path to a script on the host machine
- pre-deploy-local : pre-deploy action
- post-deploy : post-deploy action
반응형