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端构建,需补充配置:
- 设置
SCM_DO_BUILD_DURING_DEPLOYMENT=true,同时指定BUILD_COMMAND定义Django构建逻辑:BUILD_COMMAND=python manage.py collectstatic --noinput - 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
相关产品推荐
相关产品推荐

