Record
이스터에그 (인프라 프로젝트5 / CD , AWS, docker hub 연결) 본문
저번에는 CI(지속적 통합) 단계인 git에서 push를 하면 이미지 빌드를 해서 도커 허브에까지 올리는 과정을 진행했다.
이번에는 CD(지속적 배포) 단계를 해보려고 한다.
현재 구조는 도커허브에 올린 이미지를 EC2에서 pull해서 도커컨테이너로 올리는 과정을 하려고 한다.
이 하나의 과정을 git action을 통해서 진행한다고 생각하면 편하다.
[ git action ] - 도커허브에 올리기, EC2에 접속해서 도커허브 pull 당겨와서 docker로 올리기
이걸 이해하기 편하려면 먼저 script를 보는게 편할꺼 같다.
name: Build and Push Docker image to Docker Hub
on:
push:
branches: [ "main" ]
workflow_dispatch: # GitHub 화면에서 수동 실행도 가능하게
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: ./back
file : ./back/Dockerfile
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/easter-egg:latest
${{ secrets.DOCKERHUB_USERNAME }}/easter-egg:${{ github.sha }}
deploy-to-ec2:
needs: build-and-push # 위 job 성공 후에만 실행
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2 via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/easter-egg:latest
docker rm -f easter-egg || true
docker run -d --name easter-egg -p 80:8000 ${{ secrets.DOCKERHUB_USERNAME }}/easter-egg:latest
스크립트에 deploy-to-ec2가 추가 되었고, 현재 내가 vscode로 ssh접속 하듯이 host, username, key를 주어서 ec2에 접속하게 해준다.
그러면 저번과 같이

secreat value로 setting을 해준다. ssh_key의 경우 EC2를 생성할때 주었던 .pem key를 활용했다.

그리고 현재 인바운드(클라이언트가 접속할때) 규칙인 http의 포트를 80으로 열어놨기 때문에 docker를 실행할때 80:8000으로 바인딩 해준다.

그 후 깃으로 push를 하면 actions 탭에 이렇게 진행이 되는걸 확인할 수 있다.

그러면 내가 컨테이너를 키지 않더라도 자동으로 컨테이너가 켜진다.

이제 공인 IP주소로 나의 홈페이지로 접속할 수 있다.
이제 깃으로 push만 하면 서버에 자동 배포되는걸 알 수 있다. 이후에는 Prometheus / Grafana / node_exporter를 사용해보고자 한다.
'프로젝트' 카테고리의 다른 글
| 대학 캠퍼스 인프라 구성 ( 네트워크, 서버 프로젝트 ) (0) | 2026.01.27 |
|---|---|
| 이스터에그 (인프라 프로젝트6 / Front 연결) (1) | 2025.11.22 |
| 이스터에그 (인프라 프로젝트4 / github action, docker hub) (0) | 2025.11.13 |
| 이스터에그 (인프라 프로젝트3 / git ssh 연결, public key, private key) (0) | 2025.11.12 |
| 이스터에그 (인프라 프로젝트2 / Docker ,git 연결) (0) | 2025.11.12 |