Docker+GitHub Actions的CI/CD中配置Django环境变量及本地部署问题
解决Django DisallowedHost错误 & 环境变量配置指南
嘿,我来帮你搞定这个问题!你的错误日志已经把问题点得明明白白——0.0.0.0没在ALLOWED_HOSTS里,同时你也需要优化环境变量的配置方式来隐藏敏感信息,下面一步步来:
一、先搞定DisallowedHost错误
1. 更新你的.dev.env配置
直接在ALLOWED_HOSTS里加上0.0.0.0就行,注意用逗号分隔:
DEBUG="True" SECRET_KEY="...86hoe@14y6)en" ALLOWED_HOSTS="localhost,127.0.0.1,[::1],0.0.0.0" # 新增0.0.0.0 DATABASE_HOST="postgres" DATABASE_USER="postgres" DATABASE_NAME="postgres" DATABASE_PASSWORD="postgres"
2. 让docker-compose自动加载.env文件
你现在的docker-compose是手动写环境变量,既麻烦又容易泄露敏感信息。改成加载.dev.env文件就方便多了,修改你的docker-compose.yml:
version: "3.7" services: postgres: environment: POSTGRES_HOST_AUTH_METHOD: trust image: "postgres:12" networks: - internal web: build: "." container_name: identityservice depends_on: - postgres env_file: # 加上这行,自动读取.dev.env里的变量 - .dev.env ports: - 8000:8000 networks: - internal stdin_open: true tty: true volumes: - "./src/:/app/" networks: internal:
记得把原来
web服务里手动写的environment配置删掉,避免变量冲突哦。
3. 让Django正确读取环境变量
你已经装了django-environ,现在要在settings.py里配置它来解析这些变量,这样Django才能识别ALLOWED_HOSTS的列表格式:
在settings.py最开头加上这段代码:
import environ # 初始化环境变量解析器 env = environ.Env( DEBUG=(bool, False), # 默认值False,类型是布尔 ALLOWED_HOSTS=(list, []), # 默认空列表,类型是列表 ) # 读取本地的.dev.env文件(只在开发环境用) environ.Env.read_env('.dev.env') # 替换原来的配置项 DEBUG = env('DEBUG') SECRET_KEY = env('SECRET_KEY') ALLOWED_HOSTS = env.list('ALLOWED_HOSTS') # 自动把逗号分隔的字符串转成列表 # 数据库配置也可以改成从环境变量读取,更规范 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': env('DATABASE_NAME'), 'USER': env('DATABASE_USER'), 'PASSWORD': env('DATABASE_PASSWORD'), 'HOST': env('DATABASE_HOST'), 'PORT': 5432, } }
二、这样配置的好处
.dev.env:专门存开发环境的敏感信息,把它加到.gitignore里,就不用担心提交到GitHub泄露密钥啦。- docker-compose的
env_file:不用在compose文件里硬编码变量,配置更干净,还能区分不同环境的.env文件(比如prod.env、dev.env)。 - django-environ:帮你自动处理变量类型转换,比如把字符串"True"转成布尔值,把逗号分隔的字符串转成列表,省得你自己写代码处理。
三、验证一下修复效果
- 先停掉当前的容器:
docker-compose down - 重新构建并启动:
docker-compose up --build - 访问
http://0.0.0.0:8000,应该就不会再看到DisallowedHost的错误啦!
内容的提问来源于stack exchange,提问作者Mert Alnuaimi
相关产品推荐
相关产品推荐

