萧邦的博客

If not me who, If not now when

在 Vercel 上部署 Python Flask 或 FastAPI 项目

Vercel 是一个广受欢迎的 Web 应用部署平台,以其简单性和无服务器架构而闻名。虽然它常用于部署像 Next.js 这样的前端框架,但 Vercel 也支持基于 Python 的后端框架,如 Flask 和 FastAPI。本文将指导您完成在 Vercel 上部署 Python Flask 或 FastAPI 项目的步骤,包括项目设置、配置和部署。

前提条件

在开始之前,请确保您具备以下条件:

  • 一个 Vercel 账户(在 vercel.com 注册)。
  • 一个准备好部署的 Flask 或 FastAPI 项目。
  • 对 Python、Flask/FastAPI 和 Git 的基本了解。
  • 已安装 Vercel CLI(运行 npm install -g vercel)。
  • 项目已托管在 Git 仓库中(例如 GitHub、GitLab 或 Bitbucket)。

步骤 1:准备您的 Flask/FastAPI 项目

要在 Vercel 上部署 Python 项目,您的应用必须适配 Vercel 的无服务器环境。以下是如何准备 Flask 或 FastAPI 项目。

Flask 项目示例

对于 Flask 项目,确保您的项目结构如下:

my-flask-app/
├── app.py
├── requirements.txt
├── vercel.json

app.py(示例 Flask 应用):

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return '来自 Vercel 上的 Flask 的问候!'

if __name__ == '__main__':
    app.run()

FastAPI 项目示例

对于 FastAPI 项目,结构类似:

my-fastapi-app/
├── main.py
├── requirements.txt
├── vercel.json

main.py(示例 FastAPI 应用):

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
async def root():
    return {'message': '来自 Vercel 上的 FastAPI 的问候!'}

依赖文件

创建一个 requirements.txt 文件,列出项目的依赖项:

# 对于 Flask
flask==2.3.2
gunicorn==20.1.0

# 对于 FastAPI
fastapi==0.95.1
uvicorn==0.21.1

Vercel 使用 gunicorn 作为 Flask 的 WSGI 服务器,使用 uvicorn 作为 FastAPI 的 ASGI 服务器,以在无服务器环境中处理请求。

步骤 2:配置 Vercel

Vercel 需要一个 vercel.json 配置文件来理解如何构建和部署您的 Python 项目。该文件指定了构建过程、路由和运行时设置。

Flask 的 Vercel 配置

在项目根目录创建 vercel.json 文件:

{
  "version": 2,
  "builds": [
    {
      "src": "app.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "app.py"
    }
  ]
}

FastAPI 的 Vercel 配置

对于 FastAPI,vercel.json 文件因其 ASGI 特性略有不同:

{
  "version": 2,
  "builds": [
    {
      "src": "main.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "main.py"
    }
  ]
}

vercel.json 说明

  • "version": 2:指定 Vercel 配置版本。
  • "builds":定义构建过程。这里我们使用 @vercel/python 运行时来处理 Python 应用。
  • "routes":将所有传入请求映射到您的应用文件(Flask 为 app.py,FastAPI 为 main.py)。

步骤 3:本地测试

在部署之前,先在本地测试您的应用以确保其正常运行。

对于 Flask:

pip install -r requirements.txt
gunicorn --bind 0.0.0.0:8000 app:app

对于 FastAPI:

pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000

在浏览器中访问 http://localhost:8000 以验证应用是否运行正常。

步骤 4:部署到 Vercel

项目准备好后,您可以将其部署到 Vercel。

  1. 初始化 Git 仓库(如果尚未完成): git init git add . git commit -m "初始提交"
  2. 推送到 Git 托管服务(如 GitHub): git remote add origin <您的仓库地址> git push origin main
  3. 将 Vercel 链接到您的仓库
    • 使用 CLI 登录 Vercel:vercel login
    • 部署您的项目:vercel
    • 按照提示将项目链接到 Git 仓库或直接部署。Vercel 将检测 Python 运行时并使用 vercel.json 中的设置。
  4. 设置环境变量(如需要):
    如果您的应用需要环境变量(例如 API 密钥),在 Vercel 仪表板的 设置 > 环境变量 中添加它们。
  5. 验证部署
    部署完成后,Vercel 会提供一个 URL(例如 https://my-flask-app.vercel.app)。访问该 URL 确认您的应用已上线。

步骤 5:持续部署

要启用持续部署,请将您的 Git 仓库连接到 Vercel:

  • 在 Vercel 仪表板中,前往 新建项目 并导入您的仓库。
  • 配置项目设置(Vercel 会自动检测 vercel.json 文件)。
  • 推送到您的仓库,Vercel 将自动重新部署。

故障排除提示

  • 构建错误:确保 requirements.txt 包含所有依赖项,并且 @vercel/python 与您的 Python 版本兼容(Vercel 支持 Python 3.9+)。
  • 路由问题:检查 vercel.json 中的 routes 是否正确映射到您的应用入口点。
  • 超时错误:Vercel 的无服务器函数有最大执行时间(Hobby 计划为 10 秒,Pro 计划为 60 秒)。优化您的应用以快速响应。
  • 日志:在 Vercel 仪表板的 Functions > Logs 中查看部署日志以进行调试。

最佳实践

  • 保持依赖最小化:在 requirements.txt 中仅包含必要的包,以减少构建时间。
  • 使用环境变量:将敏感数据(例如数据库凭据)存储在 Vercel 的环境变量中。
  • 优化无服务器环境:确保您的应用是无状态的,因为 Vercel 的无服务器环境不会在请求之间保留状态。
  • 使用 Vercel CLI 本地测试:使用 vercel dev 模拟 Vercel 的本地环境。

结论

通过正确的配置,在 Vercel 上部署 Flask 或 FastAPI 项目非常简单。通过设置项目结构、创建 vercel.json 文件并使用 Vercel 的 CLI 或仪表板,您可以在几分钟内让您的 Python 后端上线。无论您是构建简单的 API 还是完整的 Web 应用,Vercel 的无服务器平台都提供了一个可扩展且无忧的部署解决方案。

祝您部署顺利!

鄂ICP备2025138472号-1