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

部署于Azure的Django后端无法读取环境变量问题排查

问题症状

通过GitHub Actions将Django后端以Docker容器部署到Azure Web App后:

  • 本地用Docker Compose+.env文件可正常读取环境变量
  • Azure中通过SSH执行python manage.py createsuperuser时,os.environ.get()获取的OPENAI_API_KEY、DATABASE_NAME等变量均为None,触发OpenAIError
  • 已在Azure Web App配置面板中添加所有所需环境变量
可能原因及解决方法

1. SSH会话未加载Azure Web App环境变量

Azure Web App的应用设置(环境变量)默认仅传递给Web服务进程,SSH会话不会自动加载这些变量。

解决步骤:

  • SSH连接容器后,先执行命令加载环境变量:
    source /etc/profile
    
  • 再执行python manage.py createsuperuser即可读取到配置的变量

2. Dockerfile配置限制了环境变量传递

如果Dockerfile中硬编码了环境变量,或启动命令未正确接收外部变量,会覆盖Azure配置的值。

检查并调整Dockerfile:

  • 移除ENV OPENAI_API_KEY=xxx这类硬编码的环境变量
  • 使用CMD或ENTRYPOINT定义启动命令,确保不限制外部变量传入,示例:
    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project.wsgi:application"]
    

3. GitHub Actions工作流禁用了应用设置传递

检查部署工作流中的Azure部署步骤,确保未禁用应用设置传递。

使用azure/webapps-deploy动作时,确认未设置ignore-app-settings: true(默认值为false,会自动传递应用设置),示例:

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v2
  with:
    app-name: 'your-webapp-name'
    slot-name: 'Production'
    images: 'your-acr-name.azurecr.io/your-image:${{ github.sha }}'

4. Django配置文件的变量获取逻辑错误

检查settings.py中的变量获取代码,确认变量名拼写正确,必要时添加存在性校验:

OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY')
# 可选:强制校验变量是否存在
if not OPENAI_API_KEY:
    raise ValueError("OPENAI_API_KEY environment variable is not set")

5. 自定义启动命令未传递环境变量

如果Web App设置了自定义启动命令,需确保命令会将环境变量传递给Django进程。

检查Azure配置:

  • 进入Azure门户 → 目标Web App → 配置 → 常规设置 → 启动命令
  • 确保命令未拦截环境变量,示例:
    gunicorn --bind 0.0.0.0:8000 your_project.wsgi:application
    
验证方法
  • 查看Azure Web App的日志流,检查启动日志中是否有环境变量加载的相关信息
  • 临时添加Django调试接口,返回os.environ中的变量(上线前删除),验证Web进程是否能读取到环境变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:22:09