본문 바로가기
Dev Log/Django

[Django] Django+uWSGI에서 os.environ variable 설정하기

by 삽질하는큐 2017. 4. 18.

Django 프로젝트를 production 서버로 올려놓을 때는 DB의 패스워드나 Django의 SECRET_KEY 등을 감춰둘 필요가 있다. 이를 위해서는 돌아가고 있는 서버 환경에 변수를 설정해두면 된다. 본래 아마존 EC2와 같은 Linux 환경에서는 터미널에서는 다음과 같이 하면 변수를 설정할 수 있다.

export VAR_NAME=HELLO_WORLD

위와 같이 하거나 아니면 이를 .bashrc 파일에 적어놓고 source .bashrc를 하게 되면 같은 상태로 쓸 수 있게 된다. (확인은 printenv로 하면 된다.)



하지만, uWSGI에서 쓰게 된다면 얘기가 달라진다. http://stackoverflow.com/questions/16792698/os-environ-in-django-settings-py-cannot-get-system-environment-variables-with 여기에서 말하는 것처럼, local 실행 환경에서는 환경 변수가 정해져 있으나, uWSGI는 다른 사용자로 실행시키는 것과 같은 효과가 발생하기 때문에 환경변수를 uWSGI 설정 파일에 해두어야 Django 어플리케이션에서 인식할 수 있다.




/etc/uwsgi/sites/foobar.ini

[uwsgi] ... env=SOME_VAR=foobar ...

위와 같이 변수의 이름을 SOME_VAR로, 해당 내용을 foobar로 설정하게 되면, django 어플리케이션에서는 os.environ['SOME_VAR']로 인식하게 된다. 그렇다면 SECRET_KEY를 저장하고 다음과 같이 하면 되겠다.



settings.py

import os
SECRET_KEY=os.environ['SECRET_KEY']
...

이외에 민감한 정보들도 감춰 놓고 안전하게 개발하자!