diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 1e260585f..a2bace259 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐 Add Portuguese translation for `docs/deployment/https.md`. PR [#3754](https://github.com/tiangolo/fastapi/pull/3754) by [@lsglucas](https://github.com/lsglucas). * ✨ Update GitHub Action: notify-translations, to avoid a race conditon. PR [#3989](https://github.com/tiangolo/fastapi/pull/3989) by [@tiangolo](https://github.com/tiangolo). * ⬆️ Upgrade development `autoflake`, supporting multi-line imports. PR [#3988](https://github.com/tiangolo/fastapi/pull/3988) by [@tiangolo](https://github.com/tiangolo). * ⬆️ Increase dependency ranges for tests and docs: pytest-cov, pytest-asyncio, black, httpx, sqlalchemy, databases, mkdocs-markdownextradata-plugin. PR [#3987](https://github.com/tiangolo/fastapi/pull/3987) by [@tiangolo](https://github.com/tiangolo). diff --git a/docs/pt/docs/deployment/https.md b/docs/pt/docs/deployment/https.md new file mode 100644 index 000000000..f85861e92 --- /dev/null +++ b/docs/pt/docs/deployment/https.md @@ -0,0 +1,48 @@ +# Sobre HTTPS + +É fácil assumir que HTTPS é algo que é apenas "habilitado" ou não. + +Mas é bem mais complexo do que isso. + +!!! tip "Dica" + Se você está com pressa ou não se importa, continue com as seções seguintes para instruções passo a passo para configurar tudo com diferentes técnicas. + +Para aprender o básico de HTTPS de uma perspectiva do usuário, verifique https://howhttps.works/pt-br/. + +Agora, a partir de uma perspectiva do desenvolvedor, aqui estão algumas coisas para ter em mente ao pensar em HTTPS: + +* Para HTTPS, o servidor precisa ter certificados gerados por um terceiro. + * Esses certificados são adquiridos de um terceiro, eles não são simplesmente "gerados". +* Certificados têm um tempo de vida. + * Eles expiram. + * E então eles precisam ser renovados, adquirindo-os novamente de um terceiro. +* A criptografia da conexão acontece no nível TCP. + * Essa é uma camada abaixo do HTTP. + * Portanto, o manuseio do certificado e da criptografia é feito antes do HTTP. +* O TCP não sabe sobre "domínios". Apenas sobre endereços IP. + * As informações sobre o domínio solicitado vão nos dados HTTP. +* Os certificados HTTPS “certificam” um determinado domínio, mas o protocolo e a encriptação acontecem ao nível do TCP, antes de sabermos de que domínio se trata. +* Por padrão, isso significa que você só pode ter um certificado HTTPS por endereço IP. + * Não importa o tamanho do seu servidor ou quão pequeno cada aplicativo que você tem nele possa ser. + * No entanto, existe uma solução para isso. +* Há uma extensão para o protocolo TLS (aquele que lida com a criptografia no nível TCP, antes do HTTP) chamado SNI. + * Esta extensão SNI permite que um único servidor (com um único endereço IP) tenha vários certificados HTTPS e atenda a vários domínios / aplicativos HTTPS. + * Para que isso funcione, um único componente (programa) em execução no servidor, ouvindo no endereço IP público, deve ter todos os certificados HTTPS no servidor. +* Depois de obter uma conexão segura, o protocolo de comunicação ainda é HTTP. + * Os conteúdos são criptografados, embora sejam enviados com o protocolo HTTP. + +É uma prática comum ter um programa/servidor HTTP em execução no servidor (máquina, host, etc.) e gerenciar todas as partes HTTPS: enviando as solicitações HTTP descriptografadas para o aplicativo HTTP real em execução no mesmo servidor (a aplicação **FastAPI**, neste caso), pegue a resposta HTTP do aplicativo, criptografe-a usando o certificado apropriado e envie-a de volta ao cliente usando HTTPS. Este servidor é frequentemente chamado de TLS Termination Proxy. + +## Let's Encrypt + +Antes de Let's Encrypt, esses certificados HTTPS eram vendidos por terceiros confiáveis. + +O processo de aquisição de um desses certificados costumava ser complicado, exigia bastante papelada e os certificados eram bastante caros. + +Mas então Let's Encrypt foi criado. + +Ele é um projeto da Linux Foundation que fornece certificados HTTPS gratuitamente. De forma automatizada. Esses certificados usam toda a segurança criptográfica padrão e têm vida curta (cerca de 3 meses), então a segurança é realmente melhor por causa de sua vida útil reduzida. + +Os domínios são verificados com segurança e os certificados são gerados automaticamente. Isso também permite automatizar a renovação desses certificados. + +A ideia é automatizar a aquisição e renovação desses certificados, para que você tenha HTTPS seguro, de graça e para sempre. diff --git a/docs/pt/mkdocs.yml b/docs/pt/mkdocs.yml index ec0684d54..63c524d84 100644 --- a/docs/pt/mkdocs.yml +++ b/docs/pt/mkdocs.yml @@ -67,6 +67,7 @@ nav: - Implantação: - deployment/index.md - deployment/versions.md + - deployment/https.md - alternatives.md - history-design-future.md - external-links.md @@ -140,4 +141,3 @@ extra_css: extra_javascript: - https://fastapi.tiangolo.com/js/termynal.js - https://fastapi.tiangolo.com/js/custom.js - diff --git a/docs/zh/docs/deployment.md b/docs/zh/docs/deployment.md deleted file mode 100644 index 4dac57bef..000000000 --- a/docs/zh/docs/deployment.md +++ /dev/null @@ -1,392 +0,0 @@ -# 部署 - -部署 **FastAPI** 应用相对比较简单。 - -根据特定使用情况和使用工具有几种不同的部署方式。 - -接下来的章节,你将了解到一些关于部署方式的内容。 - -## FastAPI 版本 - -许多应用和系统已经在生产环境使用 **FastAPI**。其测试覆盖率保持在 100%。但该项目仍在快速开发。 - -我们会经常加入新的功能,定期错误修复,同时也在不断的优化项目代码。 - -这也是为什么当前版本仍然是 `0.x.x`,我们以此表明每个版本都可能有重大改变。 - -现在就可以使用 **FastAPI** 创建生产应用(你可能已经使用一段时间了)。你只需要确保使用的版本和代码其他部分能够正常兼容。 - -### 指定你的 `FastAPI` 版本 - -你应该做的第一件事情,是为你正在使用的 **FastAPI** 指定一个能够正确运行你的应用的最新版本。 - -例如,假设你的应用中正在使用版本 `0.45.0`。 - -如果你使用 `requirements.txt` 文件,你可以这样指定版本: - -```txt -fastapi==0.45.0 -``` - -这表明你将使用 `0.45.0` 版本的 `FastAPI`。 - -或者你也可以这样指定: - -```txt -fastapi>=0.45.0,<0.46.0 -``` - -这表明你将使用 `0.45.0` 及以上,但低于 `0.46.0` 的版本,例如,`0.45.2` 依然可以接受。 - -如果使用其他工具管理你的安装,比如 Poetry,Pipenv,或者其他工具,它们都有各自指定包的版本的方式。 - -### 可用版本 - -你可以在 [发行说明](release-notes.md){.internal-link target=_blank} 中查看可用的版本(比如:检查最新版本是什么)。 - - -### 关于版本 - -FastAPI 遵循语义版本控制约定,`1.0.0` 以下的任何版本都可能加入重大变更。 - -FastAPI 也遵循这样的约定:任何 ”PATCH“ 版本变更都是用来修复 bug 和向下兼容的变更。 - -!!! tip - "PATCH" 是指版本号的最后一个数字,例如,在 `0.2.3` 中,PATCH 版本是 `3`。 - -所以,你应该像这样指定版本: - -```txt -fastapi>=0.45.0,<0.46.0 -``` - -不兼容变更和新特性在 "MINOR" 版本中添加。 - -!!! tip - "MINOR" 是版本号中间的数字,例如,在 `0.2.3` 中,MINOR 版本是 `2`。 - -### 更新 FaseAPI 版本 - -你应该为你的应用添加测试。 - -使用 **FastAPI** 测试应用非常容易(归功于 Starlette),查看文档:[测试](tutorial/testing.md){.internal-link target=_blank} - -有了测试之后,就可以将 **FastAPI** 更新到最近的一个的版本,然后通过运行测试来确定你所有代码都可以正确工作。 - -如果一切正常,或者做了必要的修改之后,所有的测试都通过了,就可以把 `FastAPI` 版本指定为那个比较新的版本了。 - -### 关于 Starlette - -不要指定 `starlette` 的版本。 - -不同版本的 **FastAPI** 会使用特定版本的 Starlette。 - -所以你只要让 **FastAPI** 自行选择正确的 Starlette 版本。 - -### 关于 Pydantic - -Pydantic 自身的测试中已经包含了 **FastAPI** 的测试,所以最新版本的 Pydantic (`1.0.0` 以上版本)总是兼容 **FastAPI**。 - -你可以指定 Pydantic 为任意一个高于 `1.0.0` 且低于的 `2.0.0` 的版本。 - -例如: - -```txt -pydantic>=1.2.0,<2.0.0 -``` - -## Docker - -这部分,你将通过指引和链接了解到: - -* 如何将你的 **FastAPI** 应用制作成最高性能的 **Docker** 映像/容器。约需五分钟。 -* (可选)理解作为一个开发者需要知道的 HTTPS 相关知识。 -* 使用自动化 HTTPS 设置一个 Docker Swarm 模式的集群,即使是在一个简单的 $5 USD/month 的服务器上。约需要 20 分钟。 -* 使用 Docker Swarm 集群以及 HTTP 等等,生成和部署一个完整的 **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 -``` - -#### 树莓派以及其他架构 - -如果你在树莓派或者任何其他架构中运行 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** 镜像 - -