【问题标题】:Where to provide necessary Django environment variables in a CI/CD pipeline using Docker and GitHub Actions使用 Docker 和 GitHub Actions 在 CI/CD 管道中在何处提供必要的 Django 环境变量
【发布时间】:2021-02-21 03:50:53
【问题描述】:

我有一个 Django 应用程序,我使用 GitHub Actions 部署到 Azure Kubernetes 集群,

当我使用 docker-compose up 在本地运行应用程序时,出现以下错误屏幕;

追溯日志

Environment:

Request Method: GET
Request URL: http://0.0.0.0:8000/

Django Version: 3.1
Python Version: 3.8.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'djoser',
 'oauth2_provider',
 'social_django',
 'drf_yasg',
 'core']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.8/site-packages/django/utils/deprecation.py", line 113, in __call__
    response = self.process_request(request)
  File "/usr/local/lib/python3.8/site-packages/django/middleware/common.py", line 48, in process_request
    host = request.get_host()
  File "/usr/local/lib/python3.8/site-packages/django/http/request.py", line 137, in get_host
    raise DisallowedHost(msg)

Exception Type: DisallowedHost at /
Exception Value: Invalid HTTP_HOST header: '0.0.0.0:8000'. You may need to add '0.0.0.0' to ALLOWED_HOSTS.

当然,通过隐藏敏感变量,我不确定在哪里提供这些环境变量。

.dev.env 中的变量

DEBUG="True"
SECRET_KEY="...86hoe@14y6)en"
ALLOWED_HOSTS="localhost,127.0.0.1 [::1]"
DATABASE_HOST="postgres"
DATABASE_USER="postgres"
DATABASE_NAME="postgres"
DATABASE_PASSWORD="postgres"

以下是我的 Dockerfile 和 docker-compose 文件;

docker-compose

--- 
version: "3.7"
services: 
  postgres: 
    environment: 
      POSTGRES_HOST_AUTH_METHOD: trust
    image: "postgres:12"
    networks:
      - internal
  web: 
    build: "."
    container_name: identityservice
    depends_on: 
      - postgres
    environment: 
      - DEBUG=1
      - "SECRET_KEY=\"#e...20m7rxh*%)ki(*=\""
    ports: 
      - 8000:8000
    networks:
      - internal
    stdin_open: true
    tty: true
    volumes: 
      - "./src/:/app/"

networks:
  internal:

Dockerfile

FROM python:3.8-slim


# Set working directory
RUN mkdir /app
WORKDIR /app

# Set environment variables
# Prevents Python from writing pyc files to disc (equivalent to python -B option)
ENV PYTHONDONTWRITEBYTECODE 1
# Prevents Python from buffering stdout and stderr (equivalent to python -u option)
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y curl
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
RUN pip install django-environ

COPY ./src .

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

对不起,如果这是非常直接或基本的。感谢您的帮助,谢谢

【问题讨论】:

  • 你绑过 pipenv 外壳吗?还是只包含所有变量的 env.py 文件?
  • 感谢您的回复。我没有尝试过 pipenv 或 env.py,我不确定在我的工作流程中的何处以及如何实现它。你能详细说明一下吗?

标签: python django docker-compose environment-variables dockerfile


【解决方案1】:

我发现了一个名为 Kustomize 的工具,它似乎是在运行时为容器提供必要的环境变量和机密的更好方法。如果它对我有用,我会尝试并在这里报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2020-01-10
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多