Elastic Beanstalk으로 django 배포하기

Roeniss Moon·2020년 11월 15일
0

이 글은 2020년 11월 16일 테스트한 결과를 바탕으로 작성되었음

개발 환경

❯❯❯ neofetch
                    'c.          roeniss@MacBook-Pro.local 
                 ,xNMM.          ----------------------- 
               .OMMMMo           OS: macOS Catalina 10.15.6 19G2021 x86_64 
               OMMM0,            Host: MacBookPro16,1 
     .;loddo:' loolloddol;.      Kernel: 19.6.0 
   cKMMMMMMMMMMNWMMMMMMMMMM0:    Uptime: 9 hours, 9 mins 
 .KMMMMMMMMMMMMMMMMMMMMMMMWd.    Packages: 159 (brew) 
 XMMMMMMMMMMMMMMMMMMMMMMMX.      Shell: zsh 5.7.1 
;MMMMMMMMMMMMMMMMMMMMMMMM:       Resolution: 2048x1280@2x 
:MMMMMMMMMMMMMMMMMMMMMMMM:       DE: Aqua 
.MMMMMMMMMMMMMMMMMMMMMMMMX.      WM: Quartz Compositor 
 kMMMMMMMMMMMMMMMMMMMMMMMMWd.    WM Theme: Yellow (Dark) 
 .XMMMMMMMMMMMMMMMMMMMMMMMMMMk   Terminal: Apple_Terminal 
  .XMMMMMMMMMMMMMMMMMMMMMMMMK.   Terminal Font: MesloLGS-NF-Regular 
    kMMMMMMMMMMMMMMMMMMMMMMd     CPU: Intel i9-9980HK (16) @ 2.40GHz 
     ;KMMMMMMMWXXWMMMMMMMk.      GPU: Intel UHD Graphics 630, AMD Radeon Pro 5300M 
       .cooc,.    .,coo:.        Memory: 14198MiB / 32768MiB 

당신의 빈스톡이 502, 404만 띄우는 이유

어떤 분들은 아마 '힌트'만 필요할 수도 있을 것 같다. 내가 모든 케이스를 일일이 조사하진 않았지만 다음과 같은 지점들을 의심했고 나는 마침내 아래와 같은 화면을 출력했다.

  • 혹시 django 3.x 를 지원하지 않는 건가?
  • 가상환경이 의무인가?
  • 특정 파이썬 버전을 필요로 하나?

공식문서를 아주 세심히 따라가면 일단 띄울 순 있...지만 참... aws 문서는 영 정이 가지 않는 듯.

환경 세팅

eb cli 설치

공식 문서에서 설명하는 것처럼, https://github.com/aws/aws-elastic-beanstalk-cli-setup 를 따라 설치를 진행한다. brew install awsebcli는 설치 중 내부 테스트코드 오류가 발생한 것으로 보아, 문제가 있다고 판단했다. (권장하는 설치 방식을 따를 경우 python 3.7을 강제로 설치하는데, 내가 3.9를 쓰고 있어서 발생한 오류가 아닐까 하고 생각중)

아, 당연히 내 환경인 macOS 10.15.6 기준이다.

# ref: https://github.com/aws/aws-elastic-beanstalk-cli-setup/issues/84 
brew install zlib && brew reinstall zlib
brew install pyenv
pyenv install 3.7.2

# 위 깃헙에서 요구하는 Prerequisites
# Xcode 설치
# 추가로 App Store에서 xcode도 설치/업데이트
xcode-select --install 
brew install openssl zlib readline
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib"

# 이후 깃헙에 안내된대로 설치 진행
mkdir ~/tmp && cd ~/tmp
git clone https://github.com/aws/aws-elastic-beanstalk-cli-setup.git
./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer

이후 신나게 자기 알아서 eb를 설치하고, 추가로 입력할 커맨드를 알려준다. Bash인지 zsh인지에 따라서 잘 타이핑하자. (총 두 개 타이핑 해야함! 각각 .ebcli-virtual-env, python3.7.x)

⚠️ 위 커맨드까지 타이핑하면 이제 꼼짝없이 파이썬 3.7을 강제로 써야한다. 나는 eb를 잘 안쓰니까 그냥 필요할 때만 쓰면 되는데... 다른 파이썬 버전을 같이 쓰는 분들은 매번 이 노가다(?)를 하지 않도록 알아서 잘 세팅하시길!

# 정상 설치 확인
eb --version
EB CLI 3.19.2 (Python 3.7.2) # 난 정확히 이렇게 나왔다

django 세팅

여기서부턴 공식 매뉴얼을 따라가면 잘 된다.

그런데 가이드에서는 virtualenv로 가상환경을 세팅했는데 (가상환경 세팅하는 건 그냥 패키지 관리 때문임. 별 이유 없어 보임) 나는 python 3.9 공식 매뉴얼에 있는 venv로 가상환경을 세팅했다. 그 부분은 편한대로 하시면 될 듯.

mkdir ~/tmp && cd ~/tmp
python3 -m venv my-env
cd my-env
source ./bin/activate
pip install django==2.1.1 # ⚠️ 버전이 꽤 중요한 것 같다
django-admin startproject mydjango
cd mydjango
# 현재 폴더에서 `manage.py`가 바로 보여야 함
# 이후 로컬에서 실행 확인
python manage.py runserver
deactive

django 배포 세팅

위 세팅 기준으로 설명한다.

cd ~/tmp/my-env/mydjango
pip freeze > requirements.txt
mkdir .ebextensions
# 이 아래 명령어가 무서우면 그냥 공식 설명서 보고 똑같이 따라하면 됨. 아래의 '코드 복붙 설명 방식'은 쿠버네티스 공식 설명서에서 많이 보이길래 해봤음
cat <<EOF > ./.ebextensions/django.config
option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: mydjango/wsgi.py
EOF

위 명령어까지 다 실행하면 (똑같이 따라했다면) ~/tmp/my-env/mydjango/.ebextensions/django.config가 만들어지는데, 안에 3줄이 적혀있다. 그 중 마지막 줄 "mydjango"는 자신의 application name과 똑같이 맞춰줘야 된다.

공식 설명서에서는 이걸 mydjango.wsgi:application라는 형태로 소개하고 아래쪽에 추가로 "이 예제는 구버전이예용"라고 알려주는데 대체 이게 무슨 농간인지 모르겠다.

eb 배포

이후 파트는 공식 매뉴얼의 해당 파트와 완벽히 일치하므로 생략. IAM user 하나 만드는 거 잊지 말고!

만약 이 폴더가 깃헙 레포라면 Code Commit도 한번 물어보는 거 같은데, 잘 모르면 그냥 no 해도 된다. 디폴트가 최고야

이 글을 읽는 당신도 꼭 이 화면을 보길... 😉

추가 사항

좋은 링크

https://velog.io/@_gyullbb/Elastic-Beanstalk-배포#배포-방법-2-elastic-beanstalk : 이 블로그에선 유례를 찾아보기 어려울 정도로 상쾌하게 wsgi의 역할을 설명했다. 글을 정리하는 부분도 매우 본받을만하다.

후일담

아마도 python 3.9와 django 3.x를 사용한게 잘 안되었던 이유인 듯...

eb cli 삭제 방법

https://github.com/aws/aws-elastic-beanstalk-cli-setup/issues/82

profile
기능이 아니라 버그예요

0개의 댓글