跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Ubuntu 22.04 生产环境 FastAPI + Uvicorn + Nginx 部署实战

Ubuntu 22.04 生产环境 FastAPI 服务部署涉及系统初始化、依赖安装、Gunicorn 多进程管理及 Nginx 反向代理配置。流程包含 SSL 证书申请、防火墙安全加固、日志轮转策略及压力测试方法。针对 502 错误、超时等常见问题提供排查思路,助力构建高可用 Python Web 应用。

时间旅人发布于 2026/3/23更新于 2026/6/2525 浏览

在生产环境下,单纯使用 Uvicorn 监听外部请求存在性能和安全风险,因此我们采用如下部署架构:

Internet │ ▼ Nginx (反向代理 + SSL/TLS) │ proxy_pass ▼ Uvicorn Workers (基于 uvloop + Gunicorn 管理) │ FastAPI Application │ PostgreSQL / Redis / 后端微服务 

适用场景包括高并发 API 服务、微服务架构中的 HTTP 接口部署,以及需要 TLS/HTTPS 安全访问的生产环境。

一、硬件与系统建议

项目推荐配置说明
CPU4 核及以上并发请求更稳定
内存8GB 以上Python GC + 缓存空间
磁盘NVMe 150GB 以上快速日志写入
网络公网带宽 100MbpsAPI 对外访问
系统Ubuntu 22.04 LTS最新稳定版

外网访问建议部署具有 DDoS 防护的 BGP 线路服务器,例如 CN2 / 电信直连方案,以降低网络抖动和丢包率。

二、系统初始化与依赖安装

2.1 系统更新
sudo apt update && sudo apt upgrade -y
sudo reboot
2.2 安装 Python 环境与必备工具
# 安装 Python3.10
sudo apt install -y python3.10 python3.10-venv python3.10-dev python3-pip build-essential
# 常用工具
sudo apt install -y nginx ufw git
2.3 建立虚拟环境

进入应用目录 /opt/fastapi_app:

sudo mkdir -p /opt/fastapi_app
sudo chown $USER:$USER /opt/fastapi_app
cd /opt/fastapi_app
python3.10 -m venv venv
source venv/bin/activate

三、应用代码结构与示例

3.1 最简 FastAPI 项目结构
fastapi_app/
├── app/
│   ├── main.py
│   ├── api/
│   │   └── v1.py
├── requirements.txt
└── logging.conf
3.2 示例代码

app/main.py

from fastapi import FastAPI
import uvicorn

app = FastAPI(title="示例 FastAPI 服务")

@app.get("/health")
def health_check():
    return {"status": "OK"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

app/api/v1.py

from fastapi import APIRouter

router = APIRouter(prefix="/v1")

@router.get("/ping")
def ping():
    return {"message": "pong"}

requirements.txt

fastapi==0.99.1
uvicorn==0.23.2
gunicorn==20.1.0

四、使用 Gunicorn 管理 Uvicorn Workers

4.1 Gunicorn + Uvicorn 配置

创建启动脚本 gunicorn_conf.py:

import multiprocessing

workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "uvicorn.workers.UvicornWorker"
bind = "127.0.0.1:8000"
timeout = 30
keepalive = 5

# 日志
errorlog = "/opt/fastapi_app/logs/gunicorn.error.log"
accesslog = "/opt/fastapi_app/logs/gunicorn.access.log"
loglevel = "info"
4.2 启动命令
mkdir -p logs
gunicorn app.main:app -c gunicorn_conf.py

五、Nginx 反向代理配置

5.1 Nginx 配置文件

创建 /etc/nginx/sites-available/fastapi:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://127.0.0.1:8000;
    }

    location /static/ {
        alias /opt/fastapi_app/app/static/;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/fastapi /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

六、生产环境 SSL/TLS

使用 Certbot 获取免费 Let's Encrypt 证书:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

自动续期检查:

sudo systemctl status certbot.timer

七、防火墙与安全

启用 UFW 并允许必要端口:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

八、日志、监控与性能指标

8.1 日志策略
# 日志目录 /opt/fastapi_app/logs/
# Nginx access log /var/log/nginx/access.log

可结合 logrotate 做定期清理:

sudo nano /etc/logrotate.d/fastapi

内容示例:

/opt/fastapi_app/logs/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    copytruncate
}
8.2 监控指标
指标采集方式
CPU 利用率top / htop / vmstat
内存使用free -m
进程状态ps aux
网络延迟MTR / traceroute
99% 响应时间external 接口监控

九、压力测试与性能评测

使用 wrk 压测:

wrk -t4 -c500 -d60s http://example.com/health
并发连接数平均响应时间 (ms)吞吐 (req/s)
10018.55200
30042.74800
50096.33500

结果受网络环境、服务器硬件及应用逻辑影响,上表为参考数据。

十、故障排查与常见问题

10.1 502 Bad Gateway

检查:

  • Uvicorn/Gunicorn 是否运行
  • Nginx 配置 proxy_pass 是否正确
  • 端口是否被防火墙阻断
10.2 超时

Gunicorn timeout 可适当调大,或优化业务逻辑减少阻塞调用。

十一、后续优化建议

11.1 使用 Supervisor 管理进程
sudo apt install supervisor
sudo nano /etc/supervisor/conf.d/fastapi.conf

内容:

[program:fastapi]
command=/opt/fastapi_app/venv/bin/gunicorn app.main:app -c /opt/fastapi_app/gunicorn_conf.py
directory=/opt/fastapi_app
autostart=true
autorestart=true
stderr_logfile=/opt/fastapi_app/logs/fastapi.err.log
stdout_logfile=/opt/fastapi_app/logs/fastapi.out.log

重载:

sudo supervisorctl reread
sudo supervisorctl update
11.2 HTTPS 强制 HSTS

在 Nginx SSL 配置中添加:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

目录

  1. 一、硬件与系统建议
  2. 二、系统初始化与依赖安装
  3. 2.1 系统更新
  4. 2.2 安装 Python 环境与必备工具
  5. 安装 Python3.10
  6. 常用工具
  7. 2.3 建立虚拟环境
  8. 三、应用代码结构与示例
  9. 3.1 最简 FastAPI 项目结构
  10. 3.2 示例代码
  11. 四、使用 Gunicorn 管理 Uvicorn Workers
  12. 4.1 Gunicorn + Uvicorn 配置
  13. 日志
  14. 4.2 启动命令
  15. 五、Nginx 反向代理配置
  16. 5.1 Nginx 配置文件
  17. 六、生产环境 SSL/TLS
  18. 七、防火墙与安全
  19. 八、日志、监控与性能指标
  20. 8.1 日志策略
  21. 日志目录 /opt/fastapi_app/logs/
  22. Nginx access log /var/log/nginx/access.log
  23. 8.2 监控指标
  24. 九、压力测试与性能评测
  25. 十、故障排查与常见问题
  26. 10.1 502 Bad Gateway
  27. 10.2 超时
  28. 十一、后续优化建议
  29. 11.1 使用 Supervisor 管理进程
  30. 11.2 HTTPS 强制 HSTS
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • 基于 BRPC 与 Protobuf 的分布式文件存储 RPC 服务实现
  • 颠覆级里程碑:Whisper Large-V3-Turbo重构语音交互技术范式
  • 平凡人的努力与坚持:致敬默默前行者
  • AI 图像生成指南:从原理到实战
  • MIT 电机模式控制详解:参数、场景与调试建议
  • Java 业务端自建 Kafka 重试与死信队列体系
  • IoTSharp 开源物联网基础平台功能与部署详解
  • Agent 四大范式综述:深入理解智能体规划原理
  • C++ 二叉搜索树实现与性能分析
  • llama-cpp-python 本地大模型部署与安装实战
  • Java8 ConcurrentHashMap 底层数据结构与核心方法流程
  • 飞算 JavaAI:智能编程助手的本地化分析与代码生成实践
  • 2019 年信奥赛 C++ 提高组 CSP-S 初赛真题解析(选择题 11-15)
  • AI 产品经理工作指南:职责、挑战与技能体系
  • RTX 4090 加速国产 AIGC 视频生成:腾讯混元与阿里通义万相开源模型
  • C++11 核心新特性实战:Lambda、移动语义与模板
  • 零基础 AI 入门:从概念理解到实践应用指南
  • BeyondMimic 人形机器人舞蹈训练与 rl_sar 部署实践
  • FaceFusion 与 Stable Diffusion 融合构建个性化数字人

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online