이 글은 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
어떤 분들은 아마 '힌트'만 필요할 수도 있을 것 같다. 내가 모든 케이스를 일일이 조사하진 않았지만 다음과 같은 지점들을 의심했고 나는 마침내 아래와 같은 화면을 출력했다.
공식문서를 아주 세심히 따라가면 일단 띄울 순 있...지만 참... aws 문서는 영 정이 가지 않는 듯.
공식 문서에서 설명하는 것처럼, 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) # 난 정확히 이렇게 나왔다
여기서부턴 공식 매뉴얼을 따라가면 잘 된다.
그런데 가이드에서는 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
위 세팅 기준으로 설명한다.
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
라는 형태로 소개하고 아래쪽에 추가로 "이 예제는 구버전이예용"라고 알려주는데 대체 이게 무슨 농간인지 모르겠다.
이후 파트는 공식 매뉴얼의 해당 파트와 완벽히 일치하므로 생략. IAM user 하나 만드는 거 잊지 말고!
만약 이 폴더가 깃헙 레포라면 Code Commit도 한번 물어보는 거 같은데, 잘 모르면 그냥 no 해도 된다. 디폴트가 최고야
이 글을 읽는 당신도 꼭 이 화면을 보길... 😉
https://velog.io/@_gyullbb/Elastic-Beanstalk-배포#배포-방법-2-elastic-beanstalk : 이 블로그에선 유례를 찾아보기 어려울 정도로 상쾌하게 wsgi의 역할을 설명했다. 글을 정리하는 부분도 매우 본받을만하다.
아마도 python 3.9와 django 3.x를 사용한게 잘 안되었던 이유인 듯...
https://github.com/aws/aws-elastic-beanstalk-cli-setup/issues/82