部署
部署FastAPI应用程序相对容易。
- 部署是什么意思
部署应用程序意味着执行必要的步骤以使其可供用户使用。
对于Web API来说,通常涉及将上传到云服务器中,搭配一个性能和稳定性都不错的服务器程序,以便你的用户可以高效地访问你的应用程序,而不会出现中断或其他问题。
这与开发阶段形成鲜明对比,在开发阶段,你不断更改代码、破坏代码、修复代码,来回停止和重启服务器等。
- 部署策略
根据你的使用场景和使用的工具,有多种方法可以实现此目的。
你可以使用一些工具自行部署服务器,你也可以使用能为你完成部分工作的云服务,或其他可能的选项。
关于FastAPI版本
FastAPI已在许多应用程序和系统的生产环境中使用。并且测试覆盖率保持在100%。但其开发进度仍在快速推进。
经常添加新功能,定期修复错误,并且代码仍在持续改进。
这就是为什么当前版本仍然是0.x.x
,这反映出每个版本都可能有Breaking changes。这遵循语义版本控制的约定。
你现在就可以使用FastAPI创建生产环境应用程序,你只需确保使用的版本可以与其余代码正确配合即可。
固定你的fastapi
版本
你应该做的第一件事是将你正在使用的FastAPI版本”固定“到你知道适用于你的应用程序的特定最新版本。
例如,假设你在应用程序中使用版本0.45.0
。
如果你使用requirements.txt
文件,你可以使用以下命令指定版本:
fastapi==0.45.0
这意味着你将使用版本0.45.0
。
或者你也可以将其固定为:
fastapi>=0.45.0,<0.46.0
这意味着你将使用0.45.0
或更高版本,但低于0.46.0
,例如,版本0.45.2
仍会被接受。
关于HTTPS
人们很容易认为HTTPS仅仅是”启用“或”未启用“的东西。
但实际情况笔者复杂得多。
要从用户的视角了解HTTPS的基础知识,请查看https://howhttps.works/。
现在,从开发人员的视角,在了解HTTPS时需要记住以下几点:
- 要使用HTTPS,服务器需要拥有由第三方生成的”证书(certificate)“。
-
- 这些证书实际上是从第三方获取的,而不是”生成“的。
- 证书有生命周期。
-
- 它们会过期。
-
- 然后它们需要更新,再次从第三方获取。
- 连接的加密发生在TCP层。
-
- 这是HTTP协议下面的一层。
-
- 因此,证书和加密处理是在HTTP之前完成的。
- TCP不知道域名。仅仅知道IP地址。
-
- 有关所请求的特定域名的信息位于HTTP数据中。
- HTTPS证书”证明“某个域名,但协议和加密发生在TCP层,在知道正在处理哪个域名之前。
- 默认情况下,这意味着你每个IP地址只能拥有一个HTTPS证书。
-
- 无论你的服务器有多大,或者服务器上的每个应用程序有多小。
-
- 不过,对此有一个解决方案。
- TLS协议(在HTTP之下的TCP层处理加密的协议)有一个扩展,称为SNI。
-
- SNI扩展允许一台服务器(具有单个IP地址)拥有多个HTTPS证书并提供多个HTTPS域名/应用程序。
- 为此,服务器上会有单独的一个组件(程序)侦听公共IP地址,这个组件必须拥有服务器中的所有HTTPS证书。
- 获得安全连接后,通信协议仍然是HTTP。
-
- 内容时加密过的,即使它们是通过HTTP协议发送的。
通常的做法是在服务器上运行一个程序/HTTP服务器并管理所有HTTPS部分:接收加密的HTTPS请求,将解密的HTTP请求发送到在同一服务器中运行的实际HTTP应用程序(在本例中那个为FastAPI应用程序),从应用程序中获取HTTP响应,使用适当的HTTPS证书对其进行加密并使用HTTPS将其发送回客户端。此服务器通常被称为TLS终止代理。
你可以用作TLS终止代理的一些选项包括:
- Traefik(也可以处理证书更新)
- Caddy(也可以处理证书更新)
- Nginx
- HAProxy
Let’s Encrypt
在Let’s Encrypt之前,这些HTTPS证书由受信任的第三方出售。
过去,获得这些证书的过程非常繁琐,需要大量的文书工作,而且证书非常昂贵。
但随后Let‘s Encrypt创建了。
它是Linux基金会的一个项目。它以自动方式免费提供HTTPS证书。这些证书可以使用所有符合标准的安全加密,并且有效期很短(大约3个月),因此安全性实际上更好,因为它们的生命周期缩短了。
域可以被安全地验证并自动生成证书。这还允许自动更新这些证书。
我们的想法是自动获取和更新这些证书