[Project] Github Action을 이용한 자동 배포

do_Rang·2025년 6월 26일

Project

목록 보기
6/7

지난번 AWS를 통해 무사히 배포를 마쳤다.
약간 불편한 점이 있다면 새로 코드가 업데이트 될 때마다 ssh로 서버 컴퓨터에 접속해서 git pull 을 진행한 뒤 다시 docker compose up을 해야 하는 것이다.

그래서 이번엔 Github Actions를 통해 배포를 자동화 해보려 한다.

🚀 GitHub Actions

workflows 폴더 만들기

깃허브 액션은 모두 .github 폴더의 workflows 폴더 내에 위치해야 한다. 폴더를 먼저 만든 뒤 yml파일을 하나 만들어주자.

나는 배포를 위한 파일이기 때문에 deploy.yml을 만들었다. 이름에서부터 느껴지는 yarn 문법 🤣

yml 파일 작성

name: Deploy to EC2

on:
  push: #push가 일어날 때마다 실행
    branches: # 1/develop 브랜치에서
      - '1/develop'

jobs: # 어떤 일을 하냐면
  deploy: # 배포를 합니다
    runs-on: ubuntu-latest # 최신 ubuntu 한경에서

    steps:
      - name: Checkout source
        uses: actions/checkout@v3 # 코드를 가져와서

      - name: Set up SSH # SSH설정
        run: |
          /* 디렉토리 만들기 */
          mkdir -p ~/.ssh 
          /* github secrets 키로 개인키를 가져와서 저장 */
          echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa 
          /* 개인키 권한 강화 */
          chmod 600 ~/.ssh/id_rsa
          /* github secrets 키로 host를 가져와서 추가 */
          ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts

      - name: Deploy to EC2 # EC2에 배포
        run: |
          /* EC2서버로 SSH 접속 시도 */
          ssh -o ServerAliveInterval=120 ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
            set -e
            
            echo "프로젝트 디렉토리 이동"
            cd ~/quizchat
            
            echo "Git Pull"
            git pull origin 1/develop
            
            echo "Docker Compose 재시작"
            docker compose -f docker-compose.yml down
            docker compose -f docker-compose.yml up -d --build
          EOF

간단하게 정리하면 ssh에 접근할 수 있도록 권한을 설정하고 EC2에 접속을 시도해서 기존에 했던 것처럼 Git Pull, docker compose 하는 과정이다.

기억해둘 것

  • -o ServerAliveInterval=120 : 120초마다 서버에 신호를 보내는 옵션이다. 이 옵션이 없었을 때는 배포가 오래걸릴 때 ssh 연결이 timeout으로 죽어버버리는 경우가 있었다.
  • EC2의 개인키와 HOST(IPv4), USER를 github 레포지토리의 secrets에 저장해두어야 한다.
  • EC2 개인키를 만드는 방법은 후에 작성해보자.

🤗 결론

  • 해당 액션을 만들고 정말 자동으로 배포가 되는 모습을 보니 뿌듯하고 좋았다.

  • 프리 티어의 한계인지 갈수록 배포 시간이 길어졌고, 배포 완료보다 push가 빨라 액션이 충돌, 에러가 나는 경우가 잦았다.

  • 속도를 개선할 수 있는 다른 방법이 없는 이상 수동 배포를 할 것 같다 🥹

  • 그래도 시도해봤다는 것이 의미있다고 생각한다! 👍

profile
공부하자

0개의 댓글