패키지 생성
project를 시작할때 만든 settings.py의 위치에서 settings package를 생성
settings.py 이동
settings.py 를 base.py로 이름 변경 후 settings 패키지로 이동
local, deploy 파일 생성
settings 패키지안에 local.py, deploy.py 생성
환경변수 분리
공통 사항은 base.py
- apps
- static path ...
로컬 환경은 local.py
- local에서 사용하는 db
- debug, allowed host 등
배포 환경은 deploy.py
- docker secrets 에서 가져오는 비밀번호 및 키
- 배포환경에서 사용하는 db
# local.py
import os, environ
from .base import *
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env(env_file=os.path.join(BASE_DIR, ".env"))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env("SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env("DEBUG")
ALLOWED_HOSTS = ["*"]
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
# deploy.py
import os, environ
from .base import *
# docker secrets에서 가져오는 비밀키
def read_secret(secret_name):
file = open("/run/secrets/" + secret_name)
secret = file.read()
secret = secret.rstrip().lstrip()
file.close()
return secret
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env(env_file=os.path.join(BASE_DIR, ".env"))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = read_secret("DJANGO_SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ["*"]
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django",
"USER": "django",
"PASSWORD": read_secret("MYSQL_PASSWORD"),
"HOST": "mariadb",
"PORT": "3306",
}
}
manage.py 설정
아래의 os.environ.setdefault 부분 수정
두번째 인자에 python manage.py runserver 명령어를 사용할때 실행할 파일 연결
# root 폴더의 manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
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()
배포 파일 실행
아래와 같이 runserver 에 --settings 옵션을 줘서 실행
python manage.py runserver --settings=config.settings.deploy
728x90
'Study > Django' 카테고리의 다른 글
[Docker] portainer를 활용한 docker secrets, swarm, stack, image (0) | 2021.05.28 |
---|---|
[Django] gunicorn (0) | 2021.05.28 |
[Django] field lookup (0) | 2021.05.25 |
[Django] decorator (0) | 2021.05.25 |
[Django] code formatting black 설치 및 적용 (0) | 2021.05.20 |