【问题标题】:How can I deploy FastAPI manually on a Ubuntu Server?如何在 Ubuntu 服务器上手动部署 FastAPI?
【发布时间】:2021-01-06 11:25:14
【问题描述】:

我有一个非常简单的 API(2 个路由),它只有 GET 请求,现在不需要任何身份验证或任何东西。

我想知道将我的 API 部署到生产环境的最佳和适当方式是什么。我无法使用 docker,并希望以服务器方式进行。

所以我有几个问题:

  • 在 fastapi 文档中它说你可以做 uvicorn main:app --host 0.0.0.0 --port 80 但我在想这是否是正确的生产方式?我是否只需输入该命令,API 会自动开始侦听服务器 IP 地址吗?这种方法是否有效,是否能够处理所有请求?或者我会改变什么让它更快?
  • 什么时候应该使用流程管理器?
  • 什么时候应该使用多个工人?它们有什么好处?
  • 我应该什么时候使用这里提到的 Gunicorn? https://www.uvicorn.org/deployment/#gunicorn

我只是对如何部署它有点困惑,因为一篇文章说这样做,另一篇说这样做。

【问题讨论】:

  • 每个问题只问一个问题,并确保它与编程(编写代码)有关!

标签: python fastapi


【解决方案1】:

如果出于某种原因您不喜欢使用 Docker-Ce,最好的方法是为您的应用程序创建一个 systemd-service 单元,这样每次它出现故障时,systemd 都会尝试重新启动它,然后运行它像 wgsigunicorn 这样的服务器。

此链接也可以帮助了解 systemd-services:

https://blog.miguelgrinberg.com/post/running-a-flask-application-as-a-service-with-systemd

P.S 请注意,您提供 gunicorn 的方式与 docker 或 systemd-service 并没有真正的关系,因为这两种方法都需要配置 gunicorn。

【讨论】:

  • 感谢您的回复。我需要配置独角兽是什么意思?配置它有什么好处?或者如果我不这样做会怎样?
  • 通过配置我的意思是无论你使用docker还是systemd-service,你都需要传递worker数量等选项,可能nginx + systemd-service + gunicron会帮助你为你的应用程序提供服务最好的方法是假设您不想使用 docker。检查这个:docs.gunicorn.org/en/stable/deploy.html
  • 非常感谢您提供此信息。你帮我找到了答案。另外,如果我使用 nginx,我可能不需要 systemd 服务,因为 nginx 就是它。
  • 欢迎您,请记住,nginx 将是您的 Web 服务器,您需要保持您的 Web 应用程序处于活动状态,有时 Web 应用程序会因多种原因出现故障,请注意您需要 docker compose 或 systemd - 带有restart on failure 选项的单元。
【解决方案2】:

回答你的问题:

如何在 Ubuntu 服务器上手动部署 FastAPI?

您可以查看此视频教程,了解如何 Deploy FastAPI on Ubuntu

部署在单个 Ubuntu VM 中具有以下架构。

当您查看上面的 FastAPI 部署架构图时,它显示了单个 VM 部署。

在 Ubuntu VM 中,有两个 systemd 服务,即 caddy.servicegunicorn.service 正在运行。 gunicorn.service 运行 FastAPI 应用程序,caddy.serviceuvicorn.workers.UvicornWorker 工作类的帮助下将 Gunicorn 上运行的 FastAPI 应用程序公开为反向代理。除此之外,我们的 FastAPI 借助 databases 包以异步方式与 PostgreSQL 数据库服务器通信,该包为 PostgreSQL 数据库提供简单的 asyncio 支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多