Soのブログ

技術、その他何でも

RDBコンテナとDjangoコンテナのシークレット変数の設定

はじめに

RDB(Postgresなど)コンテナとDjangoコンテナのシークレット変数の設定を整理しました。

docker-composeで組むことが多いのですが、いつも迷うのでdocker-composeの場合で整理しました。

シークレット変数は環境変数又はファイルから読み込みますが、ファイルから読み込む形にします。

開発環境を想定します。

設定方法

.envにシークレット変数を記述する

# PostgreSQL初期化用(docker-compose.ymlで使用)
POSTGRES_USER=xxx
POSTGRES_PASSWORD=xxx
POSTGRES_DB=xxx

# Django設定用(settings.pyで使用)
DATABASE_URL=postgres://<user>:<password>@db:5432/<db>
SECRET_KEY=xxx

※<user>などは${POSTGRES_USER}のように展開不可のためハードコードするか、settings.pyでPOSTGRES_USERなどを読み込み、DATABASE_URLを構築する必要がある

RDBはコンテナ起動時にroot userやDBを作成する必要があるためdocker-compose.ymlから読み込む

services:
  db:
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}

Djangoはsettings.pyから読み込む(docker-compose.ymlにenvironmentの記述不要)

import environ

env = environ.Env()
environ.Env.read_env(env_file=str(BASE_DIR) + "/.env")

# シークレット変数の読み込み
DATABASES = {
    # DATABASE_URLを読み込む
    "default": env.db(),
}
SECRET_KEY = env("SECRET_KEY")