현재 진행하고 있는 프로젝트는 Docker를 적용해서 container 환경에서 개발중이다.
이를 AWS의 EC2환경에서 배포를 진행하였는데 개발중인 프로젝트이다 보니 변경사항이 있을 경우 항상 배포를 다시 해주기에는 번거롭다.
따라서 Github Actions와 AWS를 이용하여 최종적으로 배포를 자동화하고자 한다.
설계한 Github Actions의 워크플로우는 아래 사진과 같다.
각 PC에서 개발을 진행하고 Github에 푸시를 하게 되면 Actions의 트리거를 통해서 미리 설정해둔 액션이 진행이 된다.
Code Deploy의 역할은 프로젝트를 배포해 주는 것으로 S3에 업로드된 파일과 배포에 대한 정보를 제공받으면 지정된 EC2 instance에서 압축을 해제하고 설정해둔 AppSpec대로 배포를 진행하게 된다.
AppSpec은 instance에서 배포를 진행할 디렉토리와 권한 그룹, 내부에서 실행될 명령어 스크립트의 위치 지정 등으로 이루어져 있다. 해당 예시에서는 docker-compose를 이용해서 컨테이너를 관리 및 배포한다.
작성한 AppSpec은 아래와 같다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app # s3의 zip 파일 저장 위치
overwrite: yes
permissons:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
AfterInstall:
- location: deploy.sh # 실행할 스크립트의 위치
runas: ec2-user # 살행할 유저
timeout: 1800 # 타임아웃 시간 설정
작성한 deploy 스크립트는 아래와 같다.
cd /home/ec2-user/app/MATHRONE_Frontend_Submodule
npm install
cd /home/ec2-user/app/MATHRONE_Backend_Submodule
sudo ./gradlew build
cd ..
sudo docker-compose up --build
배포 스크립트는 EC2에 배포할 압축파일이 해제되어있을 경우 Docker-compose를 통해 컨테이너를 빌드하고 배포하는 형식으로 되어있다.
최종적으로 전체적인 배포 파이프라인은 아래 이미지와 같다.
