19 部署FastAPI应用

部署 FastAPI 应用是一个重要的步骤,尤其是对于生产环境的应用。我们通常需要考虑高并发、负载均衡、安全性等因素。本文将展示如何使用 UvicornGunicorn 部署 FastAPI 应用,如何将应用容器化并部署到 Docker 中,最终将应用部署到 阿里云

1. 使用 Uvicorn 和 Gunicorn 部署 FastAPI 应用

1.1 使用 Uvicorn 直接运行 FastAPI 应用

Uvicorn 是一个 ASGI 服务器,FastAPI 正是基于 ASGI 架构的,它非常适合处理高并发的 HTTP 请求。使用 Uvicorn 运行 FastAPI 应用非常简单:

# 安装 Uvicorn
pip install uvicorn

# 运行 FastAPI 应用
uvicorn main:app --reload
  • main:app 表示你的 FastAPI 应用文件 main.py 中的 app 实例。
  • --reload 使应用在开发过程中自动重载(仅用于开发环境)。

1.2 使用 Gunicorn 配合 Uvicorn 进行生产环境部署

在生产环境中,我们通常会使用 Gunicorn 配合 Uvicorn 来处理并发请求。Gunicorn 是一个多进程的 WSGI 服务器,它通过 uvicorn.workers.UvicornWorker 实现对 ASGI 应用的支持。

1.2.1 安装 Gunicorn 和 Uvicorn
# 安装 Gunicorn 和 Uvicorn
pip install gunicorn uvicorn
1.2.2 使用 Gunicorn 启动应用
# 使用 Gunicorn 启动 FastAPI 应用
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
  • -w 4:启动 4 个工作进程来处理请求。根据机器的 CPU 核心数可以调整工作进程数。
  • -k uvicorn.workers.UvicornWorker:指定使用 Uvicorn 作为工作进程。

1.3 Gunicorn 配置文件

你还可以通过配置文件来定制 Gunicorn 的行为。例如,你可以创建一个 gunicorn_config.py 配置文件,内容如下:

bind = "0.0.0.0:8000"
workers = 4
worker_class = "uvicorn.workers.UvicornWorker"

然后,通过以下命令使用配置文件启动 Gunicorn:

gunicorn -c gunicorn_config.py main:app

2. 将 FastAPI 应用容器化(Docker 部署)

为了方便部署到不同的环境中,尤其是在云平台上,通常会将应用容器化。Docker 是容器化应用的首选工具,它允许我们打包应用及其依赖,并确保应用在任何环境中都能一致运行。

2.1 创建 Dockerfile

首先,我们需要为 FastAPI 应用编写一个 Dockerfile,来构建镜像并运行应用。以下是一个简单的 Dockerfile 示例:

# 使用官方 Python 镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到容器中的 /app 目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口
EXPOSE 8000

# 运行 Gunicorn 和 Uvicorn 启动应用
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app"]
代码解析:
  • FROM python:3.9-slim:使用官方 Python 镜像,slim 版本比较小,适合生产环境。
  • WORKDIR /app:设置容器内的工作目录为 /app
  • COPY . /app:将当前目录的内容复制到容器内的 /app 目录。
  • RUN pip install --no-cache-dir -r requirements.txt:安装应用所需的 Python 库。
  • EXPOSE 8000:暴露容器的 8000 端口。
  • CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app"]:通过 Gunicorn 和 Uvicorn 启动应用。

2.2 创建 requirements.txt

requirements.txt 文件列出了所有 Python 库的依赖。在应用目录下创建一个 requirements.txt 文件,内容如下:

fastapi
uvicorn
gunicorn

2.3 构建和运行 Docker 容器

  1. 构建 Docker 镜像
docker build -t fastapi-app .
  1. 运行 Docker 容器
docker run -d -p 8000:8000 fastapi-app
  • -d:后台运行容器。
  • -p 8000:8000:将容器的 8000 端口映射到主机的 8000 端口。

现在,你的 FastAPI 应用已经在 Docker 容器中运行,可以通过 http://localhost:8000 进行访问。

3. 将 Docker 容器部署到阿里云

阿里云提供了多种服务来部署和托管应用,常见的有 ECS(Elastic Compute Service)容器服务。下面介绍如何将 Docker 容器部署到阿里云的 ECS 实例 上。

3.1 创建并配置 ECS 实例

  1. 登录到阿里云控制台,进入 ECS 控制台
  2. 创建一个新的 ECS 实例,并选择一个合适的操作系统(例如,选择 Ubuntu)。
  3. 配置安全组规则,确保 8000 端口对外开放,以便可以访问应用。
  4. 配置 SSH 密钥或密码以便远程连接实例。

3.2 安装 Docker

在 ECS 实例上运行以下命令来安装 Docker(以 Ubuntu 为例):

# 更新包列表
sudo apt-get update

# 安装 Docker
sudo apt-get install -y docker.io

# 启动并设置 Docker 在系统启动时自动启动
sudo systemctl start docker
sudo systemctl enable docker

3.3 通过 SSH 连接到 ECS 实例

使用以下命令通过 SSH 连接到你的 ECS 实例:


ssh -i /path/to/your/key.pem ubuntu@your-ecs-public-ip

3.4 将 Docker 镜像推送到阿里云镜像仓库(ACR)

你可以将构建的 Docker 镜像推送到阿里云的 容器镜像服务(ACR),然后从 ACR 拉取镜像到 ECS 实例上。

  1. 登录到阿里云 容器镜像服务
  2. 创建一个新的镜像仓库。
  3. 获取 ACR 仓库的登录地址和认证命令。

在本地使用以下命令登录到 ACR:


docker login --username=your-username --password=your-password registry.cn-hangzhou.aliyuncs.com

然后将 Docker 镜像标记并推送到 ACR:

docker tag fastapi-app registry.cn-hangzhou.aliyuncs.com/your-repository/fastapi-app:latest
docker push registry.cn-hangzhou.aliyuncs.com/your-repository/fastapi-app:latest

3.5 在 ECS 实例上拉取并运行镜像

  1. 登录到你的 ECS 实例。
  2. 拉取你推送到 ACR 的 Docker 镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/your-repository/fastapi-app:latest
  1. 运行 Docker 容器:

docker run -d -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/your-repository/fastapi-app:latest

3.6 配置阿里云负载均衡(可选)

为了应对高并发流量,阿里云提供了 负载均衡(SLB) 服务,你可以配置负载均衡,将流量分发到多个 ECS 实例或容器中。

4. 总结

在本教程中,我们展示了如何使用 UvicornGunicorn 部署 FastAPI 应用,并将其容器化,最后部署到阿里云。部署过程中涉及了以下几个步骤:

  1. 使用 UvicornGunicorn 启动 FastAPI 应用。
  2. 创建 Docker 镜像并运行容器化应用。
  3. 将 Docker 容器部署到阿里云 ECS 实例,或者通过 ACR 推送镜像后拉取到 ECS 实
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值