0

0

部署 Python FastAPI 应用程序进行渲染

王林

王林

发布时间:2024-07-11 22:40:12

|

680人浏览过

|

来源于dev.to

转载

python 框架的世界中,fastapi 是新生事物,也是构建 api 的绝佳选择。同样,对于想要在生产环境中免费快速测试应用程序的开发人员来说,render 是一个不错的选择。

在这篇文章中,我们将介绍如何将 fastapi 应用程序部署到渲染。首先,我们来探讨一下为什么开发者经常选择 fastapi 和 render。

为什么选择 fastapi?

fastapi 是一个高性能微框架,主要用于构建 api(线索就在名称中)。因此,与 django 和 flask 等较旧的、更知名的框架相比,fastapi 具有多种优势。

fastapi 第一个也是最明显的优势是它在构建时考虑了可扩展性和性能。

例如,fastapi 基于异步 asgi 服务器,而不是 django 和其他框架使用的旧版 wsgi。 asgi 服务器可以同时(并发)处理多个请求。对于需要处理高水平用户流量的应用程序来说,这通常被视为更好的选择。

立即学习Python免费学习笔记(深入)”;

fastapi 还让开发者可以更轻松地编写异步代码,只需在定义异步函数时使用 async 关键字即可。

但是fastapi闪亮的“新鲜感”也是它的主要缺点。由于 fastapi 于 2018 年才推出,因此与更成熟的框架相比,fastapi 的社区要小得多,学习资源(例如编码教程)也更少。当您为下一个项目选择 fastapi 时,请记住这一点。

为什么要渲染?

对于想要在生产环境中免费快速测试其应用程序的开发人员来说,render 是一个不错的选择。

使用 render,您甚至无需输入信用卡详细信息即可访问免费套餐。因此,与其他云服务不同,没有办法错误地收取费用。

正如我们将在下面的部分中看到的,render 还提供了出色的整体开发人员体验,具有干净、非常易于使用的 ui 以及与 git 和 github 的平滑集成。额外的好处是,您在 render 上托管的任何应用程序都会立即获得免费的 tls 证书。

render 免费套餐的缺点是部署可能需要很长时间才能完成。一旦这开始成为问题,您可能需要考虑升级到付费计划之一。

创建 fastapi 演示应用程序

您可以查看、下载或克隆本文中使用的完整代码。

我们需要做的第一件事是创建一个空目录来存放我们的项目。我们称之为 fastapi-render-appsignal。

在终端中运行以下命令:

mkdir fastapi-render-appsignal
cd flask-heroku-appsignal
touch main.py

项目的入口点将是 main.py.

接下来,我们需要在根目录中运行 git initialize 命令,使我们的项目成为 git 存储库:

git init

另外,在项目根目录下创建一个requirements.txt 文件。将这两行添加到文件中:

fastapi
uvicorn[standard]

然后运行:

pip install -r requirements.txt

如果安装顺利,您应该在终端中看到以下输出:

installing collected packages: websockets, uvloop, typing-extensions, sniffio, pyyaml, python-dotenv, idna, httptools, h11, exceptiongroup, click, annotated-types, uvicorn, pydantic-core, anyio, watchfiles, starlette, pydantic, fastapi
successfully installed annotated-types-0.6.0 anyio-4.2.0 click-8.1.7 exceptiongroup-1.2.0 fastapi-0.109.0 h11-0.14.0 httptools-0.6.1 idna-3.6 pydantic-2.5.3 pydantic-core-2.14.6 python-dotenv-1.0.1 pyyaml-6.0.1 sniffio-1.3.0 starlette-0.35.1 typing-extensions-4.9.0 uvicorn-0.27.0 uvloop-0.19.0 watchfiles-0.21.0 websockets-12.0

现在,在 main.py 中,复制并粘贴以下准系统样板代码:

from fastapi import fastapi

app = fastapi()

@app.get("/")
async def root():
    return {"message": "hello world"}

让我们逐行解释一下这个简短的代码片段中所做的事情。

  1. 在 import 语句之后,我们创建 fastapi 类的实例并将其分配给变量 app。
  2. @app.get("/") 是一个 python 装饰器,它告诉 fastapi 通过 http get 方法在根 url /.
  3. 创建一个 api 端点
  4. async def root() 定义了一个名为 root 的异步函数。我们在这里使用 async 关键字,因为 fastapi 是为处理异步 i/o 操作而构建的。这意味着它可以处理并发请求,这对性能来说更好。
  5. 在函数体中,我们返回一个 python 字典,fastapi 会帮助我们将其转换为 json。因此,当用户转到根/端点时,我们的 api 将自动使用 json 对象进行响应。

我们现在可以使用服务器包 uvicorn(我们之前安装的)通过以下命令运行我们的项目:

uvicorn main:app --reload

如果我们打开浏览器 http://127.0.0.1:8000,我们只会看到以下纯 json 响应:

{ "message": "hello world" }

但是如果我们在 url 末尾添加 /docs,我们就可以利用 fastapi 内置的交互式 api 文档功能。

倍塔塞司
倍塔塞司

AI职业规划、AI职业测评、定制测评、AI工具等多样化职业类AI服务。

下载

下面截图中的文档ui由swagger ui提供:

部署 Python FastAPI 应用程序进行渲染

您还可以尝试 fastapi 自动包含的另一种文档 ui 样式。

在浏览器中输入网址http://127.0.0.1:8000/redoc。

这个是redoc提供的:

部署 Python FastAPI 应用程序进行渲染

在渲染上部署

这部分假设您已经在 github 上为此项目创建了一个存储库。如果您需要有关如何执行此操作的说明,请查看 github 的官方文档。

render 的优点之一是它提供了一种简单直观的方式来连接到 github 存储库。

首先,转到 render.com 并使用 render 创建一个新帐户(您可以使用 github 凭据来加快速度)。

然后单击新建 按钮并选择创建新网络服务的选项。

链接您的 github 帐户后,您应该看到下面的屏幕,其中提供了用于连接到 render 的 github 存储库列表。让我们选择我们的 fastapi-render-appsignal 示例项目。

部署 Python FastAPI 应用程序进行渲染

这将带我们进入主配置屏幕。在区域下,只需选择最接近您所在位置的区域(因为我在英国,所以我会选择法兰克福):

部署 Python FastAPI 应用程序进行渲染

在屏幕的更下方,我们有一些更重要的选项。

build 命令 将使用我们之前在项目中创建的requirements.txt 文件来将项目中的所有包安装到render 的远程服务器上。

start命令下,我们将在生产环境中再次使用uvicorn,并告诉render使用项目根目录中的main.py启动应用程序。

注意: 您必须明确告诉 render 要使用哪个主机和端口(与使用其他服务器(如gunicorn)不同)。不幸的是,任何官方渲染文档中都没有提到这一点,但我在渲染社区论坛和“将 fastapi 应用程序部署到渲染”帖子中找到了解决方案。

部署 Python FastAPI 应用程序进行渲染

接下来,在实例类型列表下选择免费选项:

部署 Python FastAPI 应用程序进行渲染

最后,在环境变量下,指定python版本为3.10.7。确保这与您在本地项目中使用的版本相同。

完成 web 服务配置后,现在我们只需单击

创建 web 服务 按钮并观看项目部署:

部署 Python FastAPI 应用程序进行渲染

请记住,这将需要一些时间,因为我们使用的是免费计划。

如果部署过程结束时一切顺利,我们应该在 render 日志中看到一条最终消息:

“您的服务已上线”.

部署 Python FastAPI 应用程序进行渲染

现在我们可以点击 render 为我们生成的公共链接,查看我们的

hello world fastapi 示例,包括 /docs 和 /redoc 处的自动文档链接:

部署 Python FastAPI 应用程序进行渲染

安装用于 fastapi 的 appsignal 仪表板并监控部署

很高兴我们现在有一个基本的 fastapi 应用程序正在运行并部署到 render,但是如果出现问题怎么办?即使有最好的手动和自动测试,现实情况是软件开发中也会出现错误和错误。关键是一旦发生错误就能收到警报,并快速找出代码中的问题所在。

在本教程的这一部分中,我们将专门研究如何启用 appsignal 来监控您的部署。这部分设置对于您查看哪些错误与特定部署相关至关重要。这将使您能够快速有效地诊断和修复应用程序中的问题。

首先,注册一个 appsignal 帐户(您可以免费试用 30 天,无需信用卡详细信息)。

接下来,将 appsignal 和 opentelemetry-instrumentation-fastapi 添加到您的 requests.txt 文件中:

# requirements.txt
appsignal
opentelemetry-instrumentation-fastapi

然后运行:


pip install -r requirements.txt

现在我们需要创建一个appsignal.py配置文件并添加以下代码:


import os
import subprocess
from appsignal import appsignal
from dotenv import load_dotenv
load_dotenv()

revision = none
try:
    revision = subprocess.check_output(
        "git log --pretty=format:'%h' -n 1", shell=true
    ).strip()
except subprocess.calledprocesserror:
  pass


appsignal = appsignal(
    active=true,
    name="fastapi-render-appsignal",
    push_api_key=os.getenv("appsignal_api_key"),
    revision=revision,
)

在上面的代码中,我们使用几个不同的参数初始化appsignal对象,包括:

    将 active 设置为 true 以启用监控。
  • 提供我们的应用程序的名称。
  • 将 api 密钥放入环境变量中。
但是启用部署跟踪的关键参数是修订参数。在 try-except 块内(appsignal 初始化代码上方),我们获取最新的提交哈希,以便 appsignal 可以跟踪我们的部署。

最后,我们需要更新 main.py 以完成 fastapi 应用中 appsignal 的设置:


# main.py
from fastapi import fastapi
from opentelemetry.instrumentation.fastapi import fastapiinstrumentor #new
import appsignal #new

appsignal.start() #new

app = fastapi()

@app.get("/")
async def root():
    return {"message": "hello world"}

@app.get("/items/{item_id}")
async def get_item(item_id: int):
    return {"item_id": item_id}

fastapiinstrumentor().instrument_app(app) #new

当我们查看 appsignal 仪表板时,我们首先看到的是

入门 屏幕,它将提供一些有关需要完成的其他配置步骤的建议:

部署 Python FastAPI 应用程序进行渲染

但是这里我们只关注确保 appsignal 可以跟踪我们的部署。

转到 appsignal 仪表板中的

组织页面,然后单击组织设置以激活 appsignal 与 github 的集成。查看 appsignal 关于链接您的存储库的官方文档以获取分步说明。

设置 github 集成并链接您的存储库后,您现在需要做的就是在 render for appsignal 中触发部署以开始监控您的部署。

在我们的例子中,我们只需推送到我们的主分支:


git push origin main

如果一切设置正确,我们应该在仪表板的

deploys部分中看到 appsignal 跟踪我们的部署以及与每个部署提交哈希相关的任何错误:

deploys screen in appsignal dashboard

就是这样!

包起来

在本指南中,我们涵盖了很多内容!首先我们简单介绍一下选择fastapi和render的一些优缺点。

然后,我们创建了一个简单的 fastapi 应用程序,将其部署到 render,最后通过使用 appsignal 监控这些部署来结束。

快乐编码!

p.s.如果您想在 python 文章发布后立即阅读,请订阅我们的 python wizardry 时事通讯,不错过任何一篇文章!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

89

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

72

2025.12.15

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

420

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

536

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

27

2025.12.22

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

1106

2026.01.21

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号