지난번 AWS를 통해 무사히 배포를 마쳤다.
약간 불편한 점이 있다면 새로 코드가 업데이트 될 때마다 ssh로 서버 컴퓨터에 접속해서 git pull 을 진행한 뒤 다시 docker compose up을 해야 하는 것이다.
그래서 이번엔 Github Actions를 통해 배포를 자동화 해보려 한다.
깃허브 액션은 모두 .github 폴더의 workflows 폴더 내에 위치해야 한다. 폴더를 먼저 만든 뒤 yml파일을 하나 만들어주자.
나는 배포를 위한 파일이기 때문에 deploy.yml을 만들었다. 이름에서부터 느껴지는 yarn 문법 🤣
name: Deploy to EC2
on:
push: #push가 일어날 때마다 실행
branches: # 1/develop 브랜치에서
- '1/develop'
jobs: # 어떤 일을 하냐면
deploy: # 배포를 합니다
runs-on: ubuntu-latest # 최신 ubuntu 한경에서
steps:
- name: Checkout source
uses: actions/checkout@v3 # 코드를 가져와서
- name: Set up SSH # SSH설정
run: |
/* 디렉토리 만들기 */
mkdir -p ~/.ssh
/* github secrets 키로 개인키를 가져와서 저장 */
echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa
/* 개인키 권한 강화 */
chmod 600 ~/.ssh/id_rsa
/* github secrets 키로 host를 가져와서 추가 */
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
- name: Deploy to EC2 # EC2에 배포
run: |
/* EC2서버로 SSH 접속 시도 */
ssh -o ServerAliveInterval=120 ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
set -e
echo "프로젝트 디렉토리 이동"
cd ~/quizchat
echo "Git Pull"
git pull origin 1/develop
echo "Docker Compose 재시작"
docker compose -f docker-compose.yml down
docker compose -f docker-compose.yml up -d --build
EOF
간단하게 정리하면 ssh에 접근할 수 있도록 권한을 설정하고 EC2에 접속을 시도해서 기존에 했던 것처럼 Git Pull, docker compose 하는 과정이다.
-o ServerAliveInterval=120 : 120초마다 서버에 신호를 보내는 옵션이다. 이 옵션이 없었을 때는 배포가 오래걸릴 때 ssh 연결이 timeout으로 죽어버버리는 경우가 있었다.해당 액션을 만들고 정말 자동으로 배포가 되는 모습을 보니 뿌듯하고 좋았다.

프리 티어의 한계인지 갈수록 배포 시간이 길어졌고, 배포 완료보다 push가 빨라 액션이 충돌, 에러가 나는 경우가 잦았다.
속도를 개선할 수 있는 다른 방법이 없는 이상 수동 배포를 할 것 같다 🥹
그래도 시도해봤다는 것이 의미있다고 생각한다! 👍