Github Actions, Code Deploy, Nginx를 이용한 무중단 배포 및 SSL 적용 (1)

유제·2022년 7월 31일
2

🚨 주의! 이 글은 DevOps 초보자가 삽질을 통해서 이룬 결과물을 다룬 시리즈입니다. 이 글에서 다룬 방법보다 효과적인 방법이 있으면 알려주시면 감사하겠습니다. 피드백은 언제나 환영입니다!!👍

HTTPS를 적용하길 원하신다면 EC2 인스턴스에 도메인을 미리 연결해주세요! SSL 인증서를 발급받으려면 도메인이 연결되어 있어야하고, 도메인 연결 후 DNS에 적용되려면 4 ~ 48시간정도 걸리기 때문입니다.

프로젝트 소스는 여기에서 확인할 수 있습니다. HTTPS 인증 관련 파일은 5번 포스트에서 확인해주세요!

해당 글을 작성하면서 잔재미코딩님의 강의, wbluke님, 최영훈님의 글을 많이 참고했습니다. 감사합니다

이 글의 목표는 Github Actions, Code Deploy, S3, Docker, Nginx, certbot을 이용해서 무중단 배포 및 SSL 적용을 하는 것입니다. 여기서 NestJS 어플리케이션을 배포를 하지만, 다른 프로젝트에도 적용할 수 있습니다.

그리고 이 시리즈에서 무중단 배포와 SSL 적용은 서로 분리하여 다룹니다. 무중단 배포를 먼저 작업한 후 SSL을 적용하는 순서로 진행하도록 하겠습니다.

해당 시리즈의 흐름은 크게 무중단 배포SSL 적용 두 가지로 나뉩니다.

전체적인 흐름

전체적인 흐름은 아래와 같습니다.

이번 글에서 다룰 부분은 아래 파란 부분입니다.

무중단 배포

1. main 브랜치에 Push 혹은 PR 날리기

이 글을 보시는 분들 중 Github 원격 저장소의 main 브랜치에 푸쉬 혹은 PR을 날리는 방법을 모르는 분은 없다고 생각하고 1번은 넘어가도록 하겠습니다.

2. Push 혹은 PR 후 작동하는 Workflow 작성하기

github repository를 만들고 아래와 같이 Actions 탭으로 들어가 set up a workflow yourself를 누릅니다. NodeJS 환경을 세팅할 예정이기 때문에 Search Workflow 인풋에서 NodeJS를 검색해서 이미 있는 workflow를 사용해도 됩니다.

set up a workflow yourself를 누르면 아래와 같이 workflow yml 파일을 작성할 수 있는 에디터가 나옵니다.

  • main.yml: 해당 workflow yml 파일의 이름입니다. 아무렇게나 변경하셔도 됩니다.
  • name: Deploy NestJS Application : 해당 workflow의 이름입니다. 아무렇게나 변경하셔도 됩니다.
  • node : 우리는 NodeJS 환경을 세팅할 것이기 때문에 다른 분들이 만들어둔 nodejs action을 사용하겠습니다. node 말고 다른 것을 검색해서 각자 상황에 맞는 action을 사용할 수도 있습니다.

workflow 작성 방법은 포스팅이 많이 있기 때문에 생략하겠습니다.

name: Deploy NestJS Application

# main 브랜치로 push 혹은 pr이 날라와서 merge되면 workflow가 작동합니다.
# workflow_dispatch는 수동으로 workflow를 작동시키도록 할 수 있도록 합니다.
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      # 해당 workflow가 레포지토리에 접근할 수 있도록 해줍니다.
      # 우리는 레포지토리의 소스를 빌드해야하기 때문에 이 액션을 사용해야합니다.
      - name: Checkout Repository
        uses: actions/checkout@v2.4.2
     
      # 16.16.0 버전의 NodeJS를 세팅해줍니다.
      - name: Setup Node.js environment
        uses: actions/setup-node@v3.4.1
        with:
          node-version: 16.16.0
      
      # Dependency들을 설치합니다. yarn도 사용 가능합니다.
      - name: Install Dependencies
        run: npm install
        
      # NestJS Application을 빌드합니다.
      - name: Build a Nest Application
        run: npm run build
        shell: bash
      
      # 레포지토리를 압축시킵니다.
      # 다만 불필요한 node_module, coverage, src, test, readme, .git* 등의 파일은 제외시킵니다.
      - name: Make a zip file
        run: zip -r ./$GITHUB_SHA.zip . -x "node_modules/*" "coverage/*" "src/*" "test/*" "README.md" "*.git*"
        shell: bash

여기까지 워크플로우가 정상적으로 작동한다면, Workflow 상에서 zip 파일이 생성됩니다.

0개의 댓글