Skip to content

上线: 部署

你已经构建了一个健壮且经过测试的应用程序。现在是时候与世界分享它了。部署是将你的应用程序从本地开发机器迁移到生产服务器的过程。

在本地开发时,我们使用 uvicorn main:app --reload。--reload 标志对于开发非常有用,但会消耗资源来检查文件更改。在生产环境中,我们需要稳定性和性能。

进程管理器 (Process Manager) 是一种确保你的应用程序保持运行的工具。如果你的应用程序崩溃,进程管理器会重新启动它。它还可以管理应用程序的多个副本(worker),以处理更多的流量。

目前部署 FastAPI 应用程序最常见和推荐的方式是使用 Docker。Docker 容器将你的代码、Python 运行时以及所有库打包成一个独立的、可移植的单元。

以下是 FastAPI 应用程序的标准 Dockerfile:

# Start from the official Python base image
# 基于官方 Python 基础镜像
FROM python:3.9
# Set the current working directory inside the container
# 设置容器内的工作目录
WORKDIR /code
# Copy the requirements file first to leverage Docker cache
# 首先复制 requirements 文件,以利用 Docker 缓存
COPY ./requirements.txt /code/requirements.txt
# Install dependencies
# 安装依赖
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# Copy the application code
# 复制应用程序代码
COPY ./app /code/app
# Command to run the application using Uvicorn
# 使用 Uvicorn 运行应用程序的命令
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

通过构建此镜像,你可以确保你的应用程序在云服务器上与在你的机器上运行方式完全一致。

虽然 Uvicorn 是一个极快的 ASGI 服务器,但它主要不是一个进程管理器。Gunicorn 是一个成熟的、生产级的进程管理器。

对于高负载工作,推荐的设置是使用 Gunicorn 作为管理器,并由 Uvicorn workers 处理实际数据。这为你提供了两全其美的方案:Gunicorn 的可靠性和 Uvicorn 的速度。

你可以通过安装 gunicorn 并运行类似以下命令来实现此目的:

Terminal window
gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80

因为 FastAPI 基于标准的 Python 和 ASGI,所以你可以在任何地方部署它:

  • PaaS (Platform as a Service,平台即服务): 例如 Heroku、Google App Engine 或 Azure App Service 等服务。
  • CaaS (Containers as a Service,容器即服务): Kubernetes、AWS ECS 或 Google Cloud Run(强烈推荐用于 Docker 镜像)。
  • Serverless (无服务器): AWS Lambda(使用 Mangum 等适配器)。

最后,请记住现代 Web API 必须使用 HTTPS。通常,你会在 Uvicorn/Gunicorn 应用程序前面放置一个“终止代理”(Termination Proxy),例如 Nginx 或 Traefik。此代理负责处理加密证书(例如 Let’s Encrypt),并将纯 HTTP 请求传递给你的应用程序容器,从而简化你的应用程序逻辑。