[AWS] - CI/CD 자동화, (웹 서버 기준)

Hunter Joe·2026년 1월 19일

글이 중구난방일거고 읽으시는 분들한테도 그닥 도움 안될 수 있지만
이 글의 전반적인 흐름은 다음과 같습니다.

  1. Docker Hub 가입 및 설정 + Docker Hub 필요 이유
  2. git actions 작성
  3. git runners(셀프 호스팅) 설정
  4. nginx + Let's Encrypt (SSL 인증서)

Docker Hub

완전 자동화 CI/CD 구축을 위해서는 Docker Hub의 repository를 이용하면 개굿임 진짜 편함!


사진처럼 도커 이미지 생성하는 법을 알아보자

  1. ID + 비밀번호 or Access Token 필요
    Access Token의 권한은 Read & Write 정도는 필수

Docker Hub 무료 플랜 (참고용 그닥 쓸모 X)

여담인데 배포해보니깐 그냥 대머리 될거같음 공짜 공짜 공짜.. ㄹㅇ 공짜만 찾아 댕기는 듯 ㅠ....

다시 본론 ...

무튼 Docker ID, PW or Access Token 이 필요한 이유는

이따가 GitHub Actions를 이용한 CI/CD를 구축하기 위해 보안 정보가 필요 함 ( 아래 사진 참고 )

Docker Hub 회원가입 했지?

만약 보안을 위해 Private으로 유지하고 싶다면 EC2 터미널에 접속해서 아래 명령어를 딱 한 번만 실행 ㄱㄱ

# EC2 터미널에서 입력
docker login -u [도커_허브_아이디]
# Password 입력창이 뜨면 '비밀번호'가 아닌 발급받은 'Access Token'을 입력하세요.

이렇게 한 번 로그인해두면 그 이후부터는 GitHub Actions가 도커 이미지를 올리고 EC2가 내려받는 과정이 막힘없이 진행됨

git action

"배포 스크립트","CI/CD 파이프라인", "깃헙 Actions 설정" 이 중에 뭐라고 부르는지는 잘 모르겠지만
일단 이 코드는 잘 자기 프로젝트에 맞게 작성할 것

# .github/workflows/deploy.yml

name: My server CI/CD

on:
  push:
    branches: [ main ] # 메인 브랜치에 푸시될 때 실행 

현재 branches: [main]으로 되어 있는데
이건 CI/CD를 구축하기에 안전한건 아님
왜냐하면 git Ubuntu가 내 SSH에 들어가서 직접적으로 수정하는거라서 SSH 22번 포트를 내 ip 외에도 열어줘야함

난 일단 초짜라 요금 폭탄 맞기 싫어서 누구한테도 안열어 줄겅미

Git Self-Hosted Runner

5분은 무슨 한 30분 걸린듯. ㅠ

이대로 실행하면 되긴하는데 약간의 디테일이 있음
Download부분은 저 대로 EC2 터미널에 하나씩 입력하면되고

Configure에
./config.sh --url https://~~~입력한 뒤에
./run.sh 대신에 아래 명령어 하면 좋음

# 서비스를 설치합니다. (관리자 권한 필요)
sudo ./svc.sh install

# 서비스를 시작합니다.
sudo ./svc.sh start

# 서비스 상태를 확인합니다.
sudo ./svc.sh status

이렇게하면 다음과 같다고 함

Dependency 에러 생길경우

# Amazon Linux 2023 기준 수동 설치
sudo dnf install libicu -y

nginx + Let's Encrypt

docker-compose.prod.yml에 nginx에 대한 필요한 코드 작성해주고~
nginx.conf도 작성해주고~

내 폴더 구조는 이래용 (NestJS)

나는 nginx + certbot 폴더 생성해줬음

server
├── src
├── nginx/
│   └── default.conf
└── certbot/
    ├── conf/
    │   └── .gitkeep  
    └── www/
        └── .gitkeep  

폴더구조는 자기 환경에 맞게끔 잘 조절해주면 GOOD!

# 1. 먼저 전체 서비스를 실행합니다. (이때 Nginx는 인증서가 없어 에러가 날 수 있지만 일단 띄웁니다)
docker compose -f docker-compose.prod.yml up -d

# 2. Certbot을 이용해 인증서를 발급받습니다.
docker compose -f docker-compose.prod.yml run --rm certbot certonly --webroot --webroot-path /var/www/certbot -d <url>

발급 성공하믄
근데 아마 여기서 발급받을 때 소스코드 부분 몇번 변경을 할거임

  • 포트 열어주고 -> 다시 닫아주고 이 과정 한번 거쳐야함

SSL 인증서까지 받았따면!? docker compose restart nginx ㄱㄱ 리스타트

참고로 인증서는 다음과 같음

여기까지 했다면 배포 굿 잘 된것임!!

profile
Improvise, Adapt, Overcome

0개의 댓글