使用 Docker 部署¶
本章的主要内容如下:
- 创建最高性能的 FastAPI 应用 Docker 镜像/容器。约 5 分钟;
- (可选)开发者需要了解的 HTTPS 知识;
- 使用自动 HTTPS 设置 Docker Swarm 模式集群,同样适用于 5美元/月的简单服务器。约 20 分钟;
- 使用 Docker Swarm 与 HTTPS 生成并部署完整的 FastAPI 应用。约 10 分钟。
使用 Docker 部署应用具有安全、可复制、开发简单等优势。
如果使用 Docker,推荐使用官方 Docker 镜像:
tiangolo/uvicorn-gunicorn-fastapi¶
这个镜像内置了自动调优机制,只需添加代码,就能开发出高性能的应用,而且不用付出任何代价。
您依然可以使用环境变量或配置文件更改配置。
提示
要查看所有配置和选项,请参阅 Docker 镜像页面: tiangolo/uvicorn-gunicorn-fastapi。
创建 Dockerfile
¶
- 进入项目文件夹
- 创建包含以下内容的
Dockerfile
:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
COPY ./app /app
大型应用¶
参照创建多文件大型应用一章,Dockerfile
的内容是类似这样的:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
COPY ./app /app/app
树莓派与其他架构¶
如果在(使用 ARM 处理器的)树莓派或其他任何架构中运行 Docker,要基于 Python 基础镜像(多架构)从头创建 Dockerfile
,并单独使用 Uvicorn。
本例中,Dockerfile
的内容如下:
FROM python:3.7
RUN pip install fastapi uvicorn
EXPOSE 80
COPY ./app /app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
创建 FastAPI 代码¶
- 创建
app
文件夹,并进入文件夹 - 使用以下代码创建
main.py
:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
- 文件夹架构如下:
.
├── app
│ └── main.py
└── Dockerfile
构建 Docker 镜像¶
- 进入项目文件夹(
Dockerfile
所在的文件夹,包含app
文件夹) - 构建 FastAPI 镜像:
$ docker build -t myimage .
---> 100%
启动 Docker 容器¶
- 运行基于镜像的容器:
$ docker run -d --name mycontainer -p 80:80 myimage
这样,就在 Docker 容器中创建了一个优化过的 FastAPI 服务器。并对当前服务器(和 CPU 内核数)进行了自动调优。
查看文档¶
查看Docker容器的 URL,例如:http://192.168.99.100/items/5?q=somequery 或 http://127.0.0.1/items/5?q=somequery(或使用 Docker 主机)。
返回的响应如下:
{"item_id": 5, "q": "somequery"}
API 文档¶
现在跳转至 http://192.168.99.100/docs 或 http://127.0.0.1/docs(或使用 Docker 主机)。
查看自动交互的(Swagger UI) API 文档。
备选 API 文档¶
跳转至 http://192.168.99.100/redoc 或 http://127.0.0.1/redoc(或 Docker 主机)。
查看(ReDoc)备选 API 文档:
Traefik¶
Traefik 是高性能反向代理/加载均衡器,用于执行 TLS 终止代理任务(其他功能除外)。
它集成了 Let's Encrypt,可以处理所有 HTTPS 组件,包括获取与更新证书。
Traefik 还集成了 Docker,可以在每个应用配置中声明域,用它读取配置,生成 HTTPS 证书,为应用自动提供 HTTPS 服务,而且无需在配置中进行任何更改。
有了这些信息与工具,就可以继续下一节组合所有内容。
支持 Traefik 与 HTTPS 的 Docker Swarm mode 集群¶
设置 Docker Swarm Mode 集群大约需要 20 分钟,还包括使用 Traefik 处理 HTTPS(包括证书获取与更新)。
使用 Docker Swarm Mode 可以启用单机 “集群”(仅 5 美元/月 服务器),然后再按需添加更多服务器。
使用 Traefik 与 HTTPS 设置 Docker Swarm Mode 集群,要遵循以下指南:
用于 HTTPS 集群的 Docker Swarm Mode 与 Traefik
部署 FastAPI 应用¶
完成这些设置的最简单方式是使用 FastAPI 项目生成器。
项目生成器集成了 Docker Swarm 集群与 Traefik 与 HTTPS。
生成项目只需要大约 2 分钟。
生成的项目提供了部署说明,再用 2 分钟就可以完成部署。