CHIP THRONE

Watchtower 기반 자동 배포

문제

  • GitHub Actions 러너가 EC2에 SSH로 접속하는 재배포 단계에서 i/o timeout 발생
  • 22번 포트는 개인 IP만 허용했지만 GitHub Actions 러너의 IP는 실행할 때마다 달라짐
  • Docker 이미지 빌드와 GHCR 전송은 성공했지만 EC2 배포는 실패

Docker 이미지 빌드 성공 후 EC2 배포가 실패한 GitHub Actions 화면

해결 전략

  • 22번 포트를 전체 공개하지 않고 배포 방향을 push에서 pull로 전환
  • EC2의 Watchtower가 GHCR을 60초마다 확인하고 새 이미지가 있으면 컨테이너 교체
  • GitHub Actions는 이미지 저장까지만, EC2 반영은 Watchtower가 담당

기술 선택 이유

  • GitHub Actions에서 EC2로 SSH 배포 - 제외

    • 러너 IP가 실행할 때마다 달라 22번 포트 허용 대상을 고정하기 어려움
    • 22번 포트를 전체 공개하면 상시 스캔과 무차별 대입 공격에 노출
  • Watchtower 기반 pull 배포 - 채택

    • 외부에서 EC2로 접속하지 않아 기존 보안그룹 유지
    • GitHub Actions는 GHCR에 이미지만 저장하고 EC2의 Watchtower가 새 이미지를 확인해 컨테이너 교체
GitHub ActionspushGHCR60초마다 pull 확인Watchtower새 이미지면 교체Backend

결과

  • 보안그룹 22번은 개인 IP만 허용한 채 유지
  • main 반영 후 Watchtower가 새 이미지를 감지하기까지 최대 60초, 이어서 컨테이너 교체
  • 배포 경로에서 SSH 키와 러너 IP 관리 부담 제거

Watchtower 전환 커밋의 GitHub Actions 성공 화면