settings.py 분리
개발과정에서 settings.py와 개발이 끝난 후 소스를 운영서버에 배포하는 경우에 settings.py 가 달라지기 때문이다.
(SECRET_KEY, DEBUG, ALLOWED_HOSTS, DATABASES 를 변경할 것)
1. mysite 아래 settings python package를 생성
: settings 밑에는 기존의 settings.py를 (1) base.py, (2) develop.py, (3) product.py 로 분리할 것이다.
(1) 공통항목, (2) 개발모드에서만 필요한 항목들, (3) 운영모드에서만 필요한 설정항목들
2. 기존의 settings.py를 mysite/settings 아래로 cut/paste 후 이름을 base.py로 변경해준다.
3. 파일의 위치가 한단계 밑으로 내려왔기때문에 BASE_DIR을 변경한다.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
:이렇게해야 BASE_DIR이 backend를 가리킨다.
4. 개발모드와 운영보드에서 다르게 설정할 항목들은 base.py에서 지워준다.
(SECRET_KEY, DEBUG, ALLOWED_HOSTS, DATABASES)
5. mysite/settings/develop.py 와 mysite/settings/product.py 생성
6. develop.py
from .base import *
SECRET_KEY = 'base.py에서 삭제한 시크릿키'
DEBUG = True
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
django에서는 DEBUG가 True면 개발모드, False면 운영모드로 인식한다. 개발모드에서는 ALLOWED_HOSTS를 공백으로 둬도 괜찮은데 공백으로 두면 django는 ALLOWED_HOSTS=['localhost', '127.0.0.1'] 로 인식한다.
7. product.py
import os
from .base import *
SECRET_KEY = os.environ['SECRET_KEY']
DEBUG = False
#AWS EXAMPLE
ALLOWED_HOSTS = ['.elasticbeanstalk.com']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['DATABASE_NAME'],
'USER': os.environ['DATABASE_USER'],
'PASSWORD': os.environ['DATABASE_PASSWORD'],
'HOST': 'django-mysql.ap-northeast-2.rds.amazonaws.com',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
민감한 정보는 환경변수로 가져온다. 운영모드에서는 ALLOWED_HOSTS를 반드시 적어주어야한다.
8. settings를 호출하는 부분을 변경
개발모드는 manage.py에서 호출해주고 운영모드는 wsgi.py에서 호출해준다.
manage.py
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings.develop')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
develop.py를 호출하도록 바꾸어준다 : mysite.settings.develop
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings.product')
application = get_wsgi_application()
product.py를 호출하도록 바꾸어준다 : mysite.settings.product
'웹 프로그래밍' 카테고리의 다른 글
[Django Tutorial] Blog 만들기 (9) (0) | 2021.04.20 |
---|---|
[Django Tutorial] Blog 만들기 (8) (0) | 2021.04.20 |
[Django Tutorial] Blog 만들기 (6) (0) | 2021.04.19 |
[Django Tutorial] Blog 만들기 (5) (0) | 2021.04.19 |
[Django Tutorial] Blog 만들기 (4) (0) | 2021.04.19 |