local_settings.py アンチパターンの原因の 1 つは、SECRET_KEY、AWS キーなどの値を設定ファイルに入れる際に問題があることです。
- 多くの場合、秘密はまさにそれであるべきです: 秘密! それらをバージョン管理下に置くということは、リポジトリにアクセスできるすべての人がそれらにアクセスできることを意味します。
私の質問は、すべてのキーを秘密にしておく方法ですか?
データをGPGで暗号化されたファイルに保存します-できれば、解析してdictに割り当てるlocal_settings.py
厳密な行としてデータを保存します(他の魅力的なアプローチは、実行可能なpythonとしてデータを保持することですが、構成ファイル内の実行可能なコードは私を震えさせます)。key=value
python gpgモジュールがあるので、問題ありません。キーリングからキーを取得し、GPGキーリング管理ツールを使用して、キーチェーンのパスワードを入力し続ける必要がないようにします。読み込んだ復号化された一時ファイルを作成するだけでなく、暗号化されたファイルから直接データを読み取っていることを確認してください。これは失敗の秘訣です。
これは単なる概要です。自分で作成する必要があります。
このように、シークレットデータはプロセスメモリスペースにのみ残り、ファイルや環境変数には残りません。
私は Windows 7 と Powershell を使用して Django プロジェクトを行っているため、環境変数の設定は少し異なりました。ただし、設定したら、settings.py
ファイルで次のことを行いました。
import os
SECRET_KEY = os.environ["SOME_SECRET_KEY"]
PowerShell を使用して Windows で環境変数を設定するには、以下のリンクの手順に従ってください。
理想的にlocal_settings.py
は、本番/デプロイされたサーバーにはチェックインしないでください。バックアップ コピーを別の場所に保持できますが、ソース管理には保持できません。
local_settings.py
便宜上、開発構成でチェックインできるため、各開発者はそれを変更する必要があります。
それはあなたの問題を解決しますか?
Heroku での展開と互換性のある方法の 1 つを次に示します。
.env
以下を含む名前の gitignored ファイルを作成します。
export DJANGO_SECRET_KEY = 'replace-this-with-the-secret-key'
次に、編集settings.py
して実際のものを削除し、SECRET_KEY
代わりにこれを追加します。
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
次に、開発サーバーをローカルで実行する場合は、次を使用します。
source .env
python manage.py runserver
最終的に Heroku にデプロイしたら、アプリの [設定] タブに移動し、DJANGO_SECRET_KEY を Config Vars に追加します。