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")