我正在尝试部署我的应用程序,该应用程序是使用 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
,但不起作用。
我部署了一个简单的 Fast API 项目,以 HTML 和 CSS 作为前端:
我的项目结构:
- FastAPI
- templates
- index.html
-static
- style.css
- main.py
- requirements.txt
Review+Create
。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
部署成功:
您必须在 App Service=>Settings=>Configuration 中运行 FastAPI 的启动命令:
gunicorn --bind=0.0.0.0 main:app
main
来自文件名main.py
,app是我在main.py
中使用的对象。参考资料:
请参阅我关于类似问题的SO 帖子。