DevOps/AWS

서버 배포 자동화

WooKGOD 2023. 1. 16. 13:06
반응형

※앞선 글의 클라이언트 배포 자동화에 이어 서버 배포 자동화 파이프라인을 구축하고자 한다.

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

 

반응형