You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Digital Ocean服务器部署Cookiecutter Django遇ALLOWED_HOSTS错误求助

解决Cookiecutter Django在DigitalOcean Ubuntu 16.04上的ALLOWED_HOSTS错误 & 无Docker部署指南

针对你遇到的ALLOWED_HOSTS报错,以及需要的极简DigitalOcean部署方案,我整理了以下步骤,帮你快速解决问题:

一、先搞定ALLOWED_HOSTS错误:确认生产环境配置真的生效了

Cookiecutter Django是靠环境变量来切换settings的,你只改了production.py但可能没让服务器用这个配置,这大概率是问题根源:

  • 检查环境变量DJANGO_SETTINGS_MODULE
    终端里执行:echo $DJANGO_SETTINGS_MODULE
    如果输出不是config.settings.production,说明服务器还是在用默认的开发配置。
    • 临时生效:export DJANGO_SETTINGS_MODULE=config.settings.production
    • 永久生效(每次登录都生效):编辑~/.bashrc或~/.profile,把上面的命令加进去,然后执行source ~/.bashrc刷新。
  • 帮Gunicorn指定生产配置
    如果你用Gunicorn启动服务,要确保启动命令里明确指定生产环境,比如:
    gunicorn --bind 0.0.0.0:8000 config.wsgi:application --env DJANGO_SETTINGS_MODULE=config.settings.production
    
    要是你用systemd管理Gunicorn服务,记得在服务文件的[Service]段加上环境变量配置:
    Environment="DJANGO_SETTINGS_MODULE=config.settings.production"
    
  • 验证ALLOWED_HOSTS的真实值
    有时候环境变量会覆盖production.py里的默认值,你可以直接进Django生产环境shell确认:
    激活虚拟环境后执行:
    python manage.py shell --settings=config.settings.production
    
    然后在shell里输入:
    from django.conf import settings
    print(settings.ALLOWED_HOSTS)
    
    如果输出不是['128.199.100.100'],说明DJANGO_ALLOWED_HOSTS环境变量被设成了其他值,执行echo $DJANGO_ALLOWED_HOSTS看看,要是不对就设置:
    export DJANGO_ALLOWED_HOSTS="128.199.100.100"
    
    同样可以把这个命令加到~/.bashrc里永久生效。

二、DigitalOcean无Docker部署Cookiecutter Django的极简步骤

结合你参考的Django+Postgres+Gunicorn教程,补充Cookiecutter特有的配置细节:

  1. 服务器基础配置
    • 更新系统:sudo apt-get update && sudo apt-get upgrade -y
    • 装依赖:sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
  2. 虚拟环境与项目代码
    • 装virtualenv:pip3 install virtualenv
    • 到项目目录,创建并激活虚拟环境:virtualenv venv && source venv/bin/activate
    • 上传你的Cookiecutter项目代码(用git克隆或scp上传都行)
    • 装生产依赖:pip install -r requirements/production.txt
  3. PostgreSQL配置
    • 按照教程创建数据库和用户,然后在项目根目录的.env文件里设置数据库连接:
      DATABASE_URL=postgres://你的数据库用户名:密码@localhost/数据库名
      
    Cookiecutter Django会自动读取这个环境变量配置数据库。
  4. 生产环境初始化
    • 设置关键环境变量(可以把这些加到~/.bashrc里):
      export DJANGO_SETTINGS_MODULE=config.settings.production
      export DJANGO_ALLOWED_HOSTS="128.199.100.100"
      export SECRET_KEY="你的生产环境密钥(别用开发环境的!)"
      
    • 执行迁移:python manage.py migrate --settings=config.settings.production
    • 收集静态文件:python manage.py collectstatic --settings=config.settings.production
  5. Gunicorn与Nginx配置
    • 测试Gunicorn启动:gunicorn --bind 0.0.0.0:8000 config.wsgi:application,能正常启动就没问题
    • 按照教程创建systemd服务管理Gunicorn,记得把环境变量加到服务文件里(前面提过)
    • 配置Nginx反向代理到Gunicorn的8000端口,确保Nginx配置里有proxy_set_header Host $host;(这个会影响Django获取的HTTP_HOST)
    • 重启Nginx:sudo systemctl restart nginx
  6. 防火墙配置
    • 开放Nginx端口:sudo ufw allow 'Nginx Full'

三、最后排查小技巧

如果还是报ALLOWED_HOSTS错误,检查:

  • Nginx的proxy_set_header Host $host;是否存在,有没有写错
  • 服务器的防火墙是不是没开80端口,导致请求走了其他路径
  • 有没有重启Gunicorn和Nginx,确保配置生效

内容的提问来源于stack exchange,提问作者diogenes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:42