배포할 소스를 Git에 Commit 후 Ubuntu에 설치된 git으로 소스를 내려 받는다
최초 소스를 clone 한다 git clone https://github.com/******/*****.git
package.json 패키지를 설치하기 위해 명령어 위치는 package.json이 있는 폴더에서 실행 npm install
2) Pm2으로 서비스 등록
npm run 명령어로 실행 할 경우 터미널을 닫으면 실행이 중단되기때문에 pm2로 서비스 등록하여 데몬화 하여 사용 한다.
pm2 설치 npm install -g pm2
pm2 버전 pm2 --version 소스js 폴더로 이동 pm2 start index.js
3) 재배포
git root 폴더에서 소스를 내려 받는다. git pull
추가된 package가 있을경우 1) 번의 경우처럼 npm install
pm2 리로드 pm2 reload index
4) watch
git으로 소스를 내려 받던가 직접 수정될경우 pm2 reload 하지 않아도 자동으로 반영 된다 pm2 reload index --watch
5) Cluster mode
node.js는 싱글 스레드이며 client요청이 call stack에 쌓여 queue로 처리하는 방식이다.
멀티코어 시스템에서도 단일 스레드만 사용하여 자원 활용 못하는 경우가 발생하는데 이럴경우 Cluster mode 를 사용하면 모든 코어를 활용 할수 있다.
Cluster mode는 Cluster module을 통해 작동 되고 요청을 Parent process가 받아 Child process에 재분배 된다. Port는 서로 공유가 되고. child process는 각각의 V8에서 작동되어 Node 인스턴스를 각각 실행 하는 것과 같다.
#Cluster mode
#끝에 max는 코어 갯수만큼 생성되고 숫자를 입력하면 그입력수만큼 생성된다
pm2 start index.js -i max
6) config.js
위의 명령을 각각 실행하지 말고 config.js 파일을 만들어 실행하면 더쉽고 간편하게 실행 할 수 있다. test.config.js 파일을 아래 설정으로 작성후 pm2 start test.config.js로 실행 하면된다.
module.exports = {
apps: [
{
name: 'index_test', // pm2 name
script: './src/index.js', // // 앱 실행 스크립트
instances: 2, // 클러스터 모드 사용 시 생성할 인스턴스 수
exec_mode: 'cluster', // fork, cluster 모드 중 선택
merge_logs: true, // 클러스터 모드 사용 시 각 클러스터에서 생성되는 로그를 한 파일로 합쳐준다.
autorestart: true, // 프로세스 실패 시 자동으로 재시작할지 선택
watch: true, // 파일이 변경되었을 때 재시작 할지 선택
// max_memory_restart: "512M", // 프로그램의 메모리 크기가 일정 크기 이상이 되면 재시작한다.
env: {
// 개발 환경설정
NODE_ENV: 'development',
},
env_production: {
// 운영 환경설정 (--env production 옵션으로 지정할 수 있다.)
NODE_ENV: 'production',
}
},
{
name: 'index_test2', // pm2 name
script: './src/index2.js', // // 앱 실행 스크립트
instances: 1, // 클러스터 모드 사용 시 생성할 인스턴스 수
exec_mode: 'fork', // fork, cluster 모드 중 선택
merge_logs: true, // 클러스터 모드 사용 시 각 클러스터에서 생성되는 로그를 한 파일로 합쳐준다.
autorestart: true, // 프로세스 실패 시 자동으로 재시작할지 선택
watch: false, // 파일이 변경되었을 때 재시작 할지 선택
// max_memory_restart: "512M", // 프로그램의 메모리 크기가 일정 크기 이상이 되면 재시작한다.
env: {
// 개발 환경설정
NODE_ENV: 'development',
},
env_production: {
// 운영 환경설정 (--env production 옵션으로 지정할 수 있다.)
NODE_ENV: 'production',
}
}
]
};
pm2 start test.config.js
환경 변수 제어 작업을 하면서 개발환경과 배포환경을 두어서 편리하게 개발을 하기위해 pm2에서 NODE_ENV를 제어할수 있다