TIL-220105_2

EBinY·2022년 1월 5일
0

TIL - Today I Learned

목록 보기
43/54

AWS를 이용한 배포 실습

EC2

<인스턴스 생성 및 연결>

  • AWS 메뉴에서 EC2를 접속하고 인스턴스를 생성할 수 있다
  • 용도에 맞게 AMI를 선택하고, 인스턴스 유형을 선택한 후, 검토 및 시작 버튼
  • 생성된 인스턴스를 원격 제어하기 위해 SSH 연결을 통한 원격접속이 필요함
  • SSH(Secure Shell) Protocol은 pc와 pc가 인터넷과 같은 public network을 통해 서로 통신을 할 때 보안상 안전을 위한 프로토콜임
  • 키 페어 설정에서 새로운 키를 써도 되고, 이전에 발급받은 키를 선택해서 사용해도 됨, 선택 안함도 있음
  • 새 키페어 생성을 선택했다면, 키 페어 다운로드를 통해 키를 받고(.pem 파일) 인스턴스 시작 버튼을 누름
  • EC2 프라이빗 키 파일(.pem 파일): SSH 통신을 위한 Private key가 기록된 파일임, 관리에 유의
  • 생성된 인스턴스는 인스턴스ID로 구분할 수도 있지만, 명확한 구분을 위해 Name 컬럼에 이름을 지정해준다
  • 인스턴스 탭에서 연결하고자 하는 인스턴스를 선택 후 연결 버튼을 클릭하면 인스턴스 연결 방법을 확인 가능
  • 로컬 터미널에서 SSH 프로토콜을 이용해 인스턴스와 연결이 가능, 그 전에 새로 받은 키 페어 파일의 권한을 수정해줘야 함(권한이 너무 open되어 있어 사용이 불가하다고 에러가 뜸, 권한을 축소해야 함)
  • (chmod 400 AWS_Deploy_Practice.pem, 같은 디렉토리에서 실행할 경우임, 다른 경우 경로를 지정해줘야 함)
    • chmod: 파일의 권한을 설정
    • 400(첫자리는 소유자, 두번째는 그룹, 세번째는 전체에 대한 권한을 의미함)
    • 권한은 읽기(4), 쓰기(2), 실행(1) 세가지 조합, 7은 전체 권한을 의미
  • 파일 권한 설정 후, SSH 명령어를 통해 인스턴스에 접속
    • 접속을 위한 주소는 인스턴스 세부 정보 탭에서 확인
    • ssh -i "ebiny.pem" ubuntu@ec2-3-82-157-48.compute-1.amazonaws.com

<인스턴스 상에서 서버 실행>
1. 인스턴스에 개발 환경 구축하기

  • sudo apt update : 패키지 정보를 최신으로 업데이트
  • nvm 설치(nvm github 참고)
  • nvm install node : node.js 설치
  • sudo apt install npm : npm 설치
  1. git을 통해 서버 코드 클론 받기
  2. EC2 인스턴스에서 서버 실행
  • sudo npm start : 관리자 권한으로 실행해야 함
  • 인스턴스의 상세 정보에서 퍼블릭 DNS로 접속 테스트 진행(응답 시간 초과 에러가 나올 것)
  1. Security Group(보안 그룹): 인스턴스의 가상 방화벽
  • 인바운드(접속 트래픽)와 아웃바운드(아웃 트래픽)에 대한 규칙을 설정할 수 있음
  • 인스턴스를 생성하면 인바운드는 SSH 접속 규칙만, 아웃바운드는 모든 트래픽 허용
  • 인스턴스의 보안 그룹 탭에서 속한 보안그룹을 확인
  • 우측 탭에서 보안 그룹으로 이동, 속한 보안 그룹을 클릭하고 규칙 설정으로 이동
  • 인바운드 규칙에 필요에 따라 추가하고 제거하는 과정이 자유로움
  1. PM2
  • PM2: 프로세스 메니지먼트 프로그램

  • 프로세스: 컴퓨터 프로그램이 실행될 때 실행에 필요한 내용이 메모리에 적재된다는 의미(실행 중인 프로그램이라는 의미 정도로 기억해도 무방)

  • node 프로세스가 ssh 접속 여부와 상관없이 실행되어 있게 만들어주는 프로그램

  • 백그라운드 실행 명령어 키워드(&, node index.js &)도 있다(fg: 포어그라운드로 불러옴, kill: 프로세스 강제 종료)

  • PM2: node.js로 실행되는 프로그램(프로세스)를 관리해 주며, 백그라운드에서 실행되게 만듬

  • 주요 기능

    • Hot Reload: 프로그램이 변경될 때 자동으로 재시작하거나, 프로그램 실행 중 에러로 서버가 종료되면 다시 자동으로 실행시켜 주는 기능
    • 로그 관리 매니지먼트, 클러스터 모드: 멀티 코어 CPU를 최대한 활용하는 옵션 등
  • npm install pm2 -g : pm2를 설치

  • pm2에 관리자 권한을 부여해야 제대로 실행됨

  • 관리자 권한을 부여하는 authbind 패키지를 추가적으로 설치해야 함

    • 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에 관리자 권한을 부여하기 위해서는 'authbind --deep' 명령어를 앞에 추가
  • 주요 명령어

    • pm2 start <file.js> : 백그라운드에 실행
    • pm2 stop : 프로세스 중지
    • pm2 restart(재시작), pm2 log(로그), pm2 ls(프로세스 목록)
  • 용어 정리

    • 인스턴스: 가상의 컴퓨터 1대 단위
    • Amazon Machine Image: 운영체제를 비롯한 인스턴스의 OS
    • 키페어: 보안 키페어, 인스턴스에 접근하기 위해 필요한 보안키
    • 인스턴스 스토어 볼륨: 임시 저장소
    • Amazon Elastic Block Store: 저장 디스크 공간
    • 리전, 가용 영역: 데이터센터가 위치한 지역, 하나의 리전 안에 물리적 구역을 나누어 따로 관리하는 서버존, 서울 리전은 2개의 가용 영역이 있다
    • 보안 그룹: 접속 가능한 규정을 정하는 내용
    • Public IP, Private IP: 외부에서 접속 가능한가, 아닌가
    • VPC(Virtual Private Cloud): 내부망에서 접속 가능하도록 만든 가상의 공간

S3

  • 로컬 내에 작성한 클라이언트 코드의 .env를 작성한다
  • URL 뒷 부분에 http:// 를 넣고 저장한다
  • client 폴더 내에서 npm run build로 빌드를 작성한다
  • AWS S3 메인 화면에 접속, 버킷 만들기 클릭 후 버킷 이름 기입 후 버킷 만들기 버튼 클릭
  • 버킷 생성 완료 후 속성 탭, 정적 웹사이트 호스팅 활성화 체크, 호스팅 유형 정적 웹 사이트 체크
  • 인덱스 문서 및 오류 문서 index.html로 작성 후 변경 사항 저장 클릭
  • 정적 웹사이트 호스팅 아래 엔드포인트 클릭하여 연결 확인
  • 버킷의 객체 메뉴 클릭 후, 업로드 버튼 클릭하여 생성한 빌드 파일의 폴더 내부 파일을 드래그&드랍으로 추가(빌드 폴더 통째로 넣으면 제대로 업로드되지 않음, 주의), 업로드 버튼 클릭
  • 업로드 성공 후 버킷 클릭하여 상세에서 권한 메뉴 클릭, 퍼블릭 엑세스 차단 전부 해제 후 변경 사항 저장 클릭
  • 버킷 정책 편집 클릭, 정책 생성기로 정책 생성
    • Policy: S3 bucket policy
    • principal: *
    • Actions: GetObject 체크
    • ARN: arn:aws:s3:::<버킷 이름>/* 작성 후 엔터
    • add statement 버튼 클릭
  • 작성된 정책 복사하여 정책 내 코드편집기에 붙여 넣기 후 변경 사항 저장 클릭
  • 이후 버킷 웹 사이트 엔드포인트 클릭하면 업로드한 웹페이지(리액트 페이지) 정상적으로 출력됨

0개의 댓글