0%

FastAPI自学教程(78) - 版本管理与HTTPS配置

1.版本管理机制

1
2
3
# requirements.txt中固定版本示例
fastapi>=0.45.0,<0.46.0
pydantic>=1.2.0,<2.0.0
  • FastAPI当前保持0.x.x版本,遵循语义化版本规范,MINOR版本更新可能包含Breaking Changes
  • 生产环境必须固定版本范围,推荐使用fastapi>=X.Y.Z,<X.Y+1.0格式防止意外升级
  • 升级流程:
    graph TD
      A[编写测试用例] --> B[升级FastAPI版本]
      B --> C{测试通过?}
      C -->|是| D[更新版本约束]
      C -->|否| E[修复代码问题]
      E --> B

2.依赖管理策略

2.1 Starlette处理

  • 禁止直接固定Starlette版本,FastAPI自动绑定兼容版本
  • 不同FastAPI版本会指定对应的Starlette依赖树

2.2 Pydantic约束

  • Pydantic需固定到1.x版本,推荐pydantic>=1.2.0,<2.0.0
  • FastAPI已包含与Pydantic的兼容性测试,确保版本适配

3.HTTPS核心原理

3.1 证书机制

  • 需从CA机构获取证书(如Let’s Encrypt),证书存在有效期需定期更新
  • SNI扩展支持单IP多证书,通过TLS终止代理实现多域名托管

3.2 通信流程

graph LR
    A[客户端] --> B[TLS终止代理]
    B -->|解密请求| C[FastAPI应用]
    C -->|响应数据| B
    B -->|加密响应| A
  • 代理服务器(Nginx/Traefik)负责HTTPS加解密,应用层处理纯HTTP流量

4.生产部署建议

  1. 证书管理

    • 使用Let’s Encrypt免费证书,通过certbot-auto工具自动续期
    • 配置证书更新监控(如crontab定时任务)
  2. 代理配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Nginx配置示例
    server {
    listen 443 ssl;
    server_name api.example.com;
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    location / {
    proxy_pass http://localhost:8000;
    }
    }
    • 推荐使用Traefik/Caddy等支持自动证书管理的代理
  3. 安全增强

    • 强制HTTP跳转HTTPS:return 301 https://$host$request_uri;
    • 启用HSTS头:add_header Strict-Transport-Security "max-age=31536000";

测试命令示例:

1
2
3
4
5
# 查看当前FastAPI版本
pip show fastapi | grep Version

# 证书续期操作
sudo certbot renew --dry-run