Django-Deploy_EC2(elasticbeanstalk)

본 문서는 패스트캠퍼스 ‘Web-Programming School’ 수업 자료를 바탕으로 작성되었습니다.


summary


Browser -> EC2 -> Nginx -> uWSGI -> Django
Browser -> EC2 -> Docker -> DockerContainer -> Nginx -> uWSGI -> Django
Browser -> EB -> Nginx -> docker run (자동)
                            -> Dockerfile -> DockerContainer(EB-Nginx)
                                      -> EXPOSE 첫 번째 포트
EC2
  AmazonLinux
    Nginx
    Docker
    배포 스크릡트 - Dockefile or Dockerrun.aws.json
      Dockerfile을 사용해서  DockerImage생성
      생성한 이미지를 run
      갖고있는 Nginx와 이미지를 실행한 컨테이너를 연결

    우리가 생성한 스크립트와의 연결 설정 파일
     .elasticbeanstalk/config.yml
     Dockerfile

EB (ELB -> AotoScaling -> EC2 ->Application(Docker))
AotoScaling: 생길  수도 있고 없어질 수도 있다는 의미

- 부하가 많아지면 EC2가 추가적으로 생긴다.
Browser -> EBL -> EC2
               -> EC2

elasticbeanstalk

  • 무엇인지

환경셋팅

eb-docker-deoploy /
        .git, .gitignore
        pyenv
        .secrets/ base.json
        app /
            config/
                  settings/
                         __init__.py
                         base.py
                         local.py
                         dev.py
                         production.py
                  wsgi/
                         __init__.py
                         local.py
                         dev.py
                         production.py

Dokcer build

>> docker build -t eb-docker:base -f Dockerfile.base .
>> docker tag eb-docker:base <Docker hub ID>/<Docekr hub 저장소 이름>
>> docker push <Docker hub ID>/<Docekr hub 저장소 이름>

EB init

>> eb init --profile <profile name>

EB create

EB deploy


summary


eb deploy

  ---local 에서 작동
  1. 로컬 Git에서 git archive명령을 사용해서 소스코드 압축파일 생성
  2. 소스코드를 eb용 S3에 업로드

  ---ec2에서 작동
  3. 동작하고있던 EC2에 해당 소스코드를 다운로드
  4. 소스코드에 포함된 Dockerfile을 실행
  5. 생성된 이미지를 사용해서 container 실행
  6. EC2 의 Nginx에 Container를 프록시 연결
    - 우리의 스크립트 파일을 넣어 줄수 없기 때문에 이때 EB command(files 옵션)를 사용한다.
    /opt/elasaticbenastalk/hooks/appdeploy/<시점>/<스크립트파일>

EB extensions

  • commands : 소스 파일이 없기전에 실행 된다.
  • container_commands : 애플리케이션 버전 아카이브의 압축을 푼 후에 애플리케이션 버전을 배포하기 이전에 실행된다.leader_only 옵션이 있으면 EC2가 여러개일 때, 이 옵션이 들어있는 인스턴스에만 명령이 실행된다.

EB command -files

files 키를 사용하여 EC2 인스턴스에서 파일을 생성할 수 있다. 콘텐츠는 구성 파일의 인라인이거나 URL에서 내용을 가져올 수 있다. 파일은 사전 순서로 디스크에 작성한다.

플랫폼 후크

수명 주기 이벤트 중, 관리작업(인스턴스가 시장될때 혹은 배포 초기화 할때) 응답할 때 실행되는 스크립트.

appdeploy

애플리케이션을 배포할 때 실행되는 스크립트. 새 인스턴스가 시작 될 때와 클라이언트에서 새 배포 버전을 초기화 했을 때, 스크립트가 실행됨