ko ko en en de ko en ko ko en ko ko la ko ko en ko en ko tr ko en ko en ko en ko pl ko ko ko ko en ko en en en en ko ko ko ko en ko en ko ko ko en en ko en en ko ko en ko
배포전 개발환경 분할하기 · 초보 웹 프로그래머
Home About Algorithm Aws Book Deploy Django Docker Restful Git Html&Css IntroducingPython Other Project SQL UiPath
07 Mar 2018 • Deploy
개발 환경을 local, dev, production 으로 분할 해보자
# local.py, dev.py Debug = True # production.py Degub = False
ALLOWED_HOSTS 도 각 환경에 다 넣어 준다. INSTALLED_APPS도 각 환경마다 따로 설정 할 수 있지만, 지금은 수정하지 않는다. DATABASES도 환경에 따라 다 넣어 준다. 넣어 주기 전에 DATABASES의 내부 값들은 보호되어야 하므로 .secrets폴더의 각 환경에 맞는 설정파일로 빼서 사용하자.
그리고 local.py를 셋팅 모듈이 되도록 해보자.
manage.py에 Django의 셋팅 모듈은 config.settings가 기본으로 되어 있다. 하지만 우리는 config.settings를 모듈이 아닌 패키지로 만들어 놓았다. 로컬에서는 local postgresql을 사용하고 배포 환경에서는 S3 posrgresql을 사용하게 만들어야 한다. 현재 셸 환경에서 환경 변수를 설정 해보자
이렇게 하고 env로 확인해보면 현재 셸의 환경 변수에 등록 되어 있는것을 볼수 있다. 이제 이 환경에서 ./manage.py를 실행하게 되면 DJANGO_SETTING_MODULE이 있기 때문에 기본 모듈인 config.settings를 사용하지 않고 우리가 방금 지정해준 config.settings.local을 사용하여 실행하게 된다. 이후 ./manage.py를 실행하면 SECRET_KEY가 비어 있다고 나온다. 왜냐하면 각 local.py에는 해당 변수가 없기 때문이다. 물론 다른 환경도 마찬가지이다. base.py를 불러 와보자
# local, dev, production.py from .base import *
그리고 base.py에서 또 오류가 날것인데 이것을 수정 해보자. 오류가 나는 이유는 base.py에서 BASE_DIR의 기준이 달라졌기 때문이다. BASE_DIR을 한단계 더 밖으로 나오게 설정하자.
이제 각 환경 별로 DATABASES를 설정 해 주어야 한다. 그 전에 base.py에 각 환경별 .secrets/.json파일을 읽어와야 한다.
# base.py SECRETS_LOCAL = os.path.join(SECRETS_DIR, 'local.json') SECRETS_DEV = os.path.join(SECRETS_DIR, 'dev.json') SECRETS_PRODUCTION = os.path.join(SECRETS_DIR, 'production.json')
# local.py secrets = json.loads(open(SECRETS_LOCAL, 'rt').read()) DATABASES = secrets['DATABASES'] # dev.py secrets = json.loads(open(SECRETS_DEV, 'rt').read()) DATABASES = secrets['DATABASES'] # production.py secrets = json.loads(open(SECRETS_PRODUCTION, 'rt').read()) DATABASES = secrets['DATABASES']
그런데 생각해보니 local에 postgresql을 만든적이 없다. 만들어 보자.
sudo -u postgres createdb ec2_deploy --owner=
sudo -u postgres createuser -P -s
그리고 셸을 개발 환경별로 셋팅해놓고 마이그레이션을 확인해보자 local은 아무것도 안되어 있을 것이고 dev는 마이그레이션이 되어 있는것이 보인다. local의 경우 방금 db를 생성하고 마이그레이션을 안해 주었기 때문이고 dev는 이미 S3에 마이그레이션을 했었기 때문이다.
그리고 deploy-ec2를 해보자 그러면 또 SECRET_KEY가 없다는 에러가 날 것이다 ㅠㅠ 끄어어 서버의 셸에도 환경 변수를 설정 해줘야 하는데 그런 방법은 없다. 하지만 config/settings/wsgi.py안에 환경 변수를 셋팅하는 부분이 있다. 이것을 사용하여 각 환경에 맞게 환경변수를 할당 시켜보자. 결국 wsgi.py도 환경별로 만들어야 한다는 소리다. 후.. wsgi.py를 패키지로 만들고 각 환경에 맞는 파이썬 소스를 추가 한다.
# 각 환경별로 코드 수정 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local/dev/production")
수정후 .config/uwsgi.ini파일의 module을 각 환경에 맞게 수정 해 주어야 한다. 그리고 deploy.sh에 bash가 실행되기 전 export로 해당 셸에 환경 변수를 설정해 줘야 한다. 이유는 이전에 export로 설정해준 환경 변수(settings.local 등)는 ./manage.py를 실행 할 때만 적용 되는 것이고 deploy.sh를 실행 할때는 적용 되어 있지 않기 때문이다.
# .config/deploy.sh export DJANGO_SETTINGS_MODULE=config.settings.dev
이후 deploy 하면 잘 되는 것을 볼 수 있다.
comments powered by Disqus.
Poetry 1.2.0 업데이트로 인한 Docker Install Error 16 Sep 2022
Elastic Beanstalk에 Docker-compose를 이용하여 Django 배포 10 Apr 2019
Elastic Beanstalk에 Docker를 이용하여 Django 배포 09 Apr 2019
AWS ELB 상에서 WebSocket 통신하기 05 Apr 2019
EC2에 docker-compse(django nginx uwsgi postgres) 04 Apr 2019
EC2에 redis-server, nginx, supervisor 설치 02 Apr 2019
EC2에 docker(django nginx uwsgi supervisor) 02 Apr 2019
프로젝트 생성부터 배포까지 01 Apr 2018
배포전 개발환경 분할하기 07 Mar 2018
Storage설명 07 Mar 2018
Sentry 07 Mar 2018
RDS설정 07 Mar 2018
Nginx와 Staticfile 설정 07 Mar 2018
Django Storage 2 07 Mar 2018
Django Storage 1 07 Mar 2018
배포 스크립트 07 Mar 2018
AWS CLI와 Boto3를 이용한 S3버켓 만들기 07 Mar 2018
Django와 Deploy 02 Mar 2018
AWS의 EC2에 UWSGI Django 연결 02 Mar 2018