【发布时间】:2019-05-03 00:15:06
【问题描述】:
一些背景
最近我遇到了一个问题,即尽管 DJANGO_SETTINGS_MODULE 被设置为不同的,但我的 Django 应用程序仍在使用基本设置文件。原来问题在于 gunicorn 没有继承环境变量,解决方案是将 -e DJANGO_SETTINGS_MODULE=sasite.settings.production 添加到我称之为 gunicorn 的 Dockerfile CMD 条目中。
问题
我在如何处理我的应用程序中的 SECRET_KEY 时遇到了问题。我将它设置在一个环境变量中,虽然我之前将它存储在一个 JSON 文件中,但这似乎不太安全(如果我错了,请纠正我)。
问题的另一部分是,当使用 gunicorn 时,它不会继承通常在容器上设置的环境变量。正如我上面所说,我遇到了 DJANGO_SETTINGS_MODULE 的这个问题。我想 gunicorn 也会有 SECRET_KEY 的问题。有什么办法解决这个问题?
我目前的方法
我在环境变量中设置了 SECRET_KEY 并将其加载到 django 设置文件中。我在包含export SECRET_KEY=<secretkey> 的文件“app-env”中设置值,Dockerfile 包含RUN source app-env,以便在容器中设置环境变量。
跟进问题
使用 Dockerfile 命令 ENV 设置环境变量 SECRET_KEY 而不是获取文件会更好吗?在这样的 Dockerfile 中硬编码密钥是否可以接受(似乎对我来说不是)?
是否有在 Dockerized 应用程序中处理密钥的“最佳实践”?
如果事实证明它与环境变量一样安全,我总是可以返回 JSON。但是弄清楚人们如何处理 SECRET_KEY 和 gunicorn 的环境变量问题仍然会很好。
代码
这是 Dockerfile:
FROM python:3.6
LABEL maintainer x@x.com
ARG requirements=requirements/production.txt
ENV DJANGO_SETTINGS_MODULE=sasite.settings.production_test
WORKDIR /app
COPY manage.py /app/
COPY requirements/ /app/requirements/
RUN pip install -r $requirements
COPY config config
COPY sasite sasite
COPY templates templates
COPY logs logs
COPY scripts scripts
RUN source app-env
EXPOSE 8001
CMD ["/usr/local/bin/gunicorn", "--config", "config/gunicorn.conf", "--log-config", "config/logging.conf", "-e", "DJANGO_SETTINGS_MODULE=sasite.settings.production_test", "-w", "4", "-b", "0.0.0.0:8001", "sasite.wsgi:application"]
【问题讨论】:
标签: django docker environment-variables gunicorn secret-key