私の Django アプリケーションは多くの環境変数を使用しており、全部で約 35 です。現在、これらはすべて、アプリケーション スタックを開始する前に入手した .env ファイルによって処理されます。特に本番環境の秘密鍵に関するものである場合、これは非常に安全でない方法であることを指摘する必要はないと思います...
今私の問題は、コンテナでシークレットを処理する方法がわからないため、.env ファイルからシークレットに切り替える方法がよくわからないことです。たとえば、Django は接続文字列を使用して MySQL データベースに接続します。以下を参照してください。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
'NAME': env.str('MYSQL_DB'),
'USER': env.str('MYSQL_USER'),
'PASSWORD': env.str('MYSQL_PWD'),
'HOST': env.str('MYSQL_HOST'),
'PORT': env.str('MYSQL_PORT'),
}
}
ほとんどの場合、「env.str」を使用して、開始時にコンテナーに渡す変数をフェッチします。では、Django アプリケーションを docker secret で動作させるにはどうすればよいでしょうか。また、可能であれば、上記のように var を取得し続けることができますか? 私の docker-entrypoint.sh で開始時に必要なすべての変数をロードすることは可能でしょうか? はいの場合、どうすればこれを達成できますか?
私はすでにこの解決策を見つけました:
if [ -f /run/secrets/MYSQL_PWD ]; then
export MYSQL_PWD=$(< /run/secrets/MYSQL_PWD)
fi
if [ -f /run/secrets/MYSQL_USER ]; then
export MYSQL_USER=$(< /run/secrets/MYSQL_USER)
fi
環境変数を取得するために起動時にトリガーするのは理にかなっていますか? 参照: https://github.com/grafana/grafana-docker/issues/149
読んでくれてありがとう