728x90
pm2를 이용해서
앱서버를 백그라운드 환경으로 운영이 가능하다.
여기서 한발 더 나아가
cluster mode로 실행중인 node.js서버를
pm2를 이용해 돌리곤 했었다.
하지만 배포할때마다 일시적으로 중단되어버리는 서버.
원인은 restart로 배포하기때문.
reload 명령어를 통해
kill -> restart
reset 형식으로 서버 중단없이
무중단 배포가 가능하다.
pm2 reload index.js
근데 이를 제대로 활용하려면
몇가지 설정이 필요하다
pm2 ecosystem
위 명령어로 ecosystem.config.js 파일을 얻을수 있다.
다양한 설정들이 기본으로 세팅되어있는데
docs를 보면서 입맛에 맞게 설정하면 된다.
진짜 간단히는
module.exports = {
apps: [
{
name: 'server',
script: './index.js',
watch: '.',
instances: -1, // 클러스터 모드
// exec_mode: 'cluster', <-- 이것도 클러스터 모드
},
],
};
이렇게만 설정해도 된다
package.json을 수정하면
npm 명령어로 서버에서
간편히 실행 혹은 reload 하는것도 가능하다.
scripts: {
"start": "pm2 start ./ecosystem.config.js --only server",
"reload": "pm2 reload server"
}
고객에게 불편을 주지말자
여기서 더 나아간다면
실행중인 process가 덮어씌워지는 경우를
방지하고
reload할 수 있다.
// server.js
const app = express();
let disableKeepAlive = false;
// 중단이 감지되면 Keep 상태인 요청 닫음
app.use((req, res, next) => {
if (disableKeepAlive) {
res.set('Connection', 'close');
}
next();
});
const service = app.listen(process.env.PORT, () => {
console.log(`The application is listening on port ${process.env.PORT}`);
if (process.send) {
console.log('send')
process.send('ready');
}
});
process.on('SIGINT', async () => {
disableKeepAlive = true;
service.close();
process.exit(0);
});
이런식으로 구성해주면 된다.
728x90
반응형
'개발, 코딩 > Node' 카테고리의 다른 글
multer-s3, sharp. 이미지 압축해 업로드 해보자 (0) | 2022.05.06 |
---|---|
server.js 스크립트 클래스로 구조화 하기 (0) | 2021.12.17 |
파일정리 라이브러리 공유 (0) | 2021.09.06 |
[Node js] 서버로부터 buffer 형식으로 파일 전송받아 처리하기 (0) | 2021.07.28 |
node.js - canvas (0) | 2021.03.31 |