NestJS AWS Ubuntu 무중단 배포

denver·2023년 1월 16일
1

AWS EC2 인스턴스 생성 관련은 생략!!
대략, Ubuntu 20.xx 버전 만들어주면 된다.

패키지 관련 업데이트

$ sudo apt-get update

# Node.js version manager(nvm)
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash

nvm 관련 명령어

# nvm 활성화
. ~/.nvm/nvm.sh

# 현재 설치된 vnm 버전 확인 
$ nvm -v

# 사용가능한 node 버전 확인
$ nvm list available

# 설치된 모든 node 버전 확인
$ nvm list

# 특정 node 버전 설치
$ nvm install 17.0.1

# 다른 node 버전으로 변경
$ nvm alias default [xx.xx.xx] // 해당 버전 입력

# 현재 설정된 node 버전 확인
$ node -v

# pm2 전역 설치
$ npm install -g pm2

Nginx 프록시 설정 관련

$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/<프로젝트 이름>
server {
    listen 80;
    server_name <IP주소>; // ex) api.walkdoni.com;

    location / {
        include proxy_params;
        proxy_pass http://<IP주소>:3000;

    }
}
$ sudo ln -s /etc/nginx/sites-available/<프로젝트 이름> /etc/nginx/sites-enabled
$ sudo nginx -t // nginx 설정 확인
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(위와 같이 나와야 성공)
$ sudo systemctl restart nginx
$ sudo systemctl status nginx.service // nginx 상태 확인

Nginx Log 관련

$ sudo vi /var/log/nginx/access.log
$ sudo vi /var/log/nginx/error.log

Nginx Conf 설정 파일 관련

$ sudo vi /etc/nginx/nginx.conf
* nginx 관련 고유 속성 값들을 컨트롤 하는 부분

NestJS 배포 환경설정 파일

관련 프로젝트 루트 디렉토리에 생성하면 된다.
$ sudo vi ecosystem.config.js
module.exports = {
    apps: [
        {
            name: 'main', // pm2 name
            script: 'dist/main.js', // // 앱 실행 스크립트
            instances: 'max', // 클러스터 모드 사용 시 생성할 인스턴스 수
            exec_mode: 'cluster', // fork, cluster 모드 중 선택
            merge_logs: true, // 클러스터 모드 사용 시 각 클러스터에서 생성되는 로그를 한 파일로 합쳐준다.
            autorestart: true, // 프로세스 실패 시 자동으로 재시작할지 선택
            watch: false, // 파일이 변경되었을 때 재시작 할지 선택
            // max_memory_restart: "512M", // 프로그램의 메모리 크기가 일정 크기 이상이 되면 재시작한다.
        },
    ]
};

NestJS 배포 실행에 필요한 sh 파일

* 아래 sh 파일은 jenkins로 등록했음(나중에 아래 jenkins 관련 내용 참고)

$ sudo vi product.sh
#!/bin/bash
  
cd $(dirname $(realpath $0)) # current folder path
npm install
npm run build
pm2 reload all

Pm2 관련 설정

$ npm install pm2 -g
$ pm2 start ecosystem.config.js // 아까 위에서 만든 설정 파일을 넣어준다.

* 그 외 유용한 명령어
$ pm2 -version // 현재 버전 확인
$ pm2 kill // 현재 실행 중인 pm2 프로세스를 전부 중단한다.
$ pm2 log // 기록된 로그 확인
$ pm2 monit // 현재 실행 중인 pm2 프로세스를 실시간으로 확인

Jenkins 배포 설정

젠킨스 배포 관련 부분은 아래 링크를 참고하기 바람
https://velog.io/@denver/AWS-Jenkins-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-52qmek7j

# jenkins - Execute shell - Command
scp -r /home/ubuntu/jenkins/[프로젝트 폴더]/* ubuntu@[해당 IP 주소]:/home/ubuntu/[프로젝트 폴더]
ssh ubuntu@[해당 IP 주소] bash /home/ubuntu/[프로젝트 폴더]/[해당 sh 파일]

위와 같이 젠킨스 설정을 해주고 나면 배포까지 완료!!

전체 프로세스 과정은 다음과 같다.

Local GitHub Push > GitHub WebHook > Jenkins Server Clone
> Deploy Server Scp 파일 이동 > 해당 sh 파일 실행(install, build, reload)
profile
Python, AWS, Node, PHP, Git Developer

0개의 댓글