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
Actions를 클릭하면 github action 진행상황을 확인할 수 있습니다.- 웹 브라우저에
퍼블릭 IPv4 주소를 입력하여 자동 배포 여부를 확인합니다.