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

Azure DevOps部署Linux Django至App Service过慢问题求助

优化Django应用Azure App Service部署速度与稳定性方案

一、构建阶段优化(削减构建耗时与产物体积)

  • 在Azure DevOps构建阶段预安装依赖
    默认SCM_DO_BUILD_DURING_DEPLOYMENT为false时,App Service会在部署时重新安装依赖,这是耗时核心原因。建议在Azure DevOps构建任务中完成依赖安装,将完整构建产物打包:
# azure-pipelines-prod.yaml中新增构建步骤
- script: |
    python -m venv venv
    source venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt --target ./site-packages
  displayName: 'Install dependencies'
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.SourcesDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
  displayName: 'Archive application'

预打包依赖后,避免App Service端重复执行构建流程。

  • 清理冗余文件
    打包前删除项目中.git、pycache、测试目录、日志文件等非必要内容,缩小部署包体积:
- script: |
    rm -rf .git __pycache__ tests *.log
  displayName: 'Clean unnecessary files'

二、部署方式调整(替换默认任务提升效率)

  • 改用Azure CLI部署任务
    官方「Deploy Azure Web App」任务可能存在额外校验逻辑,改用az webapp deploy对齐手动部署流程,同时获取完整日志:
- task: AzureCLI@2
  inputs:
    azureSubscription: '你的Azure订阅连接'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az webapp deploy --resource-group 你的资源组名 --name project-app --src-path $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip --type zip --async false
  displayName: 'Deploy via Azure CLI'

添加--async false确保等待部署完成,解决无日志反馈问题。

  • 启用Zip Deploy快速运行模式
    设置App Service应用设置WEBSITE_RUN_FROM_PACKAGE=1,应用直接从Zip包运行,无需解包,大幅缩短部署后启动时间:

注意:启用后文件系统只读,需确保Django静态文件已收集至STATIC_ROOT,运行时写入操作(如上传)需改用Azure Blob Storage等外部存储。

三、App Service配置优化

  • 调整构建相关环境变量
    若坚持在App Service端构建,需补充配置:
  1. 设置SCM_DO_BUILD_DURING_DEPLOYMENT=true,同时指定BUILD_COMMAND定义Django构建逻辑:
    BUILD_COMMAND=python manage.py collectstatic --noinput
    
  2. Azure DevOps部署任务选择Zip Deploy方式,避免任务等待超时。
  • 升级实例规格
    低规格实例(如B1、F1)CPU/内存不足会拖慢构建流程,临时升级至B2/B3或P系列实例,验证是否为资源瓶颈导致耗时过长。

四、排查504超时问题

  • 延长部署任务超时时间
    「Deploy Azure Web App」任务默认超时10分钟,无法覆盖16分钟的部署时长,需修改参数:
- task: AzureWebApp@1
  inputs:
    azureSubscription: '你的Azure订阅连接'
    appName: 'project-app'
    package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
  timeoutInMinutes: 30
  displayName: 'Deploy Azure Web App: project-app'
  • 查看SCM详细日志
    即使Azure DevOps部署中心无日志,可通过App Service「高级工具」>「Kudu」>「日志」>「Deployment logs」查看构建部署的具体环节,定位「Building and Deploying」阶段的卡点(如依赖下载慢、静态文件收集耗时等)。

五、其他优化点

  • 缓存pip依赖
    在Azure DevOps构建阶段缓存pip依赖包,避免重复下载:
- task: Cache@2
  inputs:
    key: 'pip | "$(Agent.OS)" | requirements.txt'
    restoreKeys: |
      pip | "$(Agent.OS)"
    path: ~/.cache/pip
  displayName: 'Cache pip dependencies'
  • 启用部署槽位
    使用部署槽位做预热部署,隔离构建流程与生产环境,减少部署超时对用户访问的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:05:07