2020-10-28

Posted by karais89 on October 28, 2020

인프런에서 결제한 도커 강의 학습 및 내용 정리 진행. 이전에 도커에 대해 몇개의 강의 및 책을 학습한 적은 있어 대략적인 방식만 알고 있는 상태에서, 실제 개발에 적용 가능한지 확인을 위해 학습 중.

섹션 7. 간단한 어플을 실제로 배포해보기(테스트 & 배포 부분)

섹션 설명 & Github에 소스 코드 올리기

  1. Github에 소스 코드 푸시
  2. Travis CI에서 코드 테스트
  3. 테스트 성공시 호스트 사이트로 보내서 배포

Travis CI 설명

Travis CI는 Github에서 진행되는 오픈소스 프로젝트를 위한 CI 서비스이다.

자동으로 테스트, 빌드, 배포 할 수 있다.

흐름

로컬 Git → Github → Travis CI → AWS

Travis CI 이용 순서

Github과 Travis CI 연결

https://travis-ci.org/

https://travis-ci.com/getting_started

회원가입시 github 아이디로 회원 가입

깃헙에 올린 소스코드롤 Travis CI에서 가져오기

설정이 필요함.

  • Settings에서 만든 저장소 확인 및 체크 (없으면 기다리거나 Sync account 클릭)
  • 활성화 시켜줌. 깃헙에 소스 푸시할때마다 Travis CI에서 소스를 가져와 테스트 및 배포 가능하게 활성화.

대시보드로 이동

  • 앱을 수정하고 푸시하면 대시보드에 있는 레포가 변경되는 것을 확인 가능.
  • 설정은 .travis.yml 파일에서 함.

.travis.yml 파일 작성하기 (테스트까지)

테스트 수행 및 앱 배포를 위해 yml 파일 작성

  1. Travis CI에 도커 환경 구성, Dockerfile.dev를 이용해 도커 이미지 생성
  2. Test 수행하기
  3. AWS에 소스코드 배포하기

yml파일 구성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo: required

language: generic

services:
    - docker

before_install:
    - echo "start Creating an image with dockerfile"
    - docker build -t karais89/docker-react-app -f Dockerfile.dev .

script:
    - docker run -e CI=true karais89/docker-react-app npm run test -- --coverage

after_success:
    - echo "Test Success"
  • sudo: 관리자 권한
  • language: 언어 선택
  • services: 도커 환경 구성
  • before_install: 스크립트 실행 환경 구성
  • script: 실행할 스크립트
  • after_success: 테스트 성공후 할일

travis-ci 빌드에서 넘어가지 않음. 뭔가 문제가 있는 것으로 보이는데 무슨 문제인지는 확인 불가.

golang용 테스트 travis-ci도 실행되지 않음.

org가 아닌 com으로 접속해야 되는거 같은데? https://travis-ci.com/getting_started

참조

AWS 알아보기

https://console.aws.amazon.com/console/home

karais89work@gmail.com 있음

아이디가 없을시 가입하기.

Elastic Beanstalk 검색

https://ap-northeast-2.console.aws.amazon.com/elasticbeanstalk/home?region=ap-northeast-2#/welcome

EB란? (Elastic Beanstalk)

웹 응용 프로그램 및 서비스를 배포하고 확장하기 쉽도록 하게 하는 서비스이다.

리액트 앱을 배포할때 EB를 사용할 예정

Elastic Beanstalk 환경 구성하기

Create Application 버튼 클릭

EB에는 EC2 인스턴스, Security 그룹, Auto-Scaling 그룹 등이 존재 (로드밸런서도 제공)

.travis.yml 파일 작성하기 (배포 부분)

travis에 배포 설정 필요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo: required

language: generic

services:
    - docker

before_install:
    - echo "start Creating an image with dockerfile"
    - docker build -t karais89/docker-react-app -f Dockerfile.dev .

script:
    - docker run -e CI=true karais89/docker-react-app npm run test -- --coverage

deploy:
    provider: elasticbeanstalk
    region: "ap-northeast-2"
    app: "docker-react-app"
    env: "DockerReactApp-env"
    bucket_name: "elasticbeanstalk-ap-northeast-2-617906674571"
    bucket_path: "docker-react-app"
    on:
        branch: master
  • provider: 외부 서비스에 대한 표시 (s3, elasticbeanstalk, firebase 등)
  • region: 현재 사용하고 있는 aws 서비스가 위치한 물리적 장소
  • app: 생성된 앱 이름
  • env: 환경 이름
  • bucket_name: s3 버켓 이름 (travis에서 가지고 있는 파일을 압축해서 s3에 보낸다)

Travis CI의 AWS접근을 위한 API 생성

AWS에서 제공해주는 Secret Key를 Travis yml 파일에다가 적으면 된다.

인증을 위해서는 API Key가 필요하다.

  1. IAM USER 생성 (Identity and Access Management)
    • 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
    • IAM 검색 → 사용자 클릭 → 사용자 추가 클릭

액세스키와 비밀 액세스 키를 발급받고 travis.yml에 넣어줘야 하지만. github에서 볼수 있기 때문에 위험이 있다. 다른 곳에 써준다음에 그곳에 있는 걸 가져와야 된다.

settings에 Environment Variables를 설정해주면 됨.

1
2
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_ACCESS_KEY
  • YML 파일 맨 아래에 추가
1
EXPOSE 80
  • Dockerfile에 포트 매핑 추가

배포하는데 시간이 좀 걸림.

작업이 다 완료되면 환경 종료 클릭. (과금발생할수 있기 때문에)