현재 프로젝트는 ec2 ubuntu에서 스프링 jar를 담은 도커 컨테이너 두 개가 존재할 수 있다. 각각은 blue, green라는 이름을 가지며 8080, 8081포트로 배정되어있다. 이 컨테이너 두 개는 실행 규칙에 따라 켜지고 꺼지며, 두개로 존재하는 이유는 무중단 배포를 구현하기 위함이다. 만약 blue가 켜져있고 새로운 배포 시나리오가 진행되면 새로운 배포버전은 green에 할당된다. 배포과정동안은 blue가 켜져있어 서버가 끊기지 않게끔 보인다.
github action을 통해 모든 배포과정이 진행된다. 배포 시점은 main 브랜치의 commit 시점이다.
github action시 문제는 두 가지가 있었다.
하나는 다음과 같이 도커 컴포즈시에 스프링부트 서버가 도커 컨테이너로 띄워지는 것 자체에서 문제가 있었다.
에러로그도 띄우지 않았으며 계속 creating
상태에서 멈춰있었다. 이때 문제는 로컬 쉘에서 접속한 aws shell또한 먹통이 되는 문제가 있어 이 문제가 일어날 경우 인스턴스 재부팅을 해야 해결되었다.
두번째는 docker compose까지 완료되고 이전 컨테이너를 끄는 로직에서 문제가 일어났다. 끌 컨테이너를 찾을 수 없다는 것이다. 끄지 않았는데 꺼진 것이다.
위 두 현상은 일관적으로 일어나지 않았고 로그가 찍히지 않아 문제가 있었다.
aws ec2 t2.micro가 너무 빈약했기에 메모리 부족 현상과 용량자체를 초과하는 문제가 있었다.
aws ec2에서 제공해주는 모니터링 기능을 통해 이를 간단히 확인할 수 있었다.
github action에서 docker compose이전에 쓰지 않는 도커 이미지를 ec2에서 삭제하는 코드를 넣었으며,
이전에 실험삼아 ec2에 설치한 mysql 서버가 백그라운드에서 계속 실행되고있었다.(메모리를 36%나 먹고있었다.) 쓸 일도 없기때문에 이를 삭제해주었다.