2

Django 設定ファイルに、common.pydev.pyおよびがあります。prod.pyすべてのファイルはcommon.py. データベースのパスワード、データベースの URL などを環境変数として保存し、オンライン リポジトリから除外したいと考えています。

Stackoverflow と Web で環境変数を調査しましたが、それを明確に理解しているかどうかはわかりません。

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", ")
4

1 に答える 1

3

環境はプロセスに関連付けられ、親プロセスが fork したときにコピーが継承されます。別のコマンドを実行する前に、bash で設定を環境に注入できます。

次のコマンドは./manage runserver、既存の bash 環境で実行され、2 つの追加の環境変数DJANGO_SETTINGS_MODULEMY_DB_PASSWORD.

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ます。そうしないと、他の人がファイルを読み取ってパスワードを取得できてしまいます。

この場合の設定管理のより良いアプローチは、パスワードなどの機密設定専用の別のファイルを用意することだと思います。このファイルのパーミッションを保護して、それを必要とするユーザー (Web サーバーなど) だけが読み取れるようにします。次に、このパスワード ファイルを から読み取って、パスワードsettings.pyを取得できます。ここでは、Python ConfigParser モジュールの使用が役立つ場合があります。

必要に応じて環境変数を使用して、このファイルの場所を指定するか、何も指定されていない場合はデフォルトに戻すことができます。

例えば。DB_PASSWD_FILE=~/tmp/test_db_passwords.ini ./manage.py runserver

次に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.

これにより、場所が環境変数/etc/myprojecdt/db_passwords.iniによって上書きされていない限り、デフォルトの動作でシステム保護ファイルを検索できます。DB_PASSWD_FILE

DB_PASSWD_FILE開発中に、開発目的で適切な場所を指すように設定できます.profile。を指すパスは、DB_PASSWD_FILEファイル システムのアクセス許可を使用するだけで読み取りできるように保護できます。

于 2013-03-22T01:48:19.597 に答える