저번에는 aws console에서 배포해봤으니 이제는 cli로 배포해보고자 한다.
1. awsebcli 설치
이전 글에서 python3.9.16을 사용했었다.
근데, EB에서는 파이썬 버전을 3.8까지만 지원하기 때문에 패키지 충돌이 날것이 뻔했다.
그래서 가상환경을 쓰는 것을 추천한다.
패키지 충돌없이 우회하는 방법이 있는데,
기존에 프로젝트를 돌리던 가상환경과 별개로
나같은 경우에는 conda 3.8버전으로
pip install awsebcli
이것만 설치한 가상환경을 생성해서 배포할때만 이 가상환경을 실행했다.
그러니까 배포용으로만 쓰는것 ㅋㅋㅋㅋ 그럼 패키지 충돌 없잖아~ 개꿀~
(솔직히 파이썬 3.8까지만 지원하는게 문제 아닌가...? 지금 3.11까지 나와있는데 뭔 아직 3.8이야...)
2.
Docker를 쓰니까 Dockerfile과 Dockerrun.aws.json 파일을 준비한다.
(dockerfile이 아니라 Dockerfile로 해야 인식한다.)
# Dockerfile
FROM python:3.9.16
MAINTAINER jihoon
ENV PYTHONUNBUFFERED=0
ENV PYTHONIOENCODING=utf-8
RUN mkdir -p /home/ubuntu/mysite
RUN mkdir -p /home/ubuntu/log/gunicorn/mysite
ADD . /home/ubuntu/mysite
WORKDIR /home/ubuntu/mysite
RUN apt-get -y update && apt-get install -y \sudo \wget \libgl1-mesa-glx \libxml2-utils
RUN python3 -m pip install --upgrade pip
RUN pip3 install -r package-1.txt
EXPOSE 8000
CMD ["sh", "on-container-start.sh"]
도커파일에는 Django와 Gunicorn 패키지 설정을 했다.
# on-container-start.sh
gunicorn --bind 0.0.0.0:8000 --reload mysite.wsgi:application
sh 파일은 하고 싶은 실행 명령어를 적어두는 파일로 생각하면 된다.
gunicorn을 돌리고 싶어서 명령어를 썼다.
# Dockerrun.aws.json
{ "AWSEBDockerrunVersion": "1",
"Image": {
"Name": "web",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 8000,
"HostPort": 8000
}
]
}
내 Dockerrun.aws.json 파일은 Docker 이미지를 1개만 만드니까 이렇고 Docker-compose.yml을 쓰는 건 다른 방식이 있다.
이렇게 작성하고
3. eb cli 실행
# eb 초기화 및 application 선택
eb init
# application을 만들었으면 application안에 들어갈 환경을 만들어야함(한 어플리케이션 안에 환경 여러개를 만들 수 있음)
eb create 환경이름
# 업데이트 후 재배포 할 때
git add .
git commit -m "test: test"
eb deploy
참고로 github를 쓰고 있었다면 git add . commit으로 현재 작성내역을 commit해놔야 eb 변경내역도 저장된다
(이거 몰라서 한참 답답했음)
4. eb status
> eb status
CNAME: 쏼라쏼라.ap-northeast-2.elasticbeanstalk.com
해당 명령어를 치면 Cname이 나오는데, 이걸 django allowed_host에 넣어줘야한다.
그리고 재배포 한다.
git add .
git commit -m "재배포"
eb deploy
그럼 postman으로 테스트를 해본다.
http://cname/{테스트할 api 주소}
해서 테스트를 해보시라
참고로 python으로 그냥 배포하신 분들은
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: mysite/wsgi.py
이거 많이 쓰셨을 텐데, 도커로 배포할때는 이거 안쓰고 위에서 Dockerfile, Dockerrun.aws.json을 대신해서 쓴다.
Docker-compose할때는
"AWSEBDockerrunVersion": "2",
Docker는 1, Docker-compose는 2
로 설정이 조금씩 다르니까 내가 어떤걸로 배포하고 싶은지를 명확히 알고 검색해야 빨리 eb 배포를 할 수 있을것이다.
(공식문서 참조하자!)
이제 다음글에서는 alb 붙여서 80, 443 포트 포워딩 그리고 acm 이용해서 https 설정, route53 가비아 붙여서 도메인설정까지 해볼 예정이다.
'AWS > ElasticBeanstalk' 카테고리의 다른 글
AWS Elastic Beanstalk - (6) (0) | 2023.02.20 |
---|---|
AWS Elastic Beanstalk - (5) (0) | 2023.02.19 |
AWS Elastic Beanstalk - (4) (0) | 2023.02.18 |
AWS Elastic Beanstalk - (3) (0) | 2023.02.16 |
AWS Elastic Beanstalk - (1) (0) | 2023.02.14 |