From bdf33b6a039bafc372cb8e2d6f744ec272e196e9 Mon Sep 17 00:00:00 2001 From: jaystone776 <1732865113@qq.com> Date: Wed, 1 Sep 2021 12:29:06 +0800 Subject: [PATCH 1/2] Add Chinese Translation for docs\deployment\docker.md as title --- docs/zh/docs/deployment/docker.md | 181 ++++++++++++++++++++++++++++++ docs/zh/mkdocs.yml | 2 + 2 files changed, 183 insertions(+) create mode 100644 docs/zh/docs/deployment/docker.md diff --git a/docs/zh/docs/deployment/docker.md b/docs/zh/docs/deployment/docker.md new file mode 100644 index 0000000000000..d2782075b324b --- /dev/null +++ b/docs/zh/docs/deployment/docker.md @@ -0,0 +1,181 @@ +# 使用 Docker 部署 + +本章的主要内容如下: + +* 创建最高性能的 **FastAPI** 应用 Docker 镜像/容器。**约 5 分钟**; +* (可选)开发者需要了解的 HTTPS 知识; +* 使用自动 HTTPS 设置 Docker Swarm 模式集群,同样适用于 5美元/月的简单服务器。**约 20 分钟**; +* 使用 Docker Swarm 与 HTTPS 生成并部署完整的 **FastAPI** 应用。**约 10 分钟**。 + +使用 **Docker** 部署应用具有安全、可复制、开发简单等优势。 + +如果使用 Docker,推荐使用官方 Docker 镜像: + +## tiangolo/uvicorn-gunicorn-fastapi + +这个镜像内置了**自动调优**机制,只需添加代码,就能开发出高性能的应用,而且不用付出任何代价。 + +您依然可以使用环境变量或配置文件更改配置。 + +!!! tip "提示" + + 要查看所有配置和选项,请参阅 Docker 镜像页面: tiangolo/uvicorn-gunicorn-fastapi。 + +## 创建 `Dockerfile` + +* 进入项目文件夹 +* 创建包含以下内容的 `Dockerfile`: + +```Dockerfile +FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 + +COPY ./app /app +``` + +### 大型应用 + +参照创建[多文件大型应用](../tutorial/bigger-applications.md){.internal-link target=_blank}一章,`Dockerfile` 的内容是类似这样的: + +```Dockerfile +FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 + +COPY ./app /app/app +``` + +### 树莓派与其它架构 + +如果在(使用 ARM 处理器的)树莓派或其它任何架构中运行 Docker,要基于 Python 基础镜像(多架构)从头创建 `Dockerfile`,并单独使用 Uvicorn。 + +本例中,`Dockerfile` 的内容如下: + +```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`: + +```Python +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 镜像: + +
+ +```console +$ docker build -t myimage . + +---> 100% +``` + +
+ +## 启动 Docker 容器 + +* 运行基于镜像的容器: + +
+ +```console +$ docker run -d --name mycontainer -p 80:80 myimage +``` + +
+ +这样,就在 Docker 容器中创建了一个优化过的 FastAPI 服务器。并对当前服务器(和 CPU 内核数)进行了自动调优。 + +## 查看文档 + +查看Docker容器的 URL,例如:http://192.168.99.100/items/5?q=somequeryhttp://127.0.0.1/items/5?q=somequery(或使用 Docker 主机)。 + +返回的响应如下: + +```JSON +{"item_id": 5, "q": "somequery"} +``` + +## API 文档 + +现在跳转至 http://192.168.99.100/docshttp://127.0.0.1/docs(或使用 Docker 主机)。 + +查看自动交互的(Swagger UI) API 文档。 + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +## 备选 API 文档 + +跳转至 http://192.168.99.100/redochttp://127.0.0.1/redoc(或 Docker 主机)。 + +查看(ReDoc)备选 API 文档: + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +## 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** 项目生成器](../project-generation.md){.internal-link target=_blank}。 + +项目生成器集成了 Docker Swarm 集群与 Traefik 与 HTTPS。 + +生成项目只需要大约 2 分钟。 + +生成的项目提供了部署说明,再用 2 分钟就可以完成部署。 + diff --git a/docs/zh/mkdocs.yml b/docs/zh/mkdocs.yml index d73afaa934a65..6e3982b0c5b34 100644 --- a/docs/zh/mkdocs.yml +++ b/docs/zh/mkdocs.yml @@ -102,6 +102,8 @@ nav: - advanced/response-directly.md - advanced/custom-response.md - deployment.md +- 部署: + - deployment/docker.md - contributing.md - help-fastapi.md - benchmarks.md From d816763a34e8a0447872af55b91844bcef2abb33 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 18:14:10 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/deployment/docker.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/zh/docs/deployment/docker.md b/docs/zh/docs/deployment/docker.md index d2782075b324b..f83653886f7ed 100644 --- a/docs/zh/docs/deployment/docker.md +++ b/docs/zh/docs/deployment/docker.md @@ -178,4 +178,3 @@ Traefik 还集成了 Docker,可以在每个应用配置中声明域,用它 生成项目只需要大约 2 分钟。 生成的项目提供了部署说明,再用 2 分钟就可以完成部署。 -