ALLOWED_HOSTS
와 로컬 환경에서의 ALLOWED_HOSTS
값을 다르게 설정할 수 있어야 함ALLOWED_HOSTS
외에 DEBUG
, DATABASE
등의 항목들도 서버 환경과 로컬 환경이 다를 수 있을 것settings
디렉터리를 생성(mysite) c:\projects\mysite>cd config
(mysite) c:\projects\mysite\config>mkdir settings
settings.py
파일을 settings
디렉터리에 base.py
라는 이름으로 이동(mysite) c:\projects\mysite\config>move settings.py settings/base.py
1개 파일을 이동했습니다.
# [파일명: C:\projects\mysite\config\settings\base.py]
(... 생략 ...)
BASE_DIR = Path(__file__).resolve().parent.parent.parent
(... 생략 ...)
settings.py
파일의 위치는 C:/projects/mysite/config
인데 base.py
파일의 위치는 C:/projects/mysite/config/settings
로 디렉터리가 1 Depth 만큼 더 깊어졌기 때문에 .parent
를 한 번 더 사용하여 BASE_DIR
을 설정C:/projects/mysite/config/settings/base.py
에서 총 세번의 .parent
가 사용되었으므로 BASE_DIR
은 결국 C:/projects/mysite
가 될 것local.py
파일은 다음과 같이 작성# [파일명: C:\projects\mysite\config\settings\local.py]
from .base import *
ALLOWED_HOSTS = []
ALLOWED_HOSTS
항목을 비워 놓았음from .base import *
는 base.py
파일의 모든 내용을 사용한다는 의미local.py
파일의 내용은 base.py
파일과 동일하지만 ALLOWED_HOSTS
만 다르게 설정하겠다는 의미prod.py
파일은 다음과 같이 작성# [파일명: C:\projects\mysite\config\settings\prod.py]
from .base import *
ALLOWED_HOSTS = ['3.35.153.92']
prod.py
파일에는 서버 환경에 맞게끔 ALLOWED_HOSTS
항목에 서버의 고정 아이피를 등록mysite/config
디렉터리의 구조는 다음과 같을 것settings.py
파일을 읽지 못했기 때문(mysite) c:\projects\mysite>python manage.py runserver
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "C:\venvs\mysite\lib\site-packages\django\core\management\__init__.py", line 401, in
(... 생략 ...)
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
python manage.py runserver
뒤에 --settings=config.settings.local
라는 옵션을 주면 장고 서버가 잘 동작하는 것을 확인할 수 있음--settings
옵션은 장고 서버가 읽어야 할 설정파일을 지정하는 옵션--settings=config.settings.local
의 의미는 장고 서버의 설정 파일로 config\settings\local.py
파일을 읽으라는 뜻(mysite) c:\projects\mysite>python manage.py runserver --settings=config.settings.local
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 23, 2020 - 20:47:17
Django version 3.0.4, using settings 'config.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
DJANGO_SETTINGS_MODULE
환경 변수를 이용하는 방법DJANGO_SETTINGS_MODULE
환경 변수는 장고 서버 실행 시 사용하는 --settings=config.settings.local
옵션을 대신함(mysite) c:\projects\mysite>set DJANGO_SETTINGS_MODULE=config.settings.local
(mysite) c:\projects\mysite>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 23, 2020 - 20:49:15
Django version 3.0.4, using settings 'config.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
set DJANGO_SETTINGS_MODULE=config.settings.local
명령으로 DJANGO_SETTINGS_MODULE
환경 변수를 설정하고, python manage.py runserver
명령처럼 --settings=config.settings.local
옵션 없이 장고 서버를 실행하면 --settings
옵션을 사용할 때와 동일하게 작동함을 확인할 수 있음Tip!
mysite.cmd
DJANGO_SETTINGS_MODULE
환경 변수를 mysite.cmd
파일에 추가하면 더욱 편리하게 개발 환경에서 장고 서버를 구동할 수 있음# [파일명: C:\venvs\mysite.cmd]
@echo off
cd c:/projects/mysite
set DJANGO_SETTINGS_MODULE=config.settings.local
c:/venvs/mysite/scripts/activate
mysite.cmd
파일로 가상 환경에 진입하면 DJANGO_SETTINGS_MODULE
환경 변수가 자동으로 설정되므로 별다른 설정 없이 python manage.py runserver
명령으로 서버를 실행할 수 있음C:\Users\pahkey>mysite
(mysite) c:\projects\mysite>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 23, 2020 - 20:49:15
Django version 3.0.4, using settings 'config.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
(mysite) c:\projects\mysite>git add *
(mysite) c:\projects\mysite>git commit -m "settings 변경"
(mysite) c:\projects\mysite>git push
ubuntu@ip-172-26-12-247:~$ cd ~/venvs/mysite/bin
ubuntu@ip-172-26-12-247:~/venvs/mysite/bin$ . activate
(mysite) ubuntu@ip-172-26-12-247:~/venvs/mysite/bin$ cd ~/projects/mysite
(mysite) ubuntu@ip-172-26-12-247:~/projects/mysite$ git pull
git pull
명령으로 변경된 내용을 깃허브에서 다운로드settings
옵션을 추가하여 서버를 실행하면 서버가 잘 작동할 것(mysite) ubuntu@ip-172-26-12-247:~/projects/mysite$ python manage.py runserver 0:8000 --settings=config.settings.prod
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 23, 2020 - 20:52:44
Django version 3.0.5, using settings 'config.settings.prod'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.
Tip!
mysite.sh
mysite.cmd
파일과 동일하게 mysite.sh
파일을 작성하여 가상 환경 진입과 환경 변수 설정 작업을 자동화할 수 있음 venvs
디렉터리로 이동한 다음 nano mysite.sh
명령을 수행(mysite) ubuntu@ip-172-26-12-247:~/projects/mysite$ cd /home/ubuntu/venvs/
(mysite) ubuntu@ip-172-26-12-247:~/venvs$ nano mysite.sh
<Ctrl+O>
를 눌러서 mysite.sh
파일을 저장한 뒤 <Ctrl+X>
를 눌러서 편집기를 종료# [파일명: /home/ubuntu/venvs/mysite.sh]
#!/bin/bash
cd ~/projects/mysite
export DJANGO_SETTINGS_MODULE=config.settings.prod
. ~/venvs/mysite/bin/activate
mysite.sh
파일을 다음과 같이 실행ubuntu@ip-172-26-12-247:~/venvs$ . mysite.sh
(mysite) ubuntu@ip-172-26-12-247:~/projects/mysite$
mysite.sh
파일을 실행하면 가상 환경 진입과 환경 변수 설정을 자동으로 할 수 있음. mysite.sh
앞에 있는 점 기호 .
입력을 기억