서버 배포 자동화
※앞선 글의 클라이언트 배포 자동화에 이어 서버 배포 자동화 파이프라인을 구축하고자 한다.
https://wook-god.tistory.com/10
클라이언트 배포 자동화
배포 자동화를 구축할 수 있는 툴에는 여러가지가 존재하지만 이번 실습에서는 AWS 이용하고자 한다. 먼저 작성한 로컬 환경에 소스코드가 있다는 가정하에 시작할 것이다. #실습 전 비어있는 S3
wook-god.tistory.com
간단하게 설명하면 CodeDeploy를 이용하여 EC2 인스턴스의 변경사항을 실시간으로 반영하는 것이다.
실습 전 EC2 인스턴스를 새롭게 하나 만들어주고 개발 환경을 구축해주자.
EC2 인스턴스에 SSH 연결
ssh -i /path/key-pair-name.pem instance-user-name@instance-public-dns-name
위 명령 혹은 인스턴스의 연결 탭에서 ssh 부분을 확인할 수 있다.
sudo apt update
sudo apt install nodejs
sudo apt install npm
#아래는 선택 사항
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash #nvm설치
source ~/. bashrc #변경사항 즉시 적용
nvm install --lts
1. EC2 인스턴에 태그와 역할 부여
인스턴스의 작업 > 인스턴스 설정 > 태그 관리
인스턴스의 작업 > 보안 > IAM 역할 수정 > 새 IAM 역할 생성 > 역할 만들기
이름은 자유롭게 설정 후 아래 과정을 거쳐 역할 생성
생성 후 해당 역할에서 신뢰관계의 신뢰 정책을 편집
Service 부분에 "codedeploy.ap-northeast-2.amazonaws.com" 추가
모두 완료되었다면 EC2 인스턴스에 해당 IAM 역할 업데이트
이후 EC2 인스턴스의 보안그룹에서 인바운드 규칙 편집
소스: 위치 무관 or IPv4, IPv6 모두 추가
2. EC2를 이용한 파이프라인 구축
실습에 활용할 로컬 환경의 최상위 디렉토리에 appspec.yml 생성
##appspec.yml: 배포 자동화를 도와주는 CodeDeploy-Agent가 인식하는 파일
version: 0.0
os: linux
files:
- source: /
destination: /home/wook/sprint-practice-deploy-for03
hooks:
ApplicationStop:
- location: scripts/stop.sh
runas: root
AfterInstall:
- location: scripts/initialize.sh
runas: root
ApplicationStart:
- location: scripts/start.sh
runas: root
최상위 디렉토리 아래 scripts 폴더 생성 후 stop.sh, initialize.sh, start.sh 생성
##stop.sh
#!/bin/bash
cd /home/wook/sprint-practice-deploy-for03/server #실습환경 repo의 server 구성 디렉토리
pm2 stop app.js 2> /dev/null || true
pm2 delete app.js 2> /dev/null || true
##initialize.sh
#!/bin/bash
cd /home/wook/sprint-practice-deploy-for03/server
npm install
npm install pm2@latest -g
sudo apt-get update
sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown ubuntu /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80
##start.sh
#!/bin/bash
cd /home/wook/sprint-practice-deploy-for03/server
authbind --deep pm2 start app.js
CodeDeploy 에서 애플리케이션 생성
생성 후 이어서 배포 그룹 생성
#선택사항: 무중단 배포를 하지 않을 것이므로 로드밸런서 체크 해제한 후 생성
3. 파이프라인 생성
클라이언트 배포 단계와 같게 파이프라인을 설정 후 빌드스테이지 건너뛰기 선택
정상적으로 모두 진행했다면 다음과 같은 결과를 얻을 수 있다.
※추가 사항
에러가 발생한다면 로그를 참고하여 해결할 수 있다.
EC2 인스턴스에서 log 위치를 파악 후 로그 확인
cd /opt/codedeploy-agent/deployment-root/deployment-logs
sudo nano codedeploy-agent-deployments.log
tail codedeploy-agent-deployments.log ##nano 대신 tail 이용
##프로세스 관련 문제
sudo pm2 log