SHIN
Node.js 실전 팁 20선
20편PM2는 Node.js 앱을 프로덕션에서 안정적으로 운영하기 위한 프로세스 매니저입니다.
npm install -g pm2
pm2 start app.js # 앱 시작
pm2 start app.js --name myapp # 이름 지정
pm2 list # 실행 중인 프로세스 목록
pm2 stop myapp # 중지
pm2 restart myapp # 재시작
pm2 delete myapp # 삭제
pm2 logs myapp # 로그 보기
pm2 monit # 실시간 모니터링module.exports = {
apps: [
{
name: 'api-server',
script: './dist/server.js',
instances: 'max', // CPU 코어 수만큼
exec_mode: 'cluster', // 클러스터 모드
watch: false,
max_memory_restart: '500M',
env: {
NODE_ENV: 'development',
PORT: 3000,
},
env_production: {
NODE_ENV: 'production',
PORT: 80,
},
log_date_format: 'YYYY-MM-DD HH:mm:ss',
error_file: './logs/error.log',
out_file: './logs/out.log',
merge_logs: true,
},
],
};pm2 start ecosystem.config.js --env productionpm2 startup # 자동 시작 설정 명령어 출력
# 출력된 명령어 실행 (sudo 포함)
pm2 save # 현재 프로세스 목록 저장pm2 reload myapp # 클러스터 모드: 한 번에 하나씩 재시작// 앱에서 SIGINT 처리
process.on('SIGINT', () => {
server.close(() => {
console.log('서버 정상 종료');
process.exit(0);
});
});pm2 install pm2-logrotate # 로그 로테이션 플러그인
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30 # 30일 보관
pm2 set pm2-logrotate:compress truepm2 start ecosystem.config.js --env production
pm2 start ecosystem.config.js --env developmentFROM node:20-alpine
RUN npm install -g pm2
WORKDIR /app
COPY package*.json .
RUN npm ci --production
COPY . .
CMD ["pm2-runtime", "ecosystem.config.js", "--env", "production"]pm2-runtime은 Docker 환경에서 컨테이너가 포그라운드를 유지하도록 설계된 버전입니다.