
GitHub에 Push하면 EC2 서버에서 자동으로 git pull + Docker Compose 재시작되는 흐름을 만든다.
aws EC2 인스턴스가 이미 있다는 가정하에 진행한다.
인스턴스로 접속하여 해당 코드를 입력해 SSH 키를 발급한다.
ssh-keygen -t rsa -b 4096
SSH 키를 발급받으면 공개키와 비밀키를 함께 받을 수 있다.
공개키 확인방법
cat ~/.ssh/id_rsa.pub
여기로 들어가면
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA7... (생략) ...==
요런 긴 문자열이 있다. 이 전체 문자열을 복사하자.
이러면 EC2에서 git pull 할 때 비밀번호 없이 SSH 키로 인증할 수 있다.
내가 GitHub에 푸시하면 → EC2가 자동으로 코드를 pull하고 → docker-compose를 재시작하게 만든다.
(이 부분이 제일 어려웠고 오래걸렸다..)
로컬 프로젝트에 아래 경로에 디렉토리 만들기:
.github/workflows/deploy.yml
그리고 deploy.yml에 다음 코드 넣기:
name: Deploy to EC2
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: SSH and deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd /path/to/your/project
git pull origin main
sudo docker-compose down
sudo docker-compose up --build -d
/path/to/your/project → EC2에서 내 프로젝트 경로로 바꿔준다.
cd /home/ubuntu/Devops라고 썼다.위에서 ${{ secrets.XXX }} 부분에 값이 있어야 실행된다.
아래 세가지를 등록
EC2_HOST: EC2의 퍼블릭 IP
EC2_USER: ec2-user (Amazon Linux) or ubuntu (Ubuntu)
EC2_SSH_KEY: EC2의 private key (id_rsa의 내용)
참고: EC2의 퍼블릭IP는 인스턴스를 중지하고 실행할때마다 매번 바뀐다.
그래서 탄력적IP를 설정하여 IP를 고정하는 것도 편한 방법 중 하나다.
물론 요금이 나온다 :)..
그리고 이때!! 중요한게 있다.
EC2_SSH_KEY에 EC2의 private key (id_rsa의 내용)을 등록할 때,
id_rsa의 내용은 대략 이렇다.
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA0V2Lt...
(중간 내용 수백 줄)
...QIDAQAB
-----END RSA PRIVATE KEY-----
여기서 저 BEGIN RSA~~랑 END RSA까지 전부 복사해서 붙여넣어야한다. 안에 있는 중간 내용만 맞는 줄 알고 넣어서 deploy했다가 오류났었다 :(
아, 그리고 여기에서 말하지만, 난 배포 후 내가 EC2에 docker-compose를 설치하지 않음을 깨달았다. 여러분은 꼭 미리 EC2에 docker와 docker-compose를 설치하기 바란다^^
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
#docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#실행권한 부여
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
정상설치되면 Docker Compose version v2.24.6
이렇게 버전이 나와야한다!
이렇게 설치한 후 다시 로컬 코드 수정 + git push 하면
GitHub Actions가 EC2에 접속해서 docker-compose up을 제대로 실행할 수 있다!.. 그치만 미리 추가 작업을 해줘야 오류 없이 잘 deploy할 수 있다.
1. EC2내부에서만 .env파일을 만들자
겪은 에러: env file /home/****/Devops/.env not found
이유는?
2. EC2 보안 그룹 확인
AWS 콘솔 → EC2 → 인스턴스 → 보안 → 보안그룹 → 인바운드 규칙에서
3000번 포트 (TCP)가 열려 있어야 한다.
없으면 추가하기
배포는 되는데 EC2에서 자동으로 git pull, docker-compose down, build, up -d 가 안되서 오류를 해결하느라 시간이 좀 소요되었다.
배포 흔적을 보여주고 싶었는데 사진이 자꾸 깨져서..
여길 누르세요 이 링크를 누르면 확인할 수 있다.
예전에 했을땐(compose-todo-api 였나?) 배포까지만 하고 변경사항 반영되서 재실행 하게 하는건 안했다. 이번엔 다 해서 뿌듯하다.
이제 여기에 프론트를 추가해도 재밌겠고.. 다른 데브옵스 공부를 해서 추가해도 재밌겠다. 2학기에 수업으로도 배워서 실습은 일단 여기까지 해볼까.