python-appservice-deploy

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Python on Azure App Service — Code Deploy

在Azure App Service上部署Python代码

Deploys Python (Flask, Django, FastAPI, generic) code to Azure App Service Linux (P0v3, Python 3.14). Creates RG + Plan + Web App if missing. Hand off to
azure-prepare
for VNet, Key Vault, databases, or IaC.
MCP tools used:
mcp_azure_mcp_subscription_list
,
mcp_azure_mcp_group_list
,
mcp_azure_mcp_appservice
,
mcp_azure_mcp_azd
(when
azure.yaml
is present).
将Python(Flask、Django、FastAPI及通用型)代码部署至Azure App Service Linux(P0v3实例,Python 3.14版本)。若资源组(RG)、应用服务计划(Plan)、Web应用不存在则自动创建。如需处理虚拟网络(VNet)、密钥保管库(Key Vault)、数据库或基础设施即代码(IaC)相关内容,请转交
azure-prepare
工具处理。
使用的MCP工具
mcp_azure_mcp_subscription_list
mcp_azure_mcp_group_list
mcp_azure_mcp_appservice
mcp_azure_mcp_azd
(当存在
azure.yaml
文件时)。

Workflow

工作流程

  1. Resolve context — smart defaults, minimal prompts. Only the app name is interactive; RG (
    <app>-rg
    ), Plan (
    <app>-plan
    ), region (current
    az
    default or
    eastus2
    ), subscription are derived. create-app.md §1.
  2. Detect framework (advisory, never blocks). detect.md.
  3. Choose path
    azure.yaml
    host: appservice → deploy-azd.md; else deploy-azcli.md.
  4. Ensure RG → Plan (
    P0v3 --is-linux
    ) → Web App (
    --runtime "PYTHON:3.14"
    )
    exist. On transient ARM errors, follow transient-retry.md. create-app.md.
  5. Set startup — Flask/Django: none (Oryx auto-detects). FastAPI: always
    python -m uvicorn main:app --host 0.0.0.0
    . Other: warn. startup-commands.md.
  6. Set
    SCM_DO_BUILD_DURING_DEPLOYMENT=true
    .
  7. Deploy
    azd deploy
    or
    az webapp deploy --type zip --track-status false
    .
  8. STOP. Print the post-deploy message (post-deploy-message.md) and end the turn.
  1. 解析上下文——智能默认值,最少交互提示。仅应用名称需手动输入;资源组(命名格式为
    <app>-rg
    )、应用服务计划(命名格式为
    <app>-plan
    )、区域(默认使用当前
    az
    工具的配置或
    eastus2
    )、订阅信息均自动推导。详情见create-app.md第1节。
  2. 检测框架(仅提供建议,不会阻止部署)。详情见detect.md
  3. 选择部署路径——若存在
    azure.yaml
    配置文件:采用appservice路径 → 参考deploy-azd.md;否则参考deploy-azcli.md
  4. **确保资源组→应用服务计划(
    P0v3 --is-linux
    )→Web应用(
    --runtime "PYTHON:3.14"
    )**已存在。若遇到ARM临时错误,请遵循transient-retry.md中的重试机制。详情见create-app.md
  5. 设置启动命令——Flask/Django:无需设置(Oryx会自动检测)。FastAPI:必须设置为
    python -m uvicorn main:app --host 0.0.0.0
    。其他框架:发出警告。详情见startup-commands.md
  6. 设置
    SCM_DO_BUILD_DURING_DEPLOYMENT=true
  7. 执行部署——使用
    azd deploy
    az webapp deploy --type zip --track-status false
    命令。
  8. 停止操作。打印部署后提示信息(参考post-deploy-message.md)并结束流程。

Hard rules

硬性规则

  • NO POST-DEPLOY VERIFICATION — after deploy returns, do not run
    az webapp log tail
    ,
    curl
    ,
    Invoke-WebRequest
    , or any health probe. App Service needs 2–3 min to warm; a quiet log or early 5xx is not failure.
  • SHELL SAFETY — for
    --runtime
    always use
    "PYTHON:3.14"
    (colon). Never
    "PYTHON|3.14"
    (pipe is a shell operator).
  • NEVER
    az webapp up
    — deprecated. Use Step 7 commands.
  • URL FORMAT — present endpoints as
    https://...
    URLs.
  • 禁止部署后验证——部署命令返回后,请勿运行
    az webapp log tail
    curl
    Invoke-WebRequest
    或任何健康探测命令。App Service需要2-3分钟启动预热;静默日志或早期的5xx状态码不代表部署失败。
  • Shell安全规范——设置
    --runtime
    参数时必须使用
    "PYTHON:3.14"
    (冒号分隔)。严禁使用
    "PYTHON|3.14"
    (竖线是Shell操作符)。
  • 禁止使用
    az webapp up
    命令
    ——该命令已被弃用。请使用步骤7中的命令。
  • URL格式规范——展示端点时需使用
    https://...
    格式的URL。

Error Handling

错误处理

See errors.md for the full symptom → cause → fix matrix. Quick triage: missing plan/app → re-run Step 4; container ping timeout on 8000 → fix startup (Step 5);
ModuleNotFoundError
after deploy → ensure Step 6 ran, redeploy.
完整的症状→原因→修复矩阵请参考errors.md。快速排查指南:缺少应用服务计划/Web应用→重新执行步骤4;容器8000端口 ping超时→修复启动命令(步骤5);部署后出现
ModuleNotFoundError
→确认步骤6已执行,重新部署。