ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/10 5:47:19 拓冰建站 浏览量
FastAPI 手动部署指南:从 `fastapi run` 到生产级 ASGI 服务器配置 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 CTRLC 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 的ASGIAsynchronous 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 是最主流、与生态集成最顺畅的选择。三、两个易混淆的概念服务器机器与服务器程序服务器这个词在日常语境中通常指代两种截然不同的东西远程/云计算机器物理机或虚拟机通常运行 Linux是程序运行的载体。它也可能被称为机器machine、虚拟机VM、节点node。服务器程序运行在那台机器上的软件进程例如 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 CTRLC to quit)其中uvicorn main:app的含义是mainPython 模块即文件main.pyapp在main.py内通过app FastAPI()创建的应用对象。它完全等价于 Python 代码from main import app命令行中的--host 0.0.0.0让服务器监听所有网络接口从而允许外部客户端访问--port 80则指定监听端口默认 800080 是 HTTP 标准端口。每个替代的 ASGI 服务器程序都有类似的命令形式细节请查阅对应文档。⚠️警告Uvicorn 等服务器支持--reload选项它在开发阶段非常有用可以监听代码变化自动重启。但--reload会消耗多得多的资源、稳定性也更差生产环境绝不应该使用。生产部署应当使用稳定、常驻的进程运行方式。六、部署核心概念上线前必须想清楚的事上述示例的运行方式本质是启动单个进程在所有 IP0.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 - DockerHTTPS 与证书细节见 About HTTPS。七、小结手动部署 FastAPI 应用的两条主路径清晰明了开箱即用fastapi run main.py——FastAPI 自带的 Uvicorn 生产服务器直接启动适用于绝大多数场景手动掌控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),仅供参考