Djangoを用いてアプリケーションを作成する際に、settings.pyなどに機密情報(パスワードやメールアドレスなど)を直接記述してしまっていませんか??セキュリティ上の観点から、設定フィル内にハードコーディングするのは好ましくありません。
本記事では、djangoアプリケーションにて機密情報などを環境変数として外部ファイルから読み込む方法をご紹介します。
・環境変数として機密情報を扱う方法
方法
ライブラリのインストール
djangoアプリケーションで簡単に環境変数を扱うことができる django-environ というライブラリをインストールします。
(venv)$ pip install django-environ
アプリケーションをデプロイする場合などは、requirements.txt を忘れずに更新しておきましょう。
(venv)$ pip freeze > requirements.txt
.env の作成
プロジェクトのルートディレクトリ(manage.pyがあるとこ)に「.env」というファイルを作成しましょう。この中に環境変数を記述します。
記述方法はこんな感じです。
# pythonと同様「#」でコメントアウトできます
# 文字列として記述
SECRET_KEY=mykey
SECRET_KEY="my key" # 空白がある場合
# 真偽値
DEBUG=False
# リスト
DB_USERS=taro,sho,yukari
.env の読み取り
settings.py側で環境変数を読み取ります。
import os
import environ
from pathlib import Path
# プロジェクトのルートディレクトリを取得
BASE_DIR = Path(__file__).resolve().parent.parent
# .envファイルを読み込む
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))
# .envファイルから各環境変数を読み込む
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG')
DB_USERS = env.list('DB_USERS')
こんな感じで簡単に環境変数を分離することができます。
ここで注意なのですが、マシンに設定されている環境変数が優先されて読み込まれてしまうということです。「.env」から読み込んでいるのも関わらず、異なる値が読み込まれてしまう場合はマシンの環境変数で既に設定されている場合があります。
このことに気づかず1時間くらい右往左往したことがあります、、、。
適宜下記のコマンドで対応しましょう。
// マシンに設定している環境変数一覧を表示
$ env
// 環境変数のリセット
unset [環境変数名]
GitHubでバージョン管理しないように
GitHubでバージョン管理する必要はないので、.envファイルと同じディレクトリに「.gitignore」というファイルを作成し、下記のように記述しましょう。
.env
まとめ
django-environを使用して、.envファイルから環境変数を読み込む設定をご紹介しました。機密情報を直接ハードコーディングすることは避けましょう!
ご覧いただきありがとうございました!
コメント