在 Azure 中部署 FastAPI

问题描述 投票:0回答:1

我正在尝试部署我的应用程序,该应用程序是使用 Python 和 FastAPI 构建的后端以及 HTML 构建的前端。

使用学生登录创建了一个应用程序服务并使用 github 上传了我的代码。

我的项目目录是这样的

Frontend/
|- file.html
|- x.css
FastAPI/
|- main.py
|- other.py
|- requirements.txt

在我的.yml 文件中,我将deploy 中的requirements.txt 和包的目录更改为./fastAPI。但网站网址显示以下消息。

嘿,Python 开发者!

您的应用程序服务已启动并正在运行。是时候采取下一步行动了 部署您的代码。

并且它在 github 工作流程中显示错误消息

部署失败,错误:无法将Web包部署到应用服务。 冲突(代码:409)

我尝试使用 yml 文件中的startup-command来启动FastAPI,但它不起作用并给出以下错误消息

部署失败,错误:启动命令不是有效的输入 Windows Web 应用程序或具有发布配置文件身份验证方案。

我更改了azure门户上的配置以在应用程序设置中添加

WEBSITES_CONTAINER_STARTUP_COMMAND = uvicorn main:app --host 0.0.0.0 --port 80
,但不起作用。

python azure azure-web-app-service fastapi
1个回答
4
投票

我部署了一个简单的 Fast API 项目,以 HTML 和 CSS 作为前端:

我的项目结构:

- FastAPI
    - templates
        - index.html
    -static
        - style.css
    - main.py
    - requirements.txt
  • 创建 Azure 应用服务,其中 Python 作为运行时堆栈,Linux 作为操作系统,并在 Azure 门户中消耗托管计划

enter image description here

  • 在创建应用服务期间配置部署。

enter image description here

  • 点击
    Review+Create
  • 创建应用服务后,它将在您的 GitHub 存储库中生成工作流程,并开始部署。
  • 可以在您的
    GitHub repository=>Actions
    中跟踪部署状态。

我部署 FastAPI 的工作流程:

name: Build and deploy Python app to Azure Web App - <web_app_Name>

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python version
        uses: actions/setup-python@v1
        with:
          python-version: '3.10'

      - name: Create and start virtual environment
        run: |
          python -m venv venv
          source venv/bin/activate
      
      - name: Install dependencies
        run: pip install -r requirements.txt
        
      # Optional: Add step to run tests here (PyTest, Django test suites, etc.)
      
      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v2
        with:
          name: python-app
          path: |
            . 
            !venv/
  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: python-app
          path: .
          
      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v2
        id: deploy-to-webapp
        with:
          app-name: '<web_app_Name>'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_XXXXXXXXXXX }}
Ad

部署成功:

enter image description here

您必须在 App Service=>Settings=>Configuration 中运行 FastAPI 的启动命令:

gunicorn --bind=0.0.0.0 main:app

  • main
    来自文件名
    main.py
    ,app是我在
    main.py
    中使用的对象。

enter image description here

参考资料:

请参阅我关于类似问题的SO 帖子

© www.soinside.com 2019 - 2024. All rights reserved.