Python問題集を解いてみよう!!

【Python】django-envrionでシークレットキーをGit管理対象から除外する

URLをコピーする
URLをコピーしました!

先日、Djangoチュートリアルのその1についての記事をアップしました。

その中で、ソースコードを Github にプッシュしましたが、プッシュ後に Github からこんなメールが届いていました。

Githubからのメール

GitGuardian has detected the following Django Secret Key exposed within you Github account.

Django のシークレットキーがプッシュされましたよ〜というお知らせのようです。

こんな機能があるんですね。

チュートリアルのものなので問題はありませんが、シークレットキーやパスワードなどは Git の管理対象からは除外すべです。

ということで、Git の管理対象から除外してみます。

シークレットキーはsettings.pyに含まれているので、settings.py自体を Git の管理対象から除外するのもありですが、重要な情報は環境変数として別ファイル.envで保持し、settings.pyからは.envを参照させる方法をとっている事例が多そうなので、その方法でやってみます。

今回はdjango-environという外部ライブラリ(パッケージ)を使います。

目次

インストール

まずはpipenvdjango-environをインストールします。

pipenv install django-environ

pipenvを使わない場合はpipでインストールしてください。

.envファイルを作成

次にmanage.pyと同じ場所に.envファイルを作成します。

.envファイルには次のように記載します。

SECRET_KEY='django-insecure-wy^n7$tt2^q=w(gxk&c&p*r=6d*w!4le#_d#6^yy_p0e8156pl'
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1

シークレットキー 以外に、デバッグ機能のオンオフ と Webサーバーのドメイン名やIPアドレスを指定すALLOWED_HOSTSの情報も.envファイルに含めるようにしました。

データベースの情報を含めたほうが良いですが、データベースが SQLite なので、今回はsettings.pyに残すことにしました。

settings.pyを編集

次にsettings.pyを編集します。

追記・変更箇所のみ記載します。

# 下記は追記
import environ

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

env.read_env('.env')

# 下記は変更
SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

細かく見ていきます。

import environ

django-environパッケージをインポートしています。

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

Envクラスをインスタンス化し、デフォルト値を設定しています。

上記の場合、.envファイルにDEBUGの値が記載されていなかった場合、Falseが設定されます。

そのため、本番環境にデプロイした際は環境変数にDEBUGの項目は不要です。

env.read_env('.env')

.envファイルを読み込んでいます。

SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

.envファイルから読み込んだ値をそれぞれ設定しています。

env.list()は読み込んだ値をリストに変換しています。

.gitignoreファイルに.envを追加

最後に、Git の管理対象から除外するフォルダー、ファイルを指定する.gitignoreファイルに.envファイルが記載されていない場合は追加してください。

この.gitignoreの内容ですが、私は下記サイトを利用して作成しています。

gitignore.io

こんな感じで、言語、フレームワーク、OS、IDEなどを指定するだけで、.gitignoreファイルの内容を作成してくれます。Pythonを指定するだけでも.envが入っているので、標準で入るんじゃないかと思います。

Github

django-adminを導入した状態を Github のリポジトリにプッシュしました。

差分

ファイル

公式ドキュメント

公式のドキュメントもリンクを貼っておきます。

おわりに

今回は

django-envrionでシークレットキーをGit管理対象から除外する方法

をお届けしました。

Web サイトのソースコードを Github 上で公開するようなケースはあまり無いのかもしれませんが、環境毎に変わるものを環境変数として別ファイルで管理した方が良いケースは多いと思うので、そういう場合にもdjango-environを使ってみではいかがでしょうか。

以上です。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
目次
閉じる