如何将 .env 文件调用到在 K8s 服务器上的 Docker 容器中运行的 Django 项目中?

如何将 .env 文件调用到在 K8s 服务器上的 Docker 容器中运行的 Django 项目中?

我很可能只需要一个正确方向的提示。

我有一个使用 gunicorn 和 nginx 运行 Django 应用程序的 docker 容器。此 Django 应用程序当前正在从 .env 文件获取其环境变量。

FROM python:alpine
EXPOSE 8000

RUN apk update
RUN apk add --no-cache git gcc musl-dev libffi-dev libxml2-dev libxslt-dev gcc swig g++
RUN apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-  dev tk-dev tcl-dev
RUN apk add --no-cache bash ffmpeg libmagic
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install --upgrade setuptools

RUN mkdir /opt/app
WORKDIR /opt/app
COPY . .
RUN python3 -m pip install /root/d12f/

RUN pip3 install -r requirements.txt
RUN pip3 install gunicorn
CMD sh -c 'gunicorn --conf python:app.gunicorn_conf app.wsgi --bind 0.0.0.0:8000 --reload --log-level info --access-logfile - --timeout 360 --error-logfile -'

当然,repo 中没有 .env 文件,因为这会造成安全风险。

Docker 镜像由 GitHub 创建并存储在私有 GitHub Package 中。稍后将使用此 docker 镜像在 Kubernetes 上运行。

我正在尝试找到将 .env 文件放入的最佳解决方案

/opt/app/app/.env

作为本地文件。

如果可能的话,我宁愿不使用全局环境变量。

谢谢您的任何建议。

答案1

稍后该docker镜像将用于在Kubernetes上运行。

将您的.env文件存储为Secretkubectl [1]

kubectl create secret generic app-env --from-file=.env=/path/to/your/.env

然后您可以在您的定义中将其Secret作为卷挂载Pod[2][3]

---
apiVersion: v1
kind: Pod
...
spec:
  containers:
    ...
  - name: app
    image: your-image:tag
    volumeMounts:
    - name: app-env-vol            # mount volume name
      mountPath: /opt/app/app      # to /opt/app/app
      readOnly: true               # as read-only
    ...
  volumes:
    ...
  - name: app-env-vol              # create app-env volume
    secret:
      secretName: app-env          # with secret name.
    ...

您的应用程序应该能够访问它env/opt/app/app/.env

答案2

使用wget或云提供商 cli 命令在运行时将其拉下。

您必须使用某种身份验证机制来保护“配置文件存储”中的文件,例如 IAM 和安全存储桶。或者您的配置存储也应该接受文件。

mv将文件放入适当的 opt 目录。

相关内容