跳过到内容

手动运行服务器

使用 fastapi run 命令

简而言之,使用 fastapi run 来运行您的 FastAPI 应用程序

$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:single">main.py</u>
<font color="#3465A4">INFO    </font> Using path <font color="#3465A4">main.py</font>
<font color="#3465A4">INFO    </font> Resolved absolute path <font color="#75507B">/home/user/code/awesomeapp/</font><font color="#AD7FA8">main.py</font>
<font color="#3465A4">INFO    </font> Searching for package file structure from directories with <font color="#3465A4">__init__.py</font> files
<font color="#3465A4">INFO    </font> Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>

 ╭─ <font color="#8AE234"><b>Python module file</b></font> ─╮
 │                      │
 │  🐍 main.py          │
 │                      │
 ╰──────────────────────╯

<font color="#3465A4">INFO    </font> Importing module <font color="#4E9A06">main</font>
<font color="#3465A4">INFO    </font> Found importable FastAPI app

 ╭─ <font color="#8AE234"><b>Importable FastAPI app</b></font> ─╮
 │                          │
 │  <span style="background-color:#272822"><font color="#FF4689">from</font></span><span style="background-color:#272822"><font color="#F8F8F2"> main </font></span><span style="background-color:#272822"><font color="#FF4689">import</font></span><span style="background-color:#272822"><font color="#F8F8F2"> app</font></span><span style="background-color:#272822">  </span>  │
 │                          │
 ╰──────────────────────────╯

<font color="#3465A4">INFO    </font> Using import string <font color="#8AE234"><b>main:app</b></font>

 <font color="#4E9A06">╭─────────── FastAPI CLI - Production mode ───────────╮</font>
 <font color="#4E9A06">│                                                     │</font>
 <font color="#4E9A06">│  Serving at: http://0.0.0.0:8000                    │</font>
 <font color="#4E9A06">│                                                     │</font>
 <font color="#4E9A06">│  API docs: http://0.0.0.0:8000/docs                 │</font>
 <font color="#4E9A06">│                                                     │</font>
 <font color="#4E9A06">│  Running in production mode, for development use:   │</font>
 <font color="#4E9A06">│                                                     │</font>
 <font color="#4E9A06">│  </font><font color="#8AE234"><b>fastapi dev</b></font><font color="#4E9A06">                                        │</font>
 <font color="#4E9A06">│                                                     │</font>
 <font color="#4E9A06">╰─────────────────────────────────────────────────────╯</font>

<font color="#4E9A06">INFO</font>:     Started server process [<font color="#06989A">2306215</font>]
<font color="#4E9A06">INFO</font>:     Waiting for application startup.
<font color="#4E9A06">INFO</font>:     Application startup complete.
<font color="#4E9A06">INFO</font>:     Uvicorn running on <b>http://0.0.0.0:8000</b> (Press CTRL+C to quit)

这适用于大多数情况。 😎

例如,您可以使用该命令在容器、服务器等中启动您的 FastAPI 应用程序。

ASGI 服务器

让我们深入了解一下细节。

FastAPI 使用一种构建 Python Web 框架和服务器的标准,称为 ASGI。FastAPI 是一个 ASGI Web 框架。

在远程服务器机器上运行 FastAPI 应用程序(或任何其他 ASGI 应用程序)的主要内容是 ASGI 服务器程序,例如 Uvicorn,这是 fastapi 命令中默认提供的程序。

还有其他一些替代方案,包括

  • Uvicorn: 一个高性能 ASGI 服务器。
  • Hypercorn: 一个支持 HTTP/2 和 Trio 等功能的 ASGI 服务器。
  • Daphne: 为 Django Channels 构建的 ASGI 服务器。
  • Granian: 一款为 Python 应用程序提供的 Rust HTTP 服务器。
  • NGINX Unit: NGINX Unit 是一款轻量级、多功能的 Web 应用程序运行时。

服务器机器和服务器程序

需要注意的是,名称方面有一个小细节。 💡

"服务器" 一词通常用于指代远程/云计算机(物理或虚拟机器),以及在该机器上运行的程序(例如 Uvicorn)。

请记住,当您在一般情况下阅读 "服务器" 时,它可能指代这两者之一。

当指代远程机器时,通常称之为 服务器,但也称为 机器VM(虚拟机)、节点。这些都指代某种类型的远程机器,通常运行 Linux,您可以在其中运行程序。

安装服务器程序

安装 FastAPI 时,它附带一个生产服务器 Uvicorn,您可以使用 fastapi run 命令启动它。

但您也可以手动安装 ASGI 服务器。

确保您创建一个 虚拟环境,激活它,然后您可以安装服务器应用程序。

例如,要安装 Uvicorn

$ pip install "uvicorn[standard]"

---> 100%

类似的过程适用于任何其他 ASGI 服务器程序。

提示

通过添加 standard,Uvicorn 将安装并使用一些推荐的额外依赖项。

包括 uvloop,它是 asyncio 的高性能直接替换,可以提供巨大的并发性能提升。

当您使用类似 pip install "fastapi[standard]" 的命令安装 FastAPI 时,您也会获得 uvicorn[standard]

运行服务器程序

如果您手动安装了 ASGI 服务器,通常需要以特殊格式传递导入字符串才能导入您的 FastAPI 应用程序。

$ uvicorn main:app --host 0.0.0.0 --port 80

<span style="color: green;">INFO</span>:     Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)

注意

命令 uvicorn main:app 指的是

  • main: 文件 main.py(Python “模块”)。
  • app: 在 main.py 中使用 app = FastAPI() 行创建的对象。

它等同于

from main import app

每个替代 ASGI 服务器程序都具有类似的命令,您可以在各自的文档中了解更多信息。

警告

Uvicorn 和其他服务器支持 --reload 选项,该选项在开发期间非常有用。

--reload 选项会消耗更多资源,更不稳定等。

它在**开发**期间非常有用,但您**不应该**在**生产**中使用它。

部署概念

这些示例运行服务器程序(例如 Uvicorn),启动**单个进程**,监听所有 IP(0.0.0.0)上的预定义端口(例如 80)。

这是基本思想。但您可能希望处理一些额外的事项,例如

  • 安全性 - HTTPS
  • 启动时运行
  • 重启
  • 复制(运行的进程数量)
  • 内存
  • 启动前的步骤

我会在接下来的章节中向您详细介绍每个概念,如何思考它们,以及一些处理它们的具体示例和策略。 🚀