Linux
PM2로 Node.js 애플리케이션 관리하기
코샵
2025. 2. 18. 10:41
반응형
PM2는 Node.js 애플리케이션을 위한 강력한 프로덕션 프로세스 관리자입니다. 자동 실행, 로그 관리, 모니터링 등 다양한 기능을 제공합니다.
PM2 설치 및 기본 명령어
# 전역 설치
npm install -g pm2
# 기본 실행
pm2 start app.js
# 모든 프로세스 확인
pm2 list
# 특정 프로세스 중지
pm2 stop app_name
# 모든 프로세스 중지
pm2 stop all
프로세스 구성 설정
// ecosystem.config.js
module.exports = {
apps: [{
name: "api-server",
script: "./src/index.js",
instances: "max",
exec_mode: "cluster",
watch: true,
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}]
}
클러스터 모드 사용
# CPU 코어 수만큼 인스턴스 생성
pm2 start app.js -i max
# 특정 수의 인스턴스 생성
pm2 start app.js -i 4
# 클러스터 모드로 실행
pm2 start ecosystem.config.js --env production
로그 관리
# 실시간 로그 확인
pm2 logs
# 특정 앱의 로그만 확인
pm2 logs api-server
# 저장된 로그 확인
pm2 logs --lines 200
# 로그 파일 위치
~/.pm2/logs/
모니터링 및 관리
# 대시보드 실행
pm2 monit
# 상태 확인
pm2 status
# 메모리/CPU 사용량 확인
pm2 prettylist
# 프로세스 재시작
pm2 restart app_name
# 프로세스 리로드 (무중단)
pm2 reload app_name
자동 시작 설정
# 시작 스크립트 생성
pm2 startup
# 현재 실행 중인 프로세스 저장
pm2 save
# 저장된 프로세스 복원
pm2 resurrect
고급 설정 예시
module.exports = {
apps: [{
name: 'api-server',
script: './src/index.js',
instances: 'max',
exec_mode: 'cluster',
watch: true,
ignore_watch: ['node_modules', 'logs'],
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 80
},
error_file: './logs/err.log',
out_file: './logs/out.log',
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm:ss',
autorestart: true,
max_restarts: 10,
restart_delay: 4000
}]
}
배포 자동화
# ecosystem.config.js에 배포 설정 추가
module.exports = {
apps: [...],
deploy: {
production: {
user: 'ssh-username',
host: 'server-ip',
ref: 'origin/master',
repo: 'git@github.com:repo.git',
path: '/var/www/production',
'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
}
# 배포 실행
pm2 deploy production
모니터링 및 알림 설정
module.exports = {
apps: [{
name: 'api-server',
// ... 기본 설정 ...
// 모니터링 설정
watch: true,
max_memory_restart: '1G',
// 메트릭 수집
merge_logs: true,
log_type: 'json',
// 알림 설정
exp_backoff_restart_delay: 100,
max_restarts: 10,
// 상태 체크
health_check: {
url: 'http://localhost:3000/health'
}
}]
}
PM2를 사용할 때 주의할 핵심 포인트:
- 메모리 관리
- max_memory_restart 설정으로 메모리 누수 방지
- 정기적인 로그 로테이션
- 로그 관리
- 적절한 로그 레벨 설정
- 로그 파일 위치 지정
- 로그 포맷 지정
- 클러스터 모드
- CPU 코어 수에 맞는 인스턴스 수 설정
- 로드 밸런싱 전략 선택
- 보안
- 적절한 권한 설정
- 환경 변수 관리
- 에러 처리
이러한 설정들을 통해 Node.js 애플리케이션을 안정적으로 운영할 수 있습니다.