[AI 서비스 개발] CI/CD - Github action 이용해 AWS 자동 배포하기
1. 흐름
- dev 브랜치로 머지되면 Github Actions가 실행됨
- AWS EC2에 SSH로 접속하여 최신 코드 가져오기
- Docker 컨테이너 빌드 & 실행 (docker-compose up --build)
- 서비스 재시작
2. AWS EC2 인스턴스에서 ssh 계정 생성
- EC2에서 아래 명령어 입력 후 공개키 복사 > Github > Repository Settings > Deploy Keys에 추가
- 비공개 키 복사 > Github > Repository Settings > Secrets and variables > Actions > New repository secret > SSH_PRIVATE_KEY로 등록
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
# ssh-keygen: 새로운 SSH 키를 생성하는 명령어
# -t rsa : RSA 알고리즘을 사용하여 SSH 키를 생성
# - b 4096 : 키 길이를 4096비트로 설정(보안 강화)
# - C "이메일주소" : 키에 주석달기(github이메일)
# 계속 엔터
# 생성된 키 확인
ls -l ~/.ssh/
# id_rsa.pub: 공개 키
cat ~/.ssh/id_rsa.pub
# ssh ~ id@email.com 마우스로 스크롤 + 우클릭 > 복사
# id_rsa: 비공개 키 (절대 노출 금지)
cat ~/.ssh/id_rsa
# 출력예시
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA7vA5...
-----END RSA PRIVATE KEY-----
* 공개키와 비공개키
- 공개 키: EC2가 Github에서 git pull 가능하도록 허용
- 비공개 키: Github Actions가 EC2에 SSH 접속 가능하도록 허용
- EC2에서 Github에 SSH 접속 테스트
git ls-remote git@github.com:username/repository.git
git clone git@github.com:username/repository.git
yes
3. Github Actions 워크플로우 파일 작성
- .gihub/workflows/deploy.yml 생성
name: Deploy to AWS EC2
on:
push:
branches:
- dev # ✅ dev 브랜치에 Push되면 실행
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout Repository
uses: actions/checkout@v3
- name: 🔑 Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.AWS_HOST }} >> ~/.ssh/known_hosts
- name: 🚀 Deploy to EC2
run: |
ssh ${{ secrets.AWS_USER }}@${{ secrets.AWS_HOST }} << 'EOF'
cd ~/your-project-folder
git fetch origin dev # ✅ dev 브랜치 최신 코드 가져오기
git reset --hard origin/dev
docker-compose down
docker-compose up --build -d
EOF
4. EC2에 SSH 접속 후 깃 클론
git clone git@github.com:your-username/your-repository.git
cd your-repository
5. Docker, Docker Compose 설치
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
6. SSH 키 추가
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "GitHub에서 제공한 PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
7. 도커 컨테이너 실행
docker-compose up --build -d
docker ps
8. 테스트 및 자동 배포 확인
git add .
git commit -m "자동 배포 테스트"
git push origin my_branch
- 내 브랜치 > dev로 머지하는 Pull Request 생성
- Github > Actions 탭에서 Deploy to AWS EC2 워크플로우 실행되는지 확인
- EC2에서 컨테이너가 새로 배포되었는지 확인
docker ps