← 글 목록

notes

Nest Js 프로젝트에 자동 배포 적용하기

NestJS 프로젝트 자동 배포를 위한 빌드·서버·CI/CD 구성 가이드.


1. Nest Js 프로젝트에 자동 배포 적용하기

Untitled 가이드가 선행되어야 합니다.

  • EC2 인스턴스 생성 및 환경세팅
  • 인바운드, 아웃바운드 설정

  • GitHub에서 새로운 레포지토리를 생성합니다.

  • Repository에 대한 SSH 값을 확인합니다.
  • 로컬 터미널에 다음 코드를 입력합니다. (nest js 프로젝트 생성)
nest new github-action

  • 로컬 터미널에 다음 코드를 입력합니다.
cd github-action
git remote add origin {{ Repository에 대한 SSH }}
# git remote add origin git@github.com:eikjae/github-action.git
git remote -v   # 연결 확인
  • 로컬 터미널에 다음 명령어를 입력합니다.
code .

  • 프로젝트 루트에 .github폴더를 생성한 후, 그 안에 workflows 폴더를 생성합니다.

    workflows 폴더 안에 main-deploy.yml 파일을 생성합니다.

  • 다음 코드를 main-deploy.yml에 입력합니다.
name: CI/CD

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH Commands
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.AWS_SSH_HOST }}
          username: ${{ secrets.AWS_SSH_USERNAME }}
          key: ${{ secrets.AWS_SSH_KEY }}
          port: ${{ secrets.AWS_SSH_PORT }}
          script_stop: true
          script: |
            cd github-action  # 프로젝트 이름에 따라 변경이 필요합니다.
            git pull
            yarn
            yarn build
            pm2 reload 0
  • 로컬 터미널에 다음 명령어를 입력합니다.
git add .
git commit -m "FEAT: github action 추가"
git push --set-upstream origin main
  • 해당 레포지토리의 Settings 클릭 → Security 카테고리 내의 Secrets and variables 클릭

    → Actions 클릭 → New repository secret 클릭

  • Name에 AWS_SSH_HOST 를 입력 후, Secret에 EC2의 퍼블릭 IPv4 주소 를 입력 → Add secret 클릭

  • 환경변수 생성을 위해 New repository secret 클릭합니다. Name에 AWS_SSH_USERNAME 를 입력 후, Secret에 ubuntu 를 입력 → Add secret 클릭

[참고] EC2 터미널 창에 whoami 명령어를 입력하면 얻는 값을 Secret에 입력합니다.

  • 환경변수 생성을 위해 New repository secret 클릭합니다. Name에 AWS_SSH_KEY 를 입력 후, Secret에 해당 인스턴스의 키 페어(.pem) 내용을 입력 → Add secret 클릭

[참고] 키 페어가 존재하는 폴더에서 다음 명령어를 입력한 후, 내용을 복사합니다.

vi {{해당 인스턴스의 키 페어}}
# vi instance.pem

  • 환경변수 생성을 위해 New repository secret 클릭합니다. Name에 AWS_SSH_PORT 를 입력 후, Secret에 22를 입력 → Add secret 클릭

[참고] SSH와 관련된 포트 번호가 22가 아닌 경우, 이에 대응하는 값을 Secret에 적습니다.

  • EC2 인스턴스에 접속한 후, 터미널에 다음 코드를 입력합니다.
git clone {{ Repository에 대한 SSH }}
# git clone git@github.com:eikjae/github-action.git

  • EC2 인스턴스 터미널에 다음 코드를 입력합니다.
cd github-action
yarn
yarn build
pm2 --name nestjs-project start yarn -- start

  • 로컬에서 프로젝트의 app.service.ts 를 다음과 같이 수정합니다.
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World! (자동 배포 성공)';
  }
}

  • 로컬 터미널에 다음 코드를 입력합니다.
git add .
git commit -m "FIX: 자동배포 테스트"
git push

  • GitHub에서 해당 프로젝트 → Actions를 클릭하면 github action 진행상황을 확인할 수 있습니다.
    • 웹 브라우저에 퍼블릭 IPv4 주소를 입력하여 자동 배포 여부를 확인합니다.