개인 프로젝트를 시작하고 배포를 어떤식으로 할까 생각해보다가 EB가 간단해 보여서 사용해보고자 한다.
참고로 EB, Docker를 통해 배포했으며, python version은 3.9.16이었다.
Docker를 쓴 이유는 EB에서 제공하는 Python 버전이 3.8까지었나 해서 내 버전으로는 배포되기 어렵다고 판단했다.
왜냐면 pip install awsebcli 할 때 터질거기 때문... ㅋㅋㅋ; 패키지 충돌 뻥뻥~
그래서 도커로 했다.
근데, 도커 + EB 로 하면 ECS랑 비슷하게 사용하는 방식으로 느껴졌다.
하지만, 난이도는 도커 + EB 가 훨씬 쉽다.(초보자에게 추천!)
1.
우선 장고 root 디렉토리에 다음과 같이 만든다.
.github 처럼 저런 디렉토리 경로를 만들어주면 알아서 인식하는 방식인것 같다.
django.config에 쓸 내용이다.
참고로 억지로 띄어쓰기나 탭을 하면 에러가 난다. EB 기본 포맷으로 써야한다.
여기서 mysite는 settings.py가 있는 디렉토리(애플리케이션이름)이다. 만약 prod, local 등 배포를 구분해놨으면 여기도 분리시켜야한다.
공식설명서에는 mysite.wsgi:application 로 설명하는데, 이건 구버전이랜다.
아래처럼 해야 신버전이다.
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: mysite/wsgi.py
2.
그리고 도커파일을 작성하자.
(참고로 도커를 안쓴다면, 설치한 python package를 담아두는 txt파일명은 requirements.txt로 해야한다. 왜냐면 EB 규칙이 그렇기 때문) -> 나는 도커 쓰니까 패키지도 내가 깔아서 쓰기 땜시 package.txt로 했음
FROM python:3.9.16
ENV PYTHONUNBUFFERED=0
ENV PYTHONIOENCODING=utf-8
RUN mkdir -p /home/ubuntu/mysite
RUN mkdir -p /home/ubuntu/log/uwsgi/mysite
ADD . /home/ubuntu/mysiteWORKDIR /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.txt
EXPOSE 8000
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
2-1.
도커파일을 만들었으면 테스트를 해보자
다음처럼 빌드를 해주자
docker build -t {태그이름} .
만약 dockerfile이 dev, local 막 나눠져 있으면 아래처럼 도커파일명을 지정해주면 된다.
docker build -t {태그이름} . -f Dockerfile.dev
그리고 돌려보자
docker run {태그명}
3.
테스트가 끝났으면 모든 파일들을 압축한다.
파일을 압축하면 mac은 아카이브.zip이라는 디폴트 이름으로 생성될텐데 저걸 EB 배포할 때 넣어버리면 된다.
4.
이제 AWS 콘솔을 켜서 EB를 검색해서 들어가자
물론 IAM 설정은 스킵한다.
나는 테스트로 하기 때문에 사용자에 권한을 accesspoweruser로 주고 퉁쳤다. 젤 간단한데, 만약 prod 레벨로 쓸거라면
ec2, s3, ecr, ecs 등 각자 권한을 설정해서 써야할것이다.
Create Application을 누르고 생성해보자.
이름도 지정하고(만약 이거를 githubaction으로 배포할때는 애플리케이션이름, 환경이름을 써야할것이다.)
이건 다음글에서 작성할 예정
그리고 플래폼을 도커로 지정한다.
여기서 ECS로 쓸 수도 있어보이는데, 이거는 잘모르겠다.
코드 업로드를 누르고 버전을 지정한다. v1.0.0 처럼 넣었었다.
파일 선택을하고 방금 만들었던 아카이브.zip파일을 넣으면 시간 지나서 알아서 배포가 된다.
위처럼 v표시가 나오면 성공적으로 배포가 된것이다.
그럼 eb에서 만든 도메인을 던저준다.
포스트맨에서 테스트를 해보자.
RESTAPI가 정상적으로 call이 되었다면 성공!
다음 글에서는 nginx, docker-compose, 도메인설정 등을 추가해야겠다~
'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 - (2) (0) | 2023.02.15 |