AWS 메뉴에서 EC2 서비스 검색 후 인스턴스 시작 → Ubuntu 인스턴스 선택 후 검토 및 시작 (18버전 권장)
생성되는 인스턴스를 원격으로 제어하기 위해 SSH 연결을 통한 원격접속이 필요하므로 원격접속을 위해 필요한 key를 생성하고 다운로드 한다.
새 키 페어 생성 → 이름 정함 → 키 페어 다운로드 → 인스턴스 시작
키가 받아진 경로로 접속해 인스턴스 연결부분의 chmod 400 [키이름] 명령어 입력후 ssh로 인스턴스 연결
$ sudo apt update
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
//or (https://github.com/nvm-sh/nvm의 Install & Update Script 부분 참조.)
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
// nvm --version 명령어로 정상적으로 받아졌는지 확인
$ nvm install node
$ sudo apt install npm
보안그룹이란 인스턴스로 들어가고 인스턴스에서 나가는 트래픽에 대한 가상 방화벽입니다.
인스턴스로 들어가는 트래픽은 인바운드
인스턴스에서 나가는 트래픽을 아웃바운드라고 합니다.
인바운드규칙은 EC2 인스턴스로 들어오는 트래픽에 대한 규칙입니다.
인바운드 규칙에 허용되지 않은 규칙은 인스턴스로 접근하지 못하도록 필터링 됩니다.
EC2 인스턴스를 생성하면 기본적으로 SSH 접속을 위한 SSH 규칙만 생성되어 있습니다.
아웃바운드 규칙은 EC2 인스턴스에서 나가는 트래픽에 대한 규칙입니다.
EC2 인스턴스를 생성하면 기본적으로 나가는 모든 트래픽을 허용합니다.
보안그룹 → 인바운드 규칙 → 인바운드 규칙 편집 → 규칙 추가 → http, https 규칙 추가 → 규칙 저장
PM2는 node.js로 실행되는 프로그램(프로세스)를 관리해주며, 백그라운드에서 실행되게 만들 수 있습니다.
npm install pm2 -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
authbind --deep pm2 update
pm2 stop //프로세스 중지
pm2 restart //프로세스 재시작
pm2 ls //프로세스 목록 보기
pm2 log //프로세스 로그 보기
authbind의 설치를 완료한 뒤, 먼저 'pm2 ls' 명령어를 통해 어떤 프로그램이 PM2의 프로세스 리스트에 등록되어 있는지 확인합니다.
'app' 프로세스가 리스트에 있다면 'pm2 delete app.js' 명령어를 통해 프로세스를 삭제합니다. authbind 설치 전에 실행되고 있던 프로세스에는 관리자 권한을 부여하지 못하기 때문입니다.
PM2에 관리자 권한을 부여하기 위해서는 'authbind --deep' 명령어를 앞에 추가해야 합니다.
'authbind --deep pm2 start app.js' 명령어를 통해 서버를 다시 실행하면 이번에는 문제없이 작동할 것입니다.
ec2로드밸런서 → loadBalancer생성 → httphttps 생성 → 이름설정, https리스너 추가, 가용영역 다 체크후 다음 → ACM으로부터 새 인증서 요청 → 오른쪽상단 주황색 요청버튼클릭 → 퍼블릭 인증서 요청 다음 → 도메인 입력후 다음 → DNS검증 다음→ 태그 추가 안해도됨 → 요청후 방금만든 인증서 들어가기 → Route53에서 레코드 생성 버튼 찾아서 클릭(Route53 생성) → 생성후 계속 → 발급완료되면 로드밸런서로 돌아와서 인증서 선택후 다음 → 보안그룹 선택후 다음 → 이름 설정후 고급상태 검사 설정 탭 클릭 → 성공코드 201입력후 다음 → 인스턴스 체크표시후 등록된 항목에 추가 클릭 → 등록여부 확인 후 다음 → 생성 → 로드밸런서 메뉴로 돌아가 DNS 이름 주소 이용해 접속 테스트
Route53 → DNS관리 호스팅영역 클릭 → 호스팅 영역 클릭 → 레코드 생성 → 별칭 토글버튼클릭 → Application/Cassic Load Balancer에 대한 별칭 선택 → 아시아 태평양(서울)리전 선택 → 로드밸런서 선택 → 레코드 생성 → 생성 완료
ec2인스턴스 선택 → 작업 → 인스턴스 설정 → 태그관리 → 태그 생성 후 저장 → 작업 → 보안 → IAM 역할 수정 → (난 기존에 만들어뒀음)새 IAM 역할 생성 클릭 → IAM이동후 역할에서 역할만들기 → AWS 서비스 선택, EC2 선택 후 다음 → 검색창에 s3입력해 AmazonS3FullAccess선택, SSM입력해 AmazonSSMFullAccess선택, CodeDeploy입력해 AWSCodeDeployRole선택후 다음 → 태그 추가하지 말고 다음 → 역할 이름 설정후 역할 만들기 → 메인으로 돌아와 생성한 역할 클릭 → 신뢰관계 → 신뢰관계 편집 → Service의 값으로 배열만든후 기존값에 "codedeploy.ap-northeast-2.amazonaws.com" 추가후 신뢰 정책 업데이트 → ec2로 돌아와서 생성한 IAM 역할 선택후 저장 → 보안그룹으로 들어감 → 보안탭 클릭 → 인바운드 규칙 편집 → http와 https 유형을 위치무관으로 추가한 뒤 규칙 저장 → 저장해서 나온 화면에 22, 80, 443 포트가 포함되어 있는지 확인
프로젝트 폴더 최상단에 scripts 폴더 생성
// 프로젝트 폴더 최상단에 appspec.yml 파일 생성후 작성
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/[프로젝트폴더이름]
hooks:
ApplicationStop:
- location: scripts/stop.sh
runas: root
AfterInstall:
- location: scripts/initialize.sh
runas: root
ApplicationStart:
- location: scripts/start.sh
runas: root
// scripts/initialize.sh
#!/bin/bash
cd /home/ubuntu/[프로젝트폴더이름]/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
// scripts/start.sh
#!/bin/bash
cd /home/ubuntu/[프로젝트폴더이름]/server
authbind --deep pm2 start app.js
// scripts/stop.sh
#!/bin/bash
cd /home/ubuntu/[프로젝트폴더이름]/server
pm2 stop app.js 2> /dev/null || true
pm2 delete app.js 2> /dev/null || true
codeDeploy 대시보드로 이동후 애플리케이션 → 애플리케이션 생성버튼 클릭 → 이름을 입력한후 EC2/온프레미스 선택 후 애플리케이션생성 → 배포그룹 탭 클릭 → 배포그룹 생성 → 배포그룹 이름입력, 서비스 역할 입력(전에 생성했던 이름 선택) → 환경 구성 탭중 Amazon EC2 인스턴스선택후 태그그룹에 설정해놓았던 태그 키와 값을 선택 → 로드밸런서의 로드밸런싱활성화 체크 해제 후 배포 그룹 생성 버튼 클릭 → 파이프라인 생성 클릭 → 파이프라인 이름 입력후 다음 → GitHub(버전 2)를 소스 공급자로 선택 → Github에 연결 → 레포지토리와 브랜치설정 CodePipeline 기본값 체크후 다음 → 빌드스테이지건너뛰기 → 배포공급자 AWS CodeDeploy 선택, 아시아 태평양(서울) 리전 선택, 애플리케이션 이름, 배포그룹 선택후 다음 → 파이프라인 생성
파이프라인 생성 실패시
// 터미널에 명령어를 입력해 로그 파일이 저장된 경로로 이동한다.
cd /opt/codedeploy-agent/deployment-root/deployment-logs
// ls 명령어로 어떤 파일이 존재하는지 확인후 nano를 이용해해당 파일을 열어본다.
parameter Store 대시보드로 이동후 파라미터 생성버튼 클릭 → 이름에 환경변수명과 값에 환경변수 값을 입력한후 파라미터생성 버튼 클릭