CD 파이프라인 구성 및 도메인 구입
서론
서버에 배포를 완료하고 나자 생각보다 플로우가 간단해서 충분히 자동화할 수 있겠다는 생각이 들었고, Github action을 통해 시도하게 되었다.
이전의 프로젝트에서 scp로 jar파일을 ec2 인스턴스에 보내던 방식보다 훨씬 빠르고 간편하게 구성할 수 있었다. 도커가 깊이 들어가면 러닝커브가 높지만 이렇게 간단하게 쓸 때에는 엄청 편리한 것 같다.
CD 파이프라인
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: final/Backend
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${ { secrets.DOCKER_USERNAME } }
password: ${ { secrets.DOCKER_PASSWORD } }
- name: Build and push Backend Docker image
uses: docker/build-push-action@v6
with:
context: ./final/Backend
push: true
tags: rabent0207/final-penet-backend:latest
build-args: |
API_KEY=${ { secrets.API_KEY } }
JWT_KEY=${ { secrets.JWT_KEY } }
- name: Build and push Frontend Docker image
uses: docker/build-push-action@v6
with:
context: ./final/Frontend/final-front
push: true
tags: rabent0207/final-penet-frontend:latest
- name: Deploy to EC2
uses: appleboy/ssh-action@v1
with:
host: ${ { secrets.EC2_HOST_IP } }
username: ${ { secrets.EC2_USERNAME } }
key: ${ { secrets.EC2_SSH_KEY } }
script: |
cd /home/ubuntu/Hamgaja
docker compose -f docker-compose.server.yml pull
docker compose -f docker-compose.server.yml up -d
민감한 정보들은 Github secret을 통해 관리했다. 과정은 다음과 같다.
backend, front를 각각 빌드 -> docker hub에 이미지를 업로드 -> runner가 ssh로 ec2 인스턴스에 연결 후 서버 내부의 docker compose 파일로 이미지를 내려받아 컨테이너를 실행
기존의 코드에 추가하다보니 build를 두번 하는 문제가 발견되어 수정했다. main에 push하는걸 트리거로 작동하니 당분간 배포는 이걸로 하면 될 것 같다.
또 하나의 장점은 github secret을 이용하는 것이 가능하기 때문에 ssl 키, ssh 키 등 어디 올릴 수도 없고 로컬로 주고받기도 번거로운 민감한 정보들을 손쉽게 관리할 수 있다.
다만 이런 기능을 사용하려면 배포가 github action에 종속되게 되니 이 부분은 유의해야 할 것 같다.
도메인 구입
추후 ssl 키를 발급받기 위해 등록한 무료 도메인인 Duck DNS가 다운됐다. 검색해보면 꽤 자주 이러는 모양인데 상당 시간 기다려도 복구될 기미가 보이지 않아 그냥 싸게 도메인을 하나 사기로 했다.
친구가 route53에서 .click으로 발급받으면 1년에 3달러로 사용할 수 있다고 해서 매번 이렇게 속썩느니 1년에 3달러면 싸게먹히겠다 싶어 진행했다.
무사히 도메인을 등록하고 EC2 인스턴스와 연결까지 끝마쳤고, 이제 안정적인 도메인이 생겼으니 SSL 키를 let’s encrypt에서 발급받아서 적용하고, 테스트를 진행하면 될 것 같다.