优化Azure Web App上Django项目的部署耗时问题
部署提速方案与问题解决
一、跳过压缩解压步骤解决核心耗时问题
Oryx的压缩解压流程是默认用于在构建/运行阶段传递产物的机制,但可通过配置直接跳过:
- 在Azure Web App的配置 > 应用设置中添加变量:
ORYX_SKIP_COMPRESSION=true - 该变量会让Oryx直接将构建产物复制到目标运行目录,完全跳过
Compressing content of directory '/tmp/_preCompressedDestinationDir'步骤,直接解决你遇到的800+秒耗时问题。
二、正确修改Oryx Manifest配置
自定义上传oryx-manifest.toml会被Oryx自动生成的文件覆盖,必须通过**应用设置(环境变量)**来覆盖配置项:
- 单个配置项:直接设置对应环境变量,比如修改虚拟环境名称:
ORYX_PYTHON_VIRTUAL_ENV_NAME=my_custom_env - 多个配置项:使用
ORYX_MANIFEST_OVERRIDES变量,用分号分隔键值对,例如:ORYX_MANIFEST_OVERRIDES="pythonVersion=3.10;virtualEnvName=my_custom_env;skipCollectStatic=true" - 常用可覆盖项:
pythonVersion、virtualEnvName、skipCollectStatic、buildCommand等。
三、通用部署提速建议
缓存虚拟环境与依赖
- 添加应用设置
ORYX_CACHE_DIR=/home/site/wwwroot/.oryx_cache,让Oryx复用之前构建的虚拟环境,避免每次重新安装所有依赖。 - 在
requirements.txt中固定依赖版本(如django==4.2.0而非django>=4.2),减少版本解析耗时。
- 添加应用设置
跳过不必要的构建步骤
- 若静态文件已提前收集并托管在CDN,添加
SKIP_COLLECT_STATIC=true跳过Django的collectstatic步骤。 - 若未涉及依赖变更,添加
SKIP_BUILD=true(仅适用于已提前构建好的代码上传场景)。
- 若静态文件已提前收集并托管在CDN,添加
小代码变更的高效部署方式
- 增量文件同步:使用Azure CLI命令
az webapp deploy --resource-group <rg-name> --name <app-name> --src-path <local-file-or-dir> --target-path /home/site/wwwroot/<target-path>,仅上传变更的文件(如视图、模板、静态文件),跳过完整构建流程。 - Zip部署:在本地完成依赖安装和静态文件收集后,将项目打包为Zip,通过Azure门户或CLI上传,添加应用设置
SCM_DO_BUILD_DURING_DEPLOYMENT=false跳过Oryx构建,直接解压运行。 - 部署槽位交换:先将代码部署到预生产槽位,槽位部署完成后再交换到生产环境,既避免用户感知部署延迟,又能让槽位复用构建缓存。
- 增量文件同步:使用Azure CLI命令
临时升级实例资源
- 可临时将P2v2实例升级到更高规格(如P3v2)完成构建后再降级,利用更高CPU/内存加速压缩、依赖安装等耗时步骤。
内容的提问来源于stack exchange,提问作者btavares
相关产品推荐
相关产品推荐

