最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 部署 Python FastAPI 应用程序进行渲染

    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 文档功能。

    下面截图中的文档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 时事通讯,不错过任何一篇文章!

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 部署 Python FastAPI 应用程序进行渲染
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情