카테고리 없음

배포 과정 기록.

코딩연습중 2025. 5. 16. 02:22

1. rds 생성

근데 rds 비용 폭탄 맞을까봐 너무 걱정돼서 일단 프로덕션 전까지는 ec2에서 도커로 mysql 돌릴 계획..(프리티어도 끝남..)

 

2. EC2 인스턴스 생성

1) aws 로그인, 아시아 태평양으로 지역 설정

2) ec2 대시보드 접속 후 인스턴스 시작 클릭

3) 이름 작성 후 애플리케이션 및 OS 이미지에서 우분투

나머지 설정 그대로 두고, 키페어 선택. (없으면 키 페어 생성)

 

키 페어 없으면 생성

푸티에서 쓸거면 ppk

다음과 같이 설정 진행 후 인스턴스 시작

보안 그룹 들어가서 포트 열어주기

인스턴스>보안>보안그룹 클릭

 

탄력적 IP (Elastic IP) 할당

 - EC2 -> 왼쪽 메뉴에서 탄력적 IP 주소 선택

 - 새 IP 할당 -> 현재 EC2 인스턴스에 연결

 

3. PuTTY로 접속

key.ppk 넣은 후, 세션 저장.

접속

ubuntu로 로그인

 

sudo apt update

sudo apt install -y docker.io docker-compose

sudo apt install -y git

 

깃허브에서 클론해오기.

git clone ~~

 

깃허브 secrets 설정으로 환경변수 등록

GitHub → [Repository] → Settings → Secrets and variables → Actions → New repository secret

 

 

루트에 GitHub Actions 워크플로우 만들기

mkdir -p .github/workflows
touch .github/workflows/deploy.yml

 

 

워크플로우 작성 (모듈 변경 감지 → 해당 모듈만 배포)

name: Deploy to EC2

on:
  push:
    branches: [main]

jobs:
  detect-changes:
    runs-on: ubuntu-latest
    outputs:
      account: ${{ steps.filter.outputs.account }}
      gateway: ${{ steps.filter.outputs.gateway }}
      proxy: ${{ steps.filter.outputs.proxy }}

    steps:
      - uses: actions/checkout@v3
      - id: filter
        uses: dorny/paths-filter@v3
        with:
          filters: |
            account:
              - 'account-service/**'
            gateway:
              - 'api-gateway/**'
            proxy:
              - 'external-api-proxy/**'

  deploy-account:
    if: needs.detect-changes.outputs.account == 'true'
    needs: detect-changes
    runs-on: ubuntu-latest

    steps:
      - name: SSH and deploy account-service
        env:
          DB_NAME: ${{ secrets.DB_NAME }}
          DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
        run: |
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > key.pem
          chmod 400 key.pem
          ssh -o StrictHostKeyChecking=no -i key.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << EOF
            cd your-monorepo/account-service
            export DB_NAME=${{ secrets.DB_NAME }}
            export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
            docker-compose up -d --build
          EOF

  # gateway, proxy도 위 구조 복붙해서 사용

이걸 .github/workflows/deploy.yml로 저장

 

 

  • GitHub Secrets에 SSH_PRIVATE_KEY는 .pem 키 파일 내용을 그대로 붙여넣으면 됨
  • GitHub Actions가 EC2에 접속해서 모듈 디렉터리 안에서 docker-compose up을 실행하는 구조야
  • 루트 전체 재배포가 아니라 변경된 모듈만 딱 배포됨!