FastAPI教程——部署

部署

部署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个月),因此安全性实际上更好,因为它们的生命周期缩短了。

域可以被安全地验证并自动生成证书。这还允许自动更新这些证书。

我们的想法是自动获取和更新这些证书

<think>嗯,用户现在想了解怎么用PyCharm创建FastAPI项目。之前他们问过Django和FastAPI的对比,现在可能已经决定用FastAPI了,所以需要具体的操作指导。首先,我需要回忆一下PyCharm的步骤,确保自己没错。 用户可能是开发者,有一定Python基础,但可能对FastAPI不太熟悉。他们可能希望有一个详细的步骤指南,包括环境设置、依赖安装和示例代码。可能需要注意PyCharm的版本,不同版本界面可能不同,但大体步骤应该类似。 首先,创建新项目的时候,PyCharm通常会使用虚拟环境,所以需要提醒用户检查Python解释器。然后安装FastAPI和uvicorn,这两个是基础依赖。可能还需要提到其他常用库,比如SQLAlchemy或者Pydantic,但用户的问题主要是创建项目,所以基础就够了。 接下来,创建main.py文件,写一个简单的FastAPI应用示例。这部分需要确保代码正确,比如@app.get装饰器和uvicorn的启动命令。要提醒用户运行的方式,可能有人不知道uvicorn的命令行参数,所以给出具体的示例。 另外,用户可能想测试API是否正常运行,所以需要说明如何访问/docs和测试端点。可能还要提到自动生成的Swagger文档,这是FastAPI的一个优势,可以强调这一点。 可能的问题:用户的环境配置有问题,比如Python路径不对,或者依赖安装失败。这时候需要建议他们检查解释器设置,或者用终端手动安装。另外,如果用户用的是社区版PyCharm,可能需要手动配置运行配置,而专业版可能更自动。 还要考虑用户是否需要进一步的扩展,比如添加路由、数据库连接,或者部署建议,但当前问题集中在创建项目,所以可能点到为止,或者简要提及后续步骤。 最后,确保步骤清晰,分点说明,避免信息过载。使用代码块和具体命令,方便用户复制粘贴。可能还需要提醒常见的错误,比如端口被占用,或者忘记安装uvicorn。</think>以下是使用PyCharm创建FastAPI项目的分步指南: --- ### 一、环境准备 1. **安装PyCharm** - 推荐使用**专业版**(支持Web开发工具链),社区版也可用但需手动配置。 2. **Python版本** - 确保已安装Python 3.7+(FastAPI依赖现代Python特性)。 --- ### 二、创建FastAPI项目 #### 步骤1:新建项目 1. 打开PyCharm → `File` → `New Project` 2. 选择项目路径,设置**虚拟环境**: ```plaintext Location: /your/project/path Python Interpreter: 选择或新建虚拟环境(推荐venv) ``` #### 步骤2:安装依赖 1. 打开PyCharm终端(`Terminal`标签页) 2. 安装核心包: ```bash pip install fastapi uvicorn[standard] ``` - `uvicorn[standard]`:含高性能ASGI服务器及WebSocket支持 - 可选扩展:`pip install python-multipart pydantic-settings`(表单/配置管理) --- ### 三、编写示例代码 #### 创建主文件 1. 右键项目根目录 → `New` → `Python File` → 命名如`main.py` 2. 写入基础代码: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello FastAPI"} @app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q} ``` --- ### 四、运行与测试 #### 方式1:命令行启动 1. 在终端执行: ```bash uvicorn main:app --reload ``` - `--reload`:开发模式(代码修改后自动重启) - 默认访问地址:`http://127.0.0.1:8000` #### 方式2:PyCharm配置运行 1. 点击右上角运行配置 → `Edit Configurations` → `+` → `Python` 2. 配置参数: ```plaintext Script path: 选择main.py Parameters: main:app --reload Python interpreter: 确保选中项目虚拟环境 ``` 3. 点击运行按钮启动服务 --- ### 五、验证API 1. **访问根路径**:浏览器打开`http://localhost:8000` → 应返回`{"message":"Hello FastAPI"}` 2. **交互文档**:访问`http://localhost:8000/docs` → 自动生成的Swagger UI界面 3. **测试端点**:在/docs页面直接调用`/items/{item_id}`接口 --- ### 六、项目扩展建议 | 需求 | 推荐方案 | |---------------------|----------------------------------| | **数据库集成** | SQLAlchemy + Alembic(迁移工具) | | **身份验证** | OAuth2 + JWT(使用`passlib`库) | | **API文档增强** | 添加OpenAPI元数据描述 | | **部署生产环境** | Gunicorn + Uvicorn Worker | --- ### 常见问题排查 1. **端口占用**: ```bash uvicorn main:app --reload --port 8001 # 更换端口 ``` 2. **依赖冲突**:使用`pip freeze > requirements.txt`导出依赖清单 3. **文档未生成**:检查路由装饰器是否正确使用`@app.get()`/`@app.post()` --- 通过以上步骤,即可快速搭建一个功能完备的FastAPI项目。如果需要更复杂的架构(如多路由分层),可创建`routers`目录并按模块拆分代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值