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

将Django应用部署至Azure App Service的问题求助

我完全懂你现在的挫败感——明明把Django示例应用传到了Azure App Service的wwwroot,却还是只能看到默认的hostingstart.html页面,试了好几篇教程都没解决,确实挺闹心的。我之前帮不少开发者搞定过这类部署问题,给你一套详细的分步操作,跟着来应该就能解决:

第一步:先确认你的Django项目结构符合Azure要求

Azure对Python项目的结构有明确要求,这是很多人踩坑的地方:

  • 项目根目录必须有requirements.txt,里面要列全所有依赖,尤其要加上gunicorn——Azure就是靠它来运行Django应用的,比如你的文件里至少要有:
    django>=4.0
    gunicorn>=20.1.0
    
  • 确保你的Django项目的wsgi文件路径正确,比如项目名为my_django_app,那路径就是my_django_app/wsgi.py,后面要用到这个路径。
第二步:配置Azure App Service的核心设置

登录Azure门户,找到你的App Service,按下面的步骤配置:

  1. 设置启动命令:
    进入「配置」>「通用设置」,在「启动命令」里填入:

    gunicorn --bind=0.0.0.0 --workers=4 --timeout=600 <你的项目名>.wsgi:application
    

    举个例子,如果你的项目叫django_sample,那就是gunicorn --bind=0.0.0.0 --workers=4 --timeout=600 django_sample.wsgi:application
    同时确认「Python版本」和你本地开发用的版本一致(比如3.9或3.10),版本不匹配会直接导致依赖安装失败。

  2. 添加关键环境变量:
    进入「配置」>「应用程序设置」,点击「新建应用程序设置」,添加以下变量:

    • 名称:DJANGO_SETTINGS_MODULE,值:<你的项目名>.settings(比如django_sample.settings)
    • 名称:PYTHONPATH,值:D:\home\site\wwwroot(这是Azure上代码的根目录,确保Python能找到你的项目)
    • 生产环境下一定要加:DEBUG=False,以及自定义的SECRET_KEY(别用本地测试的密钥)
第三步:正确上传你的Django项目到wwwroot

你之前直接复制项目到wwwroot可能结构不对,正确的做法是:

  • 把Django项目的所有核心文件(包括manage.py、项目文件夹、requirements.txt、静态文件目录等)直接放到wwwroot根目录下,不要在wwwroot里再套一个子文件夹。最终结构应该是这样:
    wwwroot/
    ├── manage.py
    ├── django_sample/  # 你的Django项目文件夹
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── requirements.txt
    └── staticfiles/  # 收集静态文件用的目录(后面会说)
    
  • 直接删除wwwroot里的hostingstart.html,避免Azure默认加载这个页面。
第四步:触发Azure重新加载应用并排查日志
  1. 上传完代码后,回到App Service的「概述」页面,点击「重启」,强制Azure重新读取配置并安装依赖。
  2. 打开「监控」>「日志流」,这里能实时看到应用启动的日志,是排查问题的关键:
    • 如果看到ModuleNotFoundError: No module named 'gunicorn',说明requirements.txt漏加了gunicorn,补上重新上传即可。
    • 如果看到Invalid HTTP_HOST header,那是因为settings.py里的ALLOWED_HOSTS没加你的Azure域名,比如要加上['your-app-name.azurewebsites.net']。
第五步:处理静态文件(必做!)

Django的静态文件在生产环境不会自动加载,得手动配置:

  1. 在你的settings.py里添加:
    import os
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATIC_URL = '/static/'
    
  2. 本地运行python manage.py collectstatic --noinput,把所有静态文件收集到staticfiles文件夹,然后把这个文件夹也上传到wwwroot。
  3. 或者把收集静态文件的步骤加到启动命令里,比如:
    python manage.py collectstatic --noinput && gunicorn --bind=0.0.0.0 --workers=4 --timeout=600 django_sample.wsgi:application
    
    这样每次重启应用时,Azure会自动帮你收集静态文件。
最后再检查几个常见坑
  • 确认ALLOWED_HOSTS包含你的Azure应用域名,不然会返回400错误。
  • 不要把本地的db.sqlite3上传到Azure,生产环境建议用Azure Database for PostgreSQL或者MySQL,当然如果只是测试的话也可以用,但要确保权限正确。
  • 如果还是显示默认页面,清空浏览器缓存或者用无痕模式访问,有时候是缓存的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:22:30