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' 카테고리의 다른 글

리눅스 터미널 WiFi 연결 완벽 정복: nmcli & nmtui 사용법  (0) 2025.10.20
리눅스에서 3시간마다 인터넷 속도 자동 측정 시스템 구축하기  (0) 2025.03.20
nohup : 백그라운드 프로세스 실행  (1) 2025.02.03
Sudoers : 권한 관리  (2) 2025.02.02
'Linux' 카테고리의 다른 글
  • 리눅스 터미널 WiFi 연결 완벽 정복: nmcli & nmtui 사용법
  • 리눅스에서 3시간마다 인터넷 속도 자동 측정 시스템 구축하기
  • nohup : 백그라운드 프로세스 실행
  • Sudoers : 권한 관리
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • 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 (5)
      • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바