본문 바로가기

Nodejs

Nodejs PM2 배포 - ecosystem.config.js (babel 적용)

반응형

운영 환경 배포를 위한 PM2 설치

npm install -g pm2

(pm2 는 global로 설치하는게 편하다..)

 

기본적으로 pm2 를 이용해 인스턴스를 구동하는 방법은 간단하다.

pm2 start server.js

옵션은 공식 pm2 사이트에서 확인. (https://pm2.keymetrics.io/docs/usage/quick-start/)

 

PM2 - Quick Start

Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro service management, at a glance.

pm2.keymetrics.io

정상적으로 인스턴스가 실행되면,

위와 같이 확인이 된다.

 

 

인스턴스에 대한 설정을 담아놓고 실행시키는것도 가능하다.

일단 ecosystem.config.js 파일을 작성한다.

module.exports = {
    apps: [
        {
            name: 'nodejs-sequelize-pm2', // pm2 name
            script: './server.js', // // 앱 실행 스크립트
            instances: 3, // 클러스터 모드 사용 시 생성할 인스턴스 수
            exec_mode: 'cluster', // 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 ecosystem.config.js 로 구동하면 해당 설정이 반영된 인스턴스가 시작되는것을 확인할 수 있다.

확인을 위해 인스턴스를 3으로 설정했다.

정상적으로 실행된 것을 확인할 수 있다.

 

마지막으로 개발환경에서 사용했던 babel-node 처럼 pm2를 구동하려고 한다.

 

이를 위해 필요한 패키지를 설치하고 스크립트를 작성한다.

npm i -D @babel/register
// server-register.js

require('@babel/register');
require('./server');

이 후 ecosystem의 실행스크립트를 server-register.js 로 바꿔준다.

module.exports = {
    apps: [
        {
            name: 'nodejs-sequelize-pm2', // pm2 name
            script: './server-register.js', // // 앱 실행 스크립트
            instances: 3, // 클러스터 모드 사용 시 생성할 인스턴스 수
            exec_mode: 'cluster', // 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 로 해당 인스턴스를 구동하면 es6 이상의 스펙에서도 Nodejs가 이상없이 돌아가는 것을 확인할 수 있다.

 

참고소스

https://github.com/sbjang123456/nodejs-sequelize-pm2.git

 

sbjang123456/nodejs-sequelize-pm2

pm2 배포 환경 설정. Contribute to sbjang123456/nodejs-sequelize-pm2 development by creating an account on GitHub.

github.com

 

반응형