[Django] settings.pyを環境毎に分割・切り替え方法。本番、開発、ローカル環境に分けてデプロイミスを防ぐ。

Djangoのアプリ開発ではsettingsを各環境で分割・切り替え方法を紹介します。
この方法を使用すれば、

  • DBの接続先
  • 静的ファイル(CSS/JS)の配置先
  • SECRET_KEY
    などを環境ごとに分けることができ、デプロイ時のミスやエラーを防ぐことができます。
目次

setttingsの分割・切り替え方針

以下の方針でsettings.pyを分割していきたいと思います。

  • 本番、開発、ローカル環境ごとに切り替えられるsettings.pyを修正
  • Djangoの起動時にはDJANGO_SETTINGS_MODULE`を環境変数や`--settingsで設定して各環境を切り替える

ファイル・ディレクトリ構成

project/
 ├ __init__.py
 ├ asgi.py
 ├ urls.py
 ├ wsgi.py
 └ settings /
    ├ __init__.py
    ├ base.py # 共通設定ファイル
    ├ local.py # ローカル環境固有設定ファイル
    ├ development.py # 開発環境固有設定ファイル
     └ production.py # 本番環境固有設定ファイル

手順は以下の流れになります。

  1. settingsディレクトリを作成し、その中に各種設定情報をコーディングする
  2. base.pyには全ての共通的な設定を入れる
  3. local.py, development.py, production.pyには環境ごとの設定を追記

base.pyに記載する設定値

以下のような全体で使い回す設定値をbase.pyに記入します。

  • BASE_DIR
  • INSTALLED_APPS
  • MIDDLEWARE
  • ROOT_URLCONF
  • TEMPLATES
  • その他ライブラリの設定

ローカル環境、開発環境用のsettings.py

ローカル(local.py)、開発(development.py)環境用のファイルには環境ごとに使い分ける必要がある設定値を記載する。

  • SECRET_KEY
  • DEBUG = True
  • ALLOWED_HOSTS = [‘IP Address’, ‘hostname’]
  • DATABASE

なお、ローカル環境や開発環境にはデバック用のアプリとしてdebug_toolbarを入れておくことをオススメします。

INSTALLED_APPS += [
    "debug_toolbar",
]

本番環境用のsettings.py

本番環境では下記を設定します。
特にSECRET_KEYは他の環境と重複しないことが重要です。
またDEBUGをTrueにするとエラー時にデバッグログが表示されてしまうためセキュリティリスクが高まります。

  • SECRET_KEY
  • DEBUG = False
  • ALLOWED_HOSTS = [‘IP Address’, ‘hostname’]
  • DATABASES

BASE_DIR の修正

階層が1つ潜ってしまったため、BASE_DIRを修正します。

# 修正前
BASE_DIR = Path(__file__).resolve().parent.parent 
# 修正後
BASE_DIR = Path(__file__).resolve().parent.parent.parent

manage.py の修正

デフォルトでlocal環境の設定を読み込むように設定します。
起動時にDJANGO_SETTINGS_MODULE `を環境変数に設定するか、runserverの時に`--settingsを指定しない場合は、ローカル環境として起動されます。

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings.local')

wsgi.pyまたはasgi.pyの修正

デフォルトでlocal環境の設定を読み込むように設定します。
起動時にDJANGO_SETTINGS_MODULE `を環境変数に設定するか、runserverの時に`--settingsを指定しない場合は、ローカル環境として起動されます。

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings.local')

開発環境と本番環境の起動

開発環境と本番環境の起動時には2つの方法があります。

  • DJANGO_SETTINGS_MODULEを環境変数に設定
  • –settingsを起動オプションに追加

今回は本番環境の起動方法で説明します。

環境変数を設定する場合は以下の方法になります。

exponrt DJANGO_SETTINGS_MODULE=project.settings.production
python manage.py runserver 0.0.0.0:80

–settingsを設定する場合は以下の方法になります。

python manage.py runserver --settings=project.settings.production 0.0.0.0:80

個人的には環境変数で動作を変えることが出来るため、.envファイルなどDJANGO_SETTINGS_MODULEに設定しておき、起動スクリプトを実行するのを推奨します。

  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次