fastapi 项目部署
问题背景
在项目中,需要调用通义千问 API 实现对话功能。首先使用 langchain 库搭建一个简单的 RAG 系统,用于处理用户问题和生成响应。然后,创建一个 FastAPI 项目并实现一个对话接口,用于接收用户问题并返回模型生成的响应。最后,需要将 FastAPI 项目部署到服务器上,以便能够接收用户请求并返回响应。
FastAPI 介绍
FastAPI 是一个基于 Python 的 Web 框架,用于快速构建 API。它具有以下特点:
- 快速:FastAPI 基于 Starlette 和 Pydantic,具有极高的性能。
- 简单:FastAPI 提供了简单的路由和依赖注入机制,使开发人员能够快速构建 API。
- 交互式文档:FastAPI 自动生成交互式 API 文档,包括请求参数、响应模型和示例请求。
环境搭建
编写代码
本项目基于 Langchain + FastAPI 实现一个简单的 RAG 系统。
项目结构如下:
rag-xxmall/
├── app/
│ ├── api/
│ │ ├── v1/
│ │ │ ├── chat/
│ │ │ │ ├── router.py
│ │ │ │ ├── schema.py
│ │ │ ├── knowledge/
│ │ │ │ ├── router.py
│ │ │ │ ├── schema.py
│ │ ├── __init__.py
│ ├── core/
│ │ ├── config.py
│ │ ├── rag.py
│ │ ├── knowledge_base.py
│ │ ├── vector_store.py
│ │ ├── history_store.py
├── main.py安装依赖
项目运行在 Ubuntu 服务器,Python 版本为 3.10。执行以下命令安装项目依赖:
sudo apt update
sudo apt install python3 python3-venv python3-pip -y
python3 -m venv venv
source venv/bin/activate
pip install "fastapi[standard]"
pip install langchain langchain-community langchain-core langchain-chroma dashscope chromadb提示
为了避免项目依赖与系统环境冲突,建议在项目根目录下创建一个虚拟环境
执行
python3 -m venv venv命令创建一个名为venv的虚拟环境执行
source venv/bin/activate命令激活虚拟环境
注意
- 安装依赖时需要激活虚拟环境
运行项目
运行 fastapi 项目,首先需要激活虚拟环境:
source venv/bin/activate使用 fastapi 命令运行项目:
# 开发环境
fastapi dev main.py --host 0.0.0.0 --port 8000
# 生产环境
fastapi run main.py --host 0.0.0.0 --port 8000提示
开发环境:使用
fastapi dev命令启动项目,会自动重新加载代码,适用于开发阶段。生产环境:使用
fastapi run命令启动项目,适用于生产环境。主机:通过
--host参数指定主机地址,默认值为127.0.0.1,将0.0.0.0作为主机地址可以使项目在所有网络接口上监听。端口:默认端口为 8000,也可以通过
--port参数指定其他端口。
指定主机地址为 0.0.0.0 后,访问 http://<服务器IP>:8000,确认应用正常。访问 http://<服务器IP>:8000/docs 确认 Swagger UI 正常显示。
注意
- 安全组配置:确保服务器的安全组配置中放开 8000 端口。
域名解析
本项目的客户端是一个 uniapp 项目,运行在用户的浏览器、微信小程序中。微信小程序要求使用 HTTPS 协议的域名访问服务端API。为了能够访问到 FastAPI 项目,需要将域名解析到服务器的公网 IP 地址。
重要
微信小程序请求外部 API 时,不支持 HTTP 协议,必须使用 HTTPS 协议。
微信小程序请求外部 API 时,不支持 IP 地址直接访问,必须使用域名。
微信小程序请求外部 API 时,需要将请求的 URL 地址添加到微信公众平台的request合法域名白名单,配置时不能使用 HTTP 协议,也不能包含端口号。

image-20260314170835283
进入阿里云控制台,为域名添加解析记录,将域名解析到服务器的公网 IP 地址。
提示
- 域名解析生效需要一定的时间,通常需要等待几分钟。
配置 SSL 证书
解析后的域名只能使用 HTTP 协议访问,使用 HTTPS 协议时,浏览器会提示安全警告。此外,微信小程序要求使用 HTTPS 协议的域名访问服务端API。因此,为了能够使用 HTTPS 协议访问 FastAPI 项目,需要配置 SSL 证书。
这里使用宝塔面板配置 SSL 证书。本项目需要进行泛域名证书配置,因此需要添加阿里云 DNS 接口以进行 DNS 验证。
提示
泛域名证书:泛域名证书可以为多个子域名配置 SSL 证书,而不需要为每个子域名单独配置证书。
泛域名证书必须用 DNS 验证:文件验证不支持泛域名。
添加阿里云 DNS 接口
在宝塔面板添加阿里云 DNS 接口,核心是先在阿里云创建RAM 子账号并获取AccessKey,再在宝塔配置该接口,用于 SSL 证书的DNS 验证(尤其是泛域名证书)。
获取阿里云 RAM 子账号 AccessKey
登录阿里云控制台,进入RAM 子账号管理页面。
创建一个新的 RAM 子账号,记录下 AccessKey ID 和 AccessKey Secret。
为新创建的 RAM 子账号添加 DNS 管理权限。
用户列表 → 找到该用户 → 添加权限
搜索权限:AliyunDNSFullAccess(管理云解析 DNS 的权限)→ 勾选 → 确定
在宝塔面板添加阿里云 DNS 接口
登录宝塔 → 左侧菜单:网站 → 找到域名→ 设置 → SSL
选择 Let’s Encrypt → 验证方式:DNS 验证(支持通配符)
点击 添加 DNS 接口
验证类型:AliyunDns
ID:粘贴阿里云的 AccessKey ID
Token:粘贴阿里云的 AccessKey Secret
备注:阿里云DNS(自定义)→ 保存
提示
- 确保服务器的安全组配置中放开 80/443 端口。
申请 SSL 证书(泛域名)
回到 SSL 申请页面,勾选需要的域名(单域名 / 泛域名)
点击申请 → 等待 1–5 分钟(宝塔自动添加 TXT 记录并验证)
申请成功后,开启强制 HTTPS
配置 Nginx 反向代理
Nginx 反向代理可以将客户端请求转发到 FastAPI 项目运行的端口上,实现反向代理和负载均衡。本项目需要将客户端请求转发到 FastAPI 项目运行的端口上,将默认的 80/443 端口(微信小程序要求 HTTPS 协议,默认端口 443)请求转发到 FastAPI 运行的 8000 端口,因此需要配置 Nginx 反向代理。
这里使用宝塔面板配置 Nginx 反向代理。
登录宝塔面板,选择网站,选择反向代理。
点击添加反代,填写域名、反向代理地址和端口号(这里域名指向的地址和 FastAPI 项目地址都在同一个服务器上,填写 http://127.0.0.1:8000)。
点击确定。