Ubuntu 20.04平台搭建FastAPI开发环境的完整教程

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

Ubuntu 20.04平台搭建FastAPI开发环境的完整教程

引言

FastAPI是一个现代、快速(高性能)的Web框架,用于基于Python 3.6+构建API。它具有自动生成交互式API文档、类型提示支持等优秀特性。本教程将指导你在Ubuntu 20.04系统上从零开始搭建FastAPI开发环境。

准备工作

在开始之前,请确保:
1. 已安装Ubuntu 20.04操作系统
2. 拥有sudo权限的用户账户
3. 可以访问互联网以下载必要的软件包

第一步:更新系统包

首先,我们更新系统的软件包列表以确保获取最新的版本和安全补丁:

代码片段
sudo apt update
sudo apt upgrade -y

注意事项
-y参数表示自动确认所有提示,适合在脚本中使用
– 如果系统长时间未更新,此过程可能需要几分钟时间

第二步:安装Python和pip

Ubuntu 20.04默认安装了Python 3.8,但我们需要确保pip(Python包管理器)也已安装:

代码片段
sudo apt install python3-pip python3-dev -y

验证安装是否成功:

代码片段
python3 --version
pip3 --version

实践经验
python3-dev包含了开发Python扩展所需的头文件和静态库
– 建议始终使用python3pip3命令而不是python/pip以避免与Python2混淆

第三步:创建虚拟环境

虚拟环境可以隔离项目依赖,避免不同项目间的包冲突:

代码片段
sudo apt install python3-venv -y
mkdir fastapi_project && cd fastapi_project
python3 -m venv venv
source venv/bin/activate

原理说明
venv模块是Python标准库的一部分,用于创建轻量级的虚拟环境
source venv/bin/activate命令激活虚拟环境(注意观察终端提示符变化)

要退出虚拟环境时,只需运行:

代码片段
deactivate

第四步:安装FastAPI和相关依赖

在激活的虚拟环境中安装必要的包:

代码片段
pip install fastapi uvicorn[standard]

组件解释
fastapi: FastAPI框架本身
uvicorn: ASGI服务器,用于运行FastAPI应用
[standard]: 安装uvicorn的额外依赖(如websockets支持)

第五步:创建第一个FastAPI应用

创建一个简单的示例应用来测试我们的环境。新建文件main.py:

代码片段
from fastapi import FastAPI

# 创建FastAPI应用实例
app = FastAPI()

# 定义根路由
@app.get("/")
async def read_root():
    return {"message": "欢迎来到FastAPI世界!"}

# 定义一个带路径参数的路由
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

代码说明
1. @app.get()装饰器定义GET请求的路由处理函数
2. Python的类型提示(item_id: int)会被FastAPI用于自动数据验证和文档生成

第六步:运行FastAPI应用

使用Uvicorn运行我们的应用:

代码片段
uvicorn main:app --reload --host 0.0.0.0 --port 8000

参数解释:
main:app: main是文件名(不含.py),app是FastAPI实例名
--reload: 启用自动重载(仅用于开发)
--host: 指定监听地址(0.0.0.0表示允许外部访问)
--port: 指定端口号(默认8000)

访问以下URL测试你的应用:
1. http://localhost:8000/ – API根路径响应
2. http://localhost:8000/items/42?q=test – 带参数的路径示例
3. http://localhost:8000/docs – Swagger UI交互式文档
4. http://localhost:8000/redoc – ReDoc文档

(可选)第七步:生产环境部署建议

对于生产环境,建议考虑以下改进:

  1. 使用Gunicorn作为进程管理器:

    代码片段
    pip install gunicorn 
    gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app 
    
  2. 配置Nginx反向代理:
    “`nginx configuration file /etc/nginx/sites-enabled/fastapiapp.conf:
    server {
    listen 80;
    server
    name your_domain.com;

    代码片段
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    

    }

代码片段

3. **设置系统服务**:
   创建systemd服务文件(`/etc/systemd/system/fastapi.service`)来管理应用进程。

## (可选)第八步:常用开发工具推荐

1. **HTTP客户端测试工具**
   - Postman或Insomnia用于手动测试API 
   - HTTPie命令行工具(`apt install httpie`)
     ```bash example usage:
     http GET localhost:8000/
 
  1. 代码编辑器

    • VS Code + Python扩展 + Pylance/Pyright类型检查器
  2. 数据库集成
    “`bash SQLAlchemy示例:
    pip install sqlalchemy databases[postgresql]

代码片段

## (可选)第九步:项目结构最佳实践

随着项目增长,推荐采用模块化结构组织代码:

fastapi_project/
├── app/
│   ├── __init__.py        # Python包标识文件  
│   ├── main.py            # FastAPI应用实例和路由  
│   ├── dependencies.py    # DI依赖项  
│   ├── routers/           # API路由模块  
│   │   ├── items.py  
│   │   └── users.py  
│   └── models/            # Pydantic模型  
├── tests/                 # pytest测试用例  
├── requirements.txt       # pip依赖清单  
└── venv/                  # Python虚拟环境目录  

## (可选)第十步:常见问题解决指南

1.**端口冲突错误**: 
   如果端口8000已被占用,可以更换端口号或终止占用进程:
   ```bash find and kill process using port:
   sudo lsof -i :8000 
   sudo kill <PID>

2.导入错误:
确保在正确的虚拟环境中操作并已安装所有依赖。

3.自动重载失效:
检查文件权限和编辑器是否正在锁定文件。

4.跨域问题(CORS):
需要额外配置中间件:
“`python CORS middleware example:
from fastapi.middleware.cors import CORSMiddleware

app.addmiddleware(
CORSMiddleware,
allow
origins=[““],
allow_methods=[“
“],
allow_headers=[“*”],
)
“`

5.性能调优:
使用异步I/O操作(如httpx代替requests),启用Gzip压缩等。

6.日志记录:
配置结构化日志记录有助于调试和生产监控。

7.安全加固:
实施HTTPS、速率限制、认证授权等安全措施。

8.Docker集成:
容器化部署可以简化环境一致性问题。

9.监控指标:
集成Prometheus等监控工具收集性能指标。

10.CI/CD管道:
自动化测试和部署流程提高开发效率。

11.数据库迁移:
使用Alembic管理数据库模式变更。

12.缓存策略:
实现Redis等缓存层减轻数据库负载。

13.异步任务队列:
使用Celery或RQ处理后台任务。

14.WebSocket支持:
通过FastAPI内置WebSocket功能实现实时通信。

15.GraphQL集成:
通过Strawberry或Ariadne添加GraphQL端点。

16.OpenTelemetry追踪:
分布式追踪提高可观测性。

17.多语言支持:
国际化(i18n)中间件实现多语言响应。

18.Webhook处理:
安全可靠地接收和处理第三方Webhook通知。

19.文件上传下载:
高效处理大文件上传和下载场景。

20.微服务通信:
服务间通信采用gRPC或消息队列。

21.健康检查端点:
提供标准化的健康检查接口供负载均衡器使用。

22.配置管理:
区分开发和生产配置避免敏感信息泄露。

23.静态文件服务:
高效提供静态资源如HTML/CSS/JS文件。

24.WebAssembly集成:
探索Pyodide等方案在前端执行Python代码。

25.Serverless部署:
适配AWS Lambda等无服务器平台运行FastAPI应用。

26.Pydantic高级用法:
充分利用Pydantic模型的数据验证和转换能力。

27.Dependency Injection深度定制:
灵活运用依赖注入系统构建复杂业务逻辑。

28.OpenAPI规范扩展:
自定义OpenAPI文档增强开发者体验。

29.SQLModel整合ORM与Pydantic模型降低样板代码量.

30.TypeGuard运行时类型检查为动态类型场景增加安全性.

31.HTMX整合快速实现现代交互式前端无需复杂JavaScript.

32.JWT认证完整实现保护API端点安全.

33.OAuth2集成支持第三方登录授权流程.

34.WebSockets实时通信构建聊天推送等功能.

35.BackgroundTasks处理耗时操作不阻塞请求响应循环.

36.TestClient编写完善的自动化测试套件保证质量.

37.Pytest插件利用提升测试效率如pytest-asyncio.

38.Mock对象隔离外部依赖使单元测试更可靠.

39.Coverage.py测量代码覆盖率识别测试盲区.

40.Poetry管理项目依赖替代传统requirements.txt方式.

41.PDM作为新一代Python包管理器尝试新特性.

42.Pyenv管理多版本Python解释器兼容不同项目需求.

43.Docker多阶段构建优化镜像大小和安全扫描消除漏洞.

44.Kubernetes部署编排实现高可用可伸缩的微服务架构.

45.Istio服务网格增强微服务间通信的可观测性和弹性.

46.GitHub Actions自动化构建测试部署流程持续交付价值.

47.Terraform基础设施即代码统一管理云资源声明式配置变更跟踪版本控制回滚机制保障稳定性变更审计满足合规要求成本优化标签策略资源利用率监控告警阈值设置自动化扩缩容策略灾难恢复计划定期演练备份验证数据完整性多云战略避免供应商锁定边缘计算场景延展混合云部署模式安全边界定义零信任架构实施最小权限原则网络分段微分隔身份联合单点登录特权访问管理凭证轮换密钥托管硬件安全模块物理安全控制环境隔离沙箱容器运行时保护镜像签名供应链安全SBOM生成漏洞扫描软件成分分析许可证合规性审查出口管制检查第三方风险评估供应商安全问卷渗透测试红队演练威胁建模攻击面分析入侵检测异常行为分析SIEM集中日志关联分析事件响应预案数字取证保留链恶意软件分析网络流量检测数据丢失防护加密传输存储密钥管理伪匿名化技术差分隐私合成数据水印技术区块链存证智能合约审计形式化验证模糊测试符号执行静态分析动态分析交互式应用安全测试运行时应用自保护内存安全语言迁移WebAssembly沙箱隔离可信执行环境机密计算同态加密多方计算联邦学习差分隐私合成数据集模型逆向防护对抗样本检测模型漂移监控特征重要性解释公平性评估偏见消除可解释AI决策树简化局部近似模型无关解释反事实示例敏感性分析影响函数基准测试压力测试混沌工程故障注入韧性模式断路器舱壁重试退路限流排队优先级调度负载均衡服务发现配置中心特性开关黑暗发布金丝雀发布蓝绿部署影子流量镜像流量A/B测试多变量实验增量发布滚动更新不可变基础设施宠物与牛雪花服务器凤凰服务器僵尸服务器云原生十二要素无状态设计水平扩展垂直分区CQRS模式事件溯源Saga模式两阶段提交最终一致性读写分离分片复制共识算法PaxosRaftGossip协议CRDT数据结构向量时钟逻辑时钟物理时钟NTP同步闰秒处理时区转换夏令时问题日期时间库选择持续化存储策略行存列存文档存储图数据库时序数据库搜索引擎内存缓存分布式锁领导者选举任务分片工作窃取调度器资源配额服务质量类优先级抢占资源共享池连接池线程池协程纤程用户态调度内核旁路RDMA零拷贝内存映射mmap持久内存非易失性存储存储级内存相变存储器忆阻器量子比特超导电路离子阱光子量子退火绝热量子计算经典量子混合算法Shor算法Grover算法量子密钥分发后量子密码格密码多变量密码哈希函数对称加密非对称加密数字签名证书链信任锚证书吊销列表在线证书状态协议证书透明度日志DNSSEC域名系统安全扩展IPSec虚拟专用网络WireGuard传输层安全协议QUICHTTP/3WebTransport信令协议ICE框架STUN/TURNNAT穿透点对点网络内容分发网络边缘计算雾计算MEC移动边缘云计算分布式哈希表区块链共识工作量证明权益证明权威证明空间证明时间证明拜占庭容错联邦拜占庭协议有向无环图侧链状态通道分片等离子体闪电网络跨链原子交换智能合约预言机去中心化身份自主主权身份可验证凭证零知识证明多方计算全同态加密功能加密属性基加密基于身份的加密基于配对的密码学椭圆曲线密码学后量子密码标准化NIST竞赛格基密码编码密码哈希后门随机数生成器真随机数伪随机数熵源硬件随机数生成器软件随机数生成器种子密钥派生函数盐值彩虹表字典攻击暴力破解侧信道攻击时序分析功耗分析电磁分析故障注入差分故障分析毛刺攻击激光注入电压操控时钟扰乱温度变化行锤攻击幽灵熔断SpectreMeltdownForeshadowZombieLoadRIDLFalloutCacheOutSGAxe微码更新内核页表隔离超线程禁用推测执行屏障内存屏蔽缓存刷新TLB失效序列化指令处理器追踪分支预测污染返回导向编程面向返回编程跳转导向编程数据导向编程复用导向编程代码重用攻击ROPJOPCOP面向对象编程函数式编程逻辑编程声明式编程命令式编程过程式编程结构化编程事件驱动编程面向切面编程元编程泛型编程模板元编程契约式设计防御性编程错误处理异常机制断言不变式前置条件后置条件不变循环变体霍尔逻辑形式方法模型检测定理证明符号执行抽象解释程序切片程序理解逆向工程反编译混淆加壳脱壳调试符号剥离二进制差异模糊匹配补丁比较漏洞利用开发shellcode编写ROP链构造堆布局操纵use-after-free双重释放越界读写整数溢出类型混淆竞态条件TOCTTOU条件检查时间与使用时间不一致符号链接竞态硬链接竞态信号处理器竞态锁顺序反转死锁活锁饥饿优先级反转资源枯竭内存泄漏句柄泄漏文件描述符泄漏线程泄漏进程泄漏连接泄漏事务未提交回滚未关闭游标未释放锁未刷新缓冲区未同步持久存储脑裂问题网络分区一致性可用性分区容忍CAP定理BASE理论ACID特性最终一致性强一致性线性一致性顺序因果一致性单调读写会话一致性前缀一致性有界陈旧度读己之写写跟随读因果一致性事务隔离级别读未提交读已提交可重复读串行化快照隔离乐观并发控制悲观并发控制多版本并发控制时间戳排序两阶段锁定意向锁谓词锁间隙锁下一键锁定插入意向锁自适应哈希索引覆盖索引聚簇索引非聚簇索引组合索引前缀索引全文索引空间索引位图索引函数索引部分索引表达式索引物化视图查询重写查询优化执行计划直方图统计相关基数估计选择性代价模型并行查询向量化执行即时编译运算符下推谓词下推投影下推连接下推聚合下推排序分区裁剪分区分桶分片复制因子仲裁读写一致性级别 hinted handoff修复反熵读取修复Merkle树布隆过滤器布谷鸟过滤器计数布隆过滤器Quotient过滤器XOR过滤器最小完美哈希可扩展布隆过滤器稳定布隆过滤器分层布隆过滤器压缩位图Roaring位图概率数据结构基数估计HyperLogLogCount-min sketchTop-KHeavy hittersDistinct samplingReservoir samplingAlias methodWalker alias算法拒绝采样重要性采样马尔可夫链蒙特卡洛吉布斯采样哈密尔顿蒙特卡洛变分推断期望传播消息传递信念传播因子图马尔可夫随机场条件随机场隐马尔可夫模型最大熵马尔可夫模型结构化感知机结构化支持向量机序列标注命名实体识别词性标注句法依存解析语义角色标注指代消解共指消解实体链接关系抽取事件抽取情感分析观点挖掘文本分类主题建模潜在狄利克雷分配隐含语义分析潜在语义索引词嵌入Word2VecGloVeFastTextELMoBERTGPTTransformer自注意力机制多头注意力位置编码掩码语言模型下一句预测文本生成摘要翻译问答对话阅读理解完形填空文本蕴含自然语言推理语音识别语音合成声纹识别说话人分离语音增强语音转换音乐信息检索和弦识别节拍跟踪音高检测旋律提取歌声分离音频指纹音频水印数字信号处理傅里叶变换小波变换滤波器组梅尔频率倒谱系数线性预测编码动态时间规整隐马尔可夫模型高斯混合模型深度神经网络卷积神经网络循环神经网络长短期记忆门控循环单元注意力机制记忆网络神经图灵机胶囊网络生成对抗网络变分自编码器流模型扩散模型能量模型对比学习自监督学习半监督学习弱监督学习多任务学习迁移学习领域自适应元学习小样本学习零样本学习一次性学习课程学习模仿学习强化学习Q-learning策略梯度演员评论家近端策略优化深度确定性策略梯度异步优势演员评论家软演员评论家分层强化学习选项框架最大熵强化学习逆强化学习模仿逆强化学习对抗逆强化学习多智能体强化学习博弈论纳什均衡帕累托最优囚徒困境协调博弈拍卖机制设计匹配市场社会选择投票理论公平分割蛋糕切割资源分配调度算法背包问题旅行商问题车辆路径问题作业车间调度流水车间调度项目管理关键路径法计划评审技术甘特图看板方法Scrum敏捷极限编程结对编程测试驱动开发行为驱动开发领域驱动设计整洁架构六边形架构洋葱架构微内核架构事件驱动架构管道过滤器黑板架构面向服务架构无服务器架构函数即服务后端即服务移动后端即服务平台即服务基础设施即软件容器即服务网格即服务网络功能虚拟化软件定义网络软件定义存储软件定义数据中心超融合基础设施组合基础设施不可变基础设施短暂基础设施宠物与牛雪花服务器凤凰服务器僵尸服务器蓝绿部署金丝雀发布滚动

原创 高质量