[Sprint # 13] Deploy

홍영란·2020년 2월 17일
0

Immersive🧗🏻‍♀️

목록 보기
12/13

Reference

컴파일, 빌드, 배포의 개념 및 차이


Prerequisite

  1. 일반적인 블로그 서비스의 시스템 아키텍쳐를 간단하게나마 그릴 수 있다.(클라이언트, 서버, 데이터베이스 추상화)
    ⭐️ Web Application Architecture: Definition, Models, Types
    ⭐️ The Fundamentals of Web Application Architecture

Keywords

1. Cloud

[AWS] 클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 on-demand(요구하는 즉시)로 제공하고 사용한 만큼만 비용을 지불하는 것
※ 물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신, Amazon Web Services(AWS)와 같은 클라우드 공급자로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 액세스할 수 있습니다.

2. Deploy

빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일

  • local host가 아니라 누구나 어디서든 접속할 수 있는 public link로 만드는 것

3. S3

  • Simple Storage Service의 약자로 파일 서버의 역할을 하는 서비스

4. EC2

  • Elastic Compute Cloud의 약자
  • 한대의 컴퓨터를 임대해주는 것
    • 여기에 자신이 선호하는 운영체제를 설치하고, 웹서비스를 위한 프로그램들(웹서버, 데이터베이스 등)을 설치
  • EC2

5. RDS

  • Relational Database Service의 약자로 아마존 웹서비스에서 제공하는 데이터베이스 전용 서비스
    • 데이터베이스를 운영 하기 위해서 필요한 복제, 백업, 장애복구와 같은 작업을 대행
    • 지원되는 데이터베이스
      : MySQL, Oracle, SQL Server

Sprint - Deploy

Achievement Goals

  1. Cloud와 Deployment의 의미를 각 각 알고, 내 코드를 남에게 배포할 수 있다.
  2. 최소 AWS 서비스 블럭 에서 3개 이상의 서비스를 활용 하고, 설명 할 수 있다.(S3, EC2, RDS)
  3. ssh를 무엇을 위해 활용 하는지 알고, 다른 컴퓨터에 원격 접속 한다는 것의 의미를 설명할 수 있다.
  4. 보안을 위하여 github에 올리지 말아야 할 코드를 gitignore로 따로 분류 할 수 있다.

1. Practice Deploy Shortly Express to Cloud

: Shortly Express AWS 서비스 블락을 활용해서 배포

Client - Shortly Express React Client 빌드 파일을 S3에 배포

  1. React Build
    CLI에서
    1) cd client
    2) yarn start
    3) yarn build: js, html 파일을 webpack을 통해 합쳐서 하나의 정적파일로 제공
  2. Create Bucket
    AWS Management Console에서
    1) 버킷 만들기
    2) 설정 - 버킷 public으로 만들기
    정적 웹사이트 호스팅: 이 버킷을 사용하여 웹사이트를 호스팅
    - 인덱스 문서: index.html(endpoint)
    - 오류 문서: index.html
  3. Public Access
    What is ARN?
    What is principal in policy?
    1) 권한 - 퍼블릭 엑세스 설정 - 기존 설정 제거
    2) 버킷 정책 - 정책 생성기: S3 bucket policy
    3) Principal: *, Actions: GetObject, ARN: 특정한 형식에 맞추어 저장
    4) 생성된 json 타입의 정책 => 버킷 정책에 붙여넣기
    5) 빌드해 두었던 정적 파일 복사하여 S3 버킷에 업로드
  • Server Application - Shortly Express API server application을 EC2에 올려서 구동
  1. Create Server Application
    배포에 사용하기 위한 기본 server application 생성
    1) npm project => install express

    localhost:5000 => deploy ?
    2) (gitHub에 해당 서버 어플리케이션 업로드) gitHub 원격저장소 활용해서 서버 어플리케이션 EC2 업로드
  2. Start Instance
    실제로 AWS 클라우드 컴퓨터인 EC2를 사용
    => 임대할 클라우드 컴퓨터 EC2 셋업
    AWS Management Console에서
    1) EC2 - instance 시작
    Ubuntu Server 18.04 이용(프리티어 사용가능)
    2) 원격 컴퓨터에 접속하기 위한 프라이빗 키 작성
  • 새 키페어 생성

  • 키 페어 이름(변경불가능=>주의해서 작성)

  • 키 페어 다운로드
    3) 인스턴스 시작(헷갈리지 않게 Name 작성)
    4) 연결 - 인스턴스에 연결
    5) CLI에서
    (linux기반) root directory에 .ssh 폴더열기
    ※ 만약 .ssh 폴더 없을 경우, mkdir .ssh로 파일 생성

    6) 다운로드 받았던 pem키를 ssh 폴더로 이동

    7) 키 파일 chmod로 권한 부여
    chmod 400 practice-server-deploy.pem

    8) 퍼블릭 DNS을(를) 사용하여 인스턴스에 연결

    • pem key & IPv4 퍼블릭 IP
      필요
      ssh -i "practice-server-deploy.pem" ubuntu@ec2-18-216-123-32
      => ubuntu에 접속
      (node, npm 설치안됨, git 만 설치된 상태, runtime이 없음)
  1. Environment Settings
    EC2에서 우리가 작성한 server Application을 구동할 수 있도록 환경을 셋팅

    1) ubuntu node, npm 설치(https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-16-04)
    (https://velog.io/@loakick/AWS-EC2-Ubuntu-18.04%EC%97%90-NodeJS-Github-Mysql-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0)
    sudo apt update
    sudo apt install nodejs
    sudo apt npm

    2) gitHub에서 shortly-express repo를 EC2 서버에 git clone

    • git clone <repo 주소>

    • dependency 설치: npm install

    • 서버 start 예시: node index.js

      ※ EC2 접속: public IP:port
      예시) 18.216.123.32:5000

3) 퍼블릭 접속위한 보안 설정 필요!

  1. Security Group
    외부에서 우리 서버어플리케이션으로 접속 할 수 있도록 보안 설정
    1) 보안그룹 인바운드 편집
  2. PM2
    터미널을 종료해도 서버가 계속 켜져 있을 수 있도록하는 proccess manager tool인 PM2
    1) pm2 global 설치
    npm install -g pm2
    sudo npm install -g pm2
    2) 서버 시작: pm2 start ()
    3) 어플리케이션 정상작동 확인: pm2 list

pm2를 이용한 Node 프로세스 관리

  • Database - 로컬 mysql을 RDS로 대체하여, server application과 연결

Install MySQL Server on the Ubuntu operating system
※ EC2 서버 시작

cd .ssh
.ssh hongyounglan$ ssh -i shortly-express.pem ubuntu@3.14.88.41
  1. mysql 접속
mysql -u <master username> --host <endpoint> -P <port number> -p
// password 입력

2. Bare Minimum Requirement

1) Deploy SPA(single page application) with Aws S3

  • S3를 이용하여 SPA를 배포

2) Deploy Node API server Application with AWS EC2

  • EC2에 Sever Application을 배포

3) Use database cloud service RDS and can connect on some client tool or CLI

  • Cloudservice RDS를 이용하여 데이터베이스를 구축하고, 클라이언트 툴 혹은 cli에서 외부접속 가능
profile
JavaScript를 공부하고 있습니다:)

0개의 댓글