본문 바로가기
django

[django, python]개발 서버 배포를 위한 환경 변수 설정

by 전봇대파괴자 2022. 12. 19.

django를 기반으로, 개발 서버 배포를 위한 환경 변수(environment variable) 설정에 대해 설명한 문서입니다.

 

0. 환경 변수를 사용하는 이유

  • 다른 개발자들과 원활한 협업 : 다른 개발자들이 내 코드를 봤을 때 쉽게 이해할 수 있도록 코드가 간결할 필요가 있습니다. 또한 작업 효율을 높이기 위해서는 github에서 내 코드를 내려받았을 때 바로 실행해볼 수 있도록 세팅해야 합니다.
  • 노출되어서는 안 되는 값 처리 : 프로젝트 중 노출되서는 안 되는 비밀값들이 존재합니다. 예를 들어 AWS에서 주어진 access key id나 access secret key 등이 그렇습니다. 이를 환경변수로 처리함으로써 개인정보를 보호할 수 있습니다.

 

1. python-decouple

파이썬 라이브러리 중 하나인 python-decouple로 비밀값들을 처리할 수 있습니다. 로컬에서 사용할 수 있는 방법 중 하나입니다.

1.1 설치

pip install python-decouple

 

1.2 사용 방법

.env 파일을 생성합니다. 해당 파일 내에 비밀값으로 지정하고 싶은 값들을 적습니다.

SECRET_KEY = 'aslkj3kljklj9089@(&))@'
DEBUG = True

 

settings.py에서는 다음과 같이 사용할 수 있습니다.

from decouple import config
...
# django secret key
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
...

 

2. os.environ

2.1. .bashrc/ .bash_profile 사용

$ vi ~/.bashrc # .bashrc 파일 수정
$ vi ~/.bash_profile # .bash_profile 수정
export '환경변수명 1' = '값 1'
export '환경변수명 2' = '값 2'
...
# ex> export DJANGO_SECRET_KEY = 'sgalkjlk23jlk22098(*)&&%&*'
$ source ~/.bashrc # .bashrc 변경사항 적용 
$ source ~/.bash_profile # .bash_profile 변경사항 적용
  • 위와 같이 처리된 환경 변수를 django 및 python에서는 아래와 같이 가져와 사용할 수 있습니다.
  • 환경변수를 추가한 후에는 적용하는 것을 잊지 않도록 합니다!
# 환경 변수 사용하기
# secret key
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')

# database
DATABASE = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'DB 이름',
        'USER': os.environ.get('DBUSER', 'winter'),
        'PASSWORD': os.environ.get('DBPASS', ''),
        'HOST': os.environ.get('DBHOST', 'localhost'),
        'PORT': os.environ.get('DBPORT', '5432')
    }
}

# 환경 변수가 존재하지 않을 경우 기본값 설정하기
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
  • kubenetes에서 서버 배포 시 .bashrc의 환경변수를 가져와 사용하려면, kubectl secret에 환경변수와 동일한 변수로 값을 추가하고, deployment.yaml의 env에서 해당 Secret 값들을 사용하겠다고 명시해야 합니다.

'django' 카테고리의 다른 글

[django]django에서 DB 다루기  (0) 2022.02.24
[django]postgres DB와 연동하기  (0) 2022.02.14
[django]drf-yasg로 swagger 적용하기  (0) 2022.02.13