PM2로 Node.js 애플리케이션 관리하기

2025. 2. 18. 10:41·Linux
반응형

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를 사용할 때 주의할 핵심 포인트:

  1. 메모리 관리
    • max_memory_restart 설정으로 메모리 누수 방지
    • 정기적인 로그 로테이션
  2. 로그 관리
    • 적절한 로그 레벨 설정
    • 로그 파일 위치 지정
    • 로그 포맷 지정
  3. 클러스터 모드
    • CPU 코어 수에 맞는 인스턴스 수 설정
    • 로드 밸런싱 전략 선택
  4. 보안
    • 적절한 권한 설정
    • 환경 변수 관리
    • 에러 처리

이러한 설정들을 통해 Node.js 애플리케이션을 안정적으로 운영할 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'Linux' 카테고리의 다른 글

리눅스에서 3시간마다 인터넷 속도 자동 측정 시스템 구축하기  (0) 2025.03.20
nohup : 백그라운드 프로세스 실행  (1) 2025.02.03
Sudoers : 권한 관리  (2) 2025.02.02
'Linux' 카테고리의 다른 글
  • 리눅스에서 3시간마다 인터넷 속도 자동 측정 시스템 구축하기
  • nohup : 백그라운드 프로세스 실행
  • Sudoers : 권한 관리
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    list
    programming101
    리스트
    카페24리뷰
    스크립트 실행 순서
    스마트스토어리뷰
    cv2
    devlife
    긴유통기한우유
    파이썬
    리뷰이관
    C#
    스크립트 실행
    쇼핑몰리뷰
    ipcamera
    유니티
    리뷰관리
    카페24리뷰이관
    appdevelopment
    Python
    codingcommunity
    상품 리뷰 크롤링
    라떼우유
    codingtips
    rtsp
    셀레니움
    unity
    programmerlife
    learntocode
    믈레코비타멸균우유
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
PM2로 Node.js 애플리케이션 관리하기
상단으로

티스토리툴바