☰
FastAPI 手动部署指南:从 `fastapi run` 到生产级 ASGI 服务器配置
2026/10/15 11:04:26 网站建设 项目流程

FastAPI 手动部署指南:从fastapi run到生产级 ASGI 服务器配置

【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi

本篇技术指南聚焦于 FastAPI 应用在生产环境中的手动部署方式:先介绍开箱即用的fastapi run命令,再深入讲解 ASGI 服务器(Uvicorn 等)的安装与手动启动方法,最后梳理部署前必须理解的核心概念(HTTPS、开机自启、重启、进程复制、内存、启动前步骤)。读完本文,你将掌握如何在一台远程 Linux 服务器上亲手把 FastAPI 应用跑起来,并为后续容器化、多进程等进阶部署打下基础。

一、最简方案:使用fastapi run命令

绝大多数场景下,启动一个 FastAPI 应用只需要一条命令:

$ fastapi run main.py FastAPI Starting production server 🚀 Searching for package file structure from directories with __init__.py files Importing from /home/user/code/awesomeapp module 🐍 main.py code Importing the FastAPI app object from the module with the following code: from main import app app Using import string: main:app server Server started at http://0.0.0.0:8000 server Documentation at http://0.0.0.0:8000/docs Logs: INFO Started server process [2306215] INFO Waiting for application startup. INFO Application startup complete. INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

这条命令默认监听0.0.0.0:8000,自动探测模块结构并导入应用对象,同时为你托管交互式 API 文档(/docs)。它可以直接用于在容器、云服务器、虚拟机等场景中启动 FastAPI 应用。

fastapi命令从哪来?

从仓库源码看,fastapi命令的入口定义在 pyproject.toml:

[project.scripts] fastapi = "fastapi.cli:main"

而 fastapi/cli.py 中可以看到,真正的 CLI 实现来自独立的fastapi-cli包:

try: from fastapi_cli.cli import main as cli_main except ImportError: # pragma: no cover cli_main = None

如果未安装fastapi-cli,运行fastapi命令会提示你安装fastapi[standard]。在 pyproject.toml 的standard可选依赖中可以看到,fastapi[standard]同时会带来fastapi-cli[standard]与uvicorn[standard] >=0.12.0——这就是为什么fastapi run内置了生产级服务器 Uvicorn。

二、认识 ASGI 服务器

FastAPI 基于 Python 的ASGI(Asynchronous Server Gateway Interface,异步服务器网关接口)标准构建,它本身是一个ASGI Web 框架。要在远程服务器上运行 FastAPI 应用(或任何其他 ASGI 应用),核心要件是一个ASGI 服务器程序,例如Uvicorn——这也是fastapi命令默认携带的服务器。

常见的 ASGI 服务器替代品包括:

服务器特点
Uvicorn高性能 ASGI 服务器,FastAPI 默认选择
Hypercorn兼容 HTTP/2 与 Trio 异步库,功能更丰富
Daphne为 Django Channels 打造的 ASGI 服务器
Granian面向 Python 应用的 Rust 实现的 HTTP 服务器

不同 ASGI 服务器的启动命令大同小异,具体参数可查阅各自文档。对于 FastAPI 项目,Uvicorn 是最主流、与生态集成最顺畅的选择。

三、两个易混淆的概念:服务器机器与服务器程序

"服务器"这个词在日常语境中通常指代两种截然不同的东西:

  1. 远程/云计算机器:物理机或虚拟机,通常运行 Linux,是程序运行的载体。它也可能被称为机器(machine)、虚拟机(VM)、节点(node)。
  2. 服务器程序:运行在那台机器上的软件进程,例如 Uvicorn。

阅读资料时遇到 "server" 一词,先判断它指的是哪一层——是买来的那台机器,还是跑在机器上的程序。这一区分对理解后续的部署方案至关重要。

四、手动安装 ASGI 服务器程序

安装 FastAPI 时默认自带生产级服务器 Uvicorn,可直接用fastapi run启动。但如果你希望手动安装并控制ASGI 服务器,以 Uvicorn 为例:

$ uv add "uvicorn[standard]" ---> 100%

💡提示

追加standard标识后,Uvicorn 会安装并启用一组推荐的额外依赖,其中包含uvloop——asyncio的高性能替代实现,能显著提升并发性能。同理,执行uv add "fastapi[standard]"时也会一并获得uvicorn[standard]。这一点在 pyproject.toml 中也有印证:standard与all两组可选依赖均声明了uvicorn[standard] >=0.12.0。

其他 ASGI 服务器(Hypercorn、Daphne、Granian 等)的安装流程完全类似。

五、手动运行服务器程序:理解导入字符串

手动安装 ASGI 服务器后,启动时需要以特定格式传入导入字符串(import string),让服务器找到你的 FastAPI 应用:

$ uv run uvicorn main:app --host 0.0.0.0 --port 80 INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)

其中uvicorn main:app的含义是:

  • main:Python 模块,即文件main.py;
  • app:在main.py内通过app = FastAPI()创建的应用对象。

它完全等价于 Python 代码:

from main import app

命令行中的--host 0.0.0.0让服务器监听所有网络接口(从而允许外部客户端访问),--port 80则指定监听端口(默认 8000,80 是 HTTP 标准端口)。每个替代的 ASGI 服务器程序都有类似的命令形式,细节请查阅对应文档。

⚠️警告

Uvicorn 等服务器支持--reload选项,它在开发阶段非常有用,可以监听代码变化自动重启。但--reload会消耗多得多的资源、稳定性也更差,生产环境绝不应该使用。生产部署应当使用稳定、常驻的进程运行方式。

六、部署核心概念:上线前必须想清楚的事

上述示例的运行方式本质是:启动单个进程,在所有 IP(0.0.0.0)的预定义端口(如80)上监听。这是最基础的形态,但生产环境通常还需要处理更多问题:

  • 安全(HTTPS):为 API 提供加密传输,通常由应用服务器之外的TLS 终止代理(如 Traefik、Caddy、Nginx、HAProxy 或 Kubernetes Ingress)负责,并处理证书自动续期;也可以交由云服务商托管。
  • 开机自启:远程服务器重启后(例如系统更新、云厂商迁移),手动启动的进程不会自动恢复。需要借助 Docker、Kubernetes、Docker Compose、Swarm 模式、Systemd、Supervisor 等独立程序,让应用在服务器启动时自动拉起,无需人工干预。
  • 重启(崩溃恢复):FastAPI 通常能把代码错误限制在触发错误的单个请求内,客户端只收到500 Internal Server Error,应用继续服务后续请求;但若代码导致整个进程崩溃,则需要外部组件负责重启进程。通常负责开机自启的工具同时负责自动重启。
  • 复制(进程数/Worker):单进程即可并发服务多个客户端;当单机多核、客户端量超过单进程承载能力时,可以运行多个 worker 进程分摊请求。fastapi run --workers 4或uvicorn main:app --workers 4即可启动多进程(详见 Server Workers - Uvicorn with Workers)。注意:同一 IP 与端口组合只能有一个进程监听,必须由一个管理进程统一监听端口并把通信分发到各 worker。
  • 内存:多个进程之间不共享内存。例如代码加载了 1 GB 的机器学习模型,启动 4 个 worker 就会占用约 4 GB RAM;如果服务器只有 3 GB 内存就会出问题。衡量资源利用率(如用htop观察 CPU 与内存),目标是在"尽可能充分利用资源"与"留有余量避免崩溃"之间取平衡。
  • 启动前步骤:例如数据库迁移,通常只需执行一次,应由单个进程完成;若由多个 worker 并行执行,可能产生重复操作甚至相互冲突。常见策略是 Kubernetes 的 Init Container,或用先执行前置步骤再启动应用的 bash 脚本。

关于上述概念的完整讲解与具体工具对比,可继续阅读 Deployments Concepts;容器化部署方案见 FastAPI in Containers - Docker;HTTPS 与证书细节见 About HTTPS。

七、小结

手动部署 FastAPI 应用的两条主路径清晰明了:

  1. 开箱即用:fastapi run main.py——FastAPI 自带的 Uvicorn 生产服务器直接启动,适用于绝大多数场景;
  2. 手动掌控:uv add "uvicorn[standard]"+uv run uvicorn main:app --host 0.0.0.0 --port 80——自己安装并精确控制 ASGI 服务器。

在此基础上,生产环境还需要依次解决 HTTPS、开机自启、崩溃重启、多进程复制、内存规划与启动前步骤等部署概念。理解这些概念,你就拥有了在任何环境(甚至未来尚未出现的技术栈)中自主设计 FastAPI 部署方案的直觉与能力。

【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询