2013-03-22 3 views
2

Django 설정 파일은 common.py, dev.pyprod.py입니다. 모든 파일은 common.py에서 상속됩니다. 내 데이터베이스 암호, 데이터베이스 URL 등을 내 온라인 저장소에서 환경 변수 &으로 저장하고 싶습니다.환경 변수를 이용한 장고 분할 환경 설정

Stackoverflow 및 웹에 대한 환경 변수를 조사했지만 명확한 이해가 있는지 확실하지 않습니다.

정확하게 bash 쉘에 입력해야 할 내용이나 export SOMEAPP_DB_USER='someapp', export SOMEAPP_DB_PASSWORD='1234'과 같은 내용은 bash_profile에 들어 있습니까?

쉘을 통해 명령을 내리는 경우 현재 사용중인 터미널 세션에만 적합합니까? 아니면 응용 프로그램 가상 환경을 호출 할 때마다 영구적으로 설정됩니까?

설정 파일을 다음과 같이 설정해야합니까?

DATABASE_USER = os.environ.get("SOMEAPP_DB_USER", ") 
DATABASE_PASSWORD = os.environ.get("SOMEAPP_DB_PASSWORD", ") 

답변

3

환경은 프로세스와 연관되며 상위 프로세스가 분기 될 때 상속 된 복사본입니다. 다른 명령을 실행하기 전에 환경에 bash 설정을 삽입 할 수 있습니다.

다음 명령은 두 개의 추가 환경 변수 DJANGO_SETTINGS_MODULEMY_DB_PASSWORD을 추가하여 기존 bash 환경에서 ./manage runserver을 실행합니다.

DJANGO_SETTINGS_MODULE=myproject.settings.dev MY_DB_PASSWORD=foo ./manage.py runserver 

제안한대로 설정 파일에서 다음 Python 코드를 사용하여 환경에서 값을 추출 할 수 있습니다.

import os 
db_passwd = os.environ.get('MY_DB_PASSWORD', 'default-db-password') 

당신은 .profile에 암호를 넣을 수 있지만, 당신이 다음 중요한 정보가 민감하지 않은 혼합이 있기 때문에 아마 좋은 생각입니다. 그런 다음 파일 접근 권한 인 .profile을 보호해야합니다. 그렇지 않으면 다른 사용자가 파일을 읽고 암호를 가져올 수 있습니다.

이 경우 설정 관리를위한 더 나은 방법은 암호와 같은 중요한 설정 전용 파일을 별도로 만드는 것입니다. 이 파일의 사용 권한을 필요로하는 사용자 (예 : 웹 서버) 만 읽을 수 있도록 보호하십시오. 그런 다음 settings.py에서이 암호 파일을 읽어 암호를 얻을 수 있습니다. Python ConfigParser module의 사용이 여기에서 유용 할 수 있습니다.

환경 변수를 사용하여 원하는 경우이 파일의 위치를 ​​지정할 수 있습니다. 지정하지 않으면 환경 변수를 사용하여 기본값으로 되돌릴 수 있습니다.

예 : DB_PASSWD_FILE = ~/tmp를/test_db_passwords.ini ./manage.py settings.py

import os 
db_passwd_file = os.environ.get('DB_PASSWD_FILE', '/etc/myproject/db_passwords.ini') 

# Instantiate a ConfigParser object here to read passwords from db_passwd_file. 

에서 다음

의 runserver이 위치에 의해 대체되지 않는 한 기본 동작은 파일 /etc/myprojecdt/db_passwords.ini 보호 시스템에 볼 수 있습니다 환경 변수는 DB_PASSWD_FILE입니다.

개발 중에 DB_PASSWD_FILE을 개발 목적으로 정상적인 위치를 가리 키도록 .profile으로 설정할 수 있습니다.DB_PASSWD_FILE이 가리키는 경로는 파일 시스템 권한을 사용하여 사용자가 읽을 수 있도록 보호 될 수 있습니다.

+0

감사합니다. 이는 환경 변수가하는 일과 실제로 작동하는 방식을 이해하는 데 도움이되었습니다. – demet8

+0

정말 고마워. – user2990084