PM2는 Node.js 애플리케이션을 관리하고 배포하는 데 널리 사용되는 강력한 도구입니다. 이 가이드에서는 PM2를 사용하여 Node.js 프로젝트를 배포하는 과정을 단계별로 자세하게 설명합니다.
1. 사전 준비
1.1. Node.js 및 PM2 설치
- Node.js가 설치되어 있는지 확인합니다. 설치되어 있지 않다면 공식 사이트에서 최신 버전을 설치합니다.
- PM2를 설치합니다.
npm install -g pm2
1.2. 프로젝트 폴더 구성
- 프로젝트 폴더 구조를 정리합니다. 일반적으로 다음과 같은 구조를 사용합니다.
project/
├── app.js (실행 파일)
├── package.json (프로젝트 정보)
└── node_modules (모듈 폴더)
1.3. 환경 설정
- 프로젝트 환경 변수를 설정합니다. 환경 변수는 .env 파일이나 package.json 파일의 env 속성에 정의할 수 있습니다.
1.4. 배포 스크립트 작성
- 프로젝트를 배포하는 데 필요한 작업을 자동화하는 배포 스크립트를 작성합니다. 예를 들어, 다음과 같은 스크립트를 작성할 수 있습니다.
#!/bin/bash
# 프로젝트 빌드
npm run build
# PM2를 사용하여 프로젝트 시작
pm2 start app.js --name my-app
# 로그 확인
pm2 logs my-app
2. 서버 준비
2.1. 서버 환경 구축
- 배포할 서버에 Node.js 및 PM2를 설치합니다.
- 서버에 필요한 라이브러리 및 모듈을 설치합니다.
2.2. 서버 보안 설정
- 서버에 방화벽을 설정하여 공격으로부터 보호합니다.
- SSH 키를 사용하여 서버에 안전하게 연결합니다.
3. 배포
3.1. 프로젝트 빌드
- 배포 스크립트를 실행하여 프로젝트를 빌드합니다.
3.2. 프로젝트 업로드
- 빌드된 프로젝트 파일을 서버에 업로드합니다.
- 서버에 업로드된 파일의 권한을 설정합니다.
3.3. PM2 설정
- PM2 설정 파일을 생성하고 프로젝트 정보를 설정합니다.
- PM2 설정 파일에서 다음과 같은 옵션을 설정할 수 있습니다.
- name: 프로세스 이름
- script: 실행 파일 경로
- instances: 실행할 프로세스 개수
- max_memory_restart: 메모리 사용량 초과 시 재시작
- env: 환경 변수
3.4. 프로젝트 실행
- PM2를 사용하여 프로젝트를 실행합니다.
pm2 start app.js --name my-app
4. 배포 후 작업
4.1. 로그 확인
- PM2 로그를 확인하여 프로젝트가 정상적으로 실행되었는지 확인합니다.
4.2. 자동 재시작 설정
- 프로세스가 오류로 종료되면 자동으로 재시작하도록 설정합니다.
4.3. 모니터링
- PM2를 사용하여 프로젝트의 CPU 사용량, 메모리 사용량 등을 모니터링합니다.
5. 추가 정보
- PM2 공식 문서: [유효하지 않은 URL 삭제됨]
- PM2 GitHub 저장소: https://github.com/Unitech/pm2
6. 미친 디테일 팁
- 배포 스크립트에 다양한 옵션을 추가하여 배포 과정을 자동화합니다.
- PM2 ecosystem 파일을 사용하여 여러 프로젝트를 관리합니다.
- Nginx와 같은 웹 서버를 사용하여 프로젝트를 프록시합니다.
- Let's Encrypt와 같은 SSL 인증서를 사용하여 서버를 보안합니다.
* 해당 게시글은 gemini를 참고하여 작성된 게시글임을 알립니다.
'Coding > 내일배움캠프' 카테고리의 다른 글
[내일배움캠프] Node.js 4기 TIL | Day 52 | 24.02.23.(금) (0) | 2024.02.24 |
---|---|
[내일배움캠프] Node.js 4기 TIL | Day 51 | 24.02.22.(목) (0) | 2024.02.22 |
[내일배움캠프] Node.js 심화주차 - Node.js 4기 TIL | Day 49 | 24.02.20.(화) (0) | 2024.02.21 |
[내일배움캠프] 5.1 객체 지향 프로그래밍 (OOP) - Node.js 4기 TIL | Day 48 | 24.02.19.(월) (0) | 2024.02.19 |
[내일배움캠프] Node.js 4기 TIL | Day 47 | 24.02.18.(일) (0) | 2024.02.18 |