본 문서는 패스트캠퍼스 ‘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
애플리케이션을 배포할 때 실행되는 스크립트. 새 인스턴스가 시작 될 때와 클라이언트에서 새 배포 버전을 초기화 했을 때, 스크립트가 실행됨