如何在服务器 Ubuntu 22.04 上部署 FastAPI + Uvicorn + Nginx 生产级 Python Web 服务指南

本文从基础环境准备、部署架构设计、性能调优、安全配置到监控指标采集,全流程讲解如何在 Ubuntu 22.04 服务器 上构建一个可用于生产环境的 FastAPI + Uvicorn + Nginx Python Web 服务平台。A5数据重点聚焦实战细节、系统参数配置、性能评测与问题排查方法,适合有一定 Linux / 网络 / Python 经验的开发与运维人员阅读。

一、目标架构与适用场景

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

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

适用场景包括:

  • 高并发 API 服务
  • 微服务架构中 HTTP 接口部署
  • 需要TLS/HTTPS安全访问的生产环境

二、香港服务器www.a5idc.com硬件与系统建议

项目推荐配置说明
CPU4 核及以上并发请求更稳定
内存8GB 以上Python GC + 缓存空间
磁盘NVMe 150GB 以上快速日志写入
网络公网带宽 100MbpsAPI 对外访问
系统Ubuntu 22.04 LTS最新稳定版
外网访问建议部署具有 DDoS 防护的 BGP 线路服务器,例如 CN2 / 电信直连方案,以降低网络抖动和丢包率。

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

3.1 系统更新

sudoapt update &&sudoapt upgrade -y sudoreboot

3.2 安装 Python 环境与必备工具

# 安装 Python3.10sudoaptinstall -y python3.10 python3.10-venv python3.10-dev python3-pip build-essential # 常用工具sudoaptinstall -y nginx ufw git

3.3 建立虚拟环境

进入应用目录 /opt/fastapi_app

sudomkdir -p /opt/fastapi_app sudochown$USER:$USER /opt/fastapi_app cd /opt/fastapi_app python3.10 -m venv venv source venv/bin/activate 

四、应用代码结构与示例

4.1 最简 FastAPI 项目结构

fastapi_app/ ├── app/ │ ├── main.py │ ├── api/ │ │ └── v1.py ├── requirements.txt └── logging.conf 

4.2 示例代码

app/main.py

from fastapi import FastAPI import uvicorn app = FastAPI(title="示例 FastAPI 服务")@app.get("/health")defhealth_check():return{"status":"OK"}@app.get("/items/{item_id}")defread_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")defping():return{"message":"pong"}

requirements.txt

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

五、使用 Gunicorn 管理 Uvicorn Workers

5.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"

5.2 启动命令

mkdir -p logs gunicorn app.main:app -c gunicorn_conf.py 

六、Nginx 反向代理配置

6.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/; } } 

启用配置:

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

七、生产环境 SSL/TLS

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

sudoaptinstall -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

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

9.1 日志策略

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

可结合 logrotate 做定期清理:

sudonano /etc/logrotate.d/fastapi 

内容示例:

/opt/fastapi_app/logs/*.log { daily rotate 14 compress missingok notifempty copytruncate } 

9.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
结果受网络环境、服务器硬件及应用逻辑影响,上表为参考数据。

十一、故障排查与常见问题

11.1 502 Bad Gateway

检查:

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

11.2 超时

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


十二、后续优化建议

12.1 使用 Supervisor 管理进程

sudoaptinstall supervisor sudonano /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 

12.2 HTTPS 强制 HSTS

在 Nginx SSL 配置中添加:

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

结语

通过A5数据的教程,你已经完成了一个基于 Ubuntu 22.04 + FastAPI + Uvicorn + Nginx 的生产级 Python Web 服务部署,涵盖架构设计、配置细节、性能测试、日志监控等关键内容。接下来可根据业务规模,结合 Redis 缓存、PostgreSQL 数据库以及 CI/CD 自动化部署进一步提升系统稳定性与可维护性。

如需更深入的性能调优或结合 Kubernetes / Docker 部署方案,也可以在此基础上拓展讨论。

Read more

教育场景落地:gpt-oss-20b-WEBUI实现自动答疑机器人

教育场景落地:gpt-oss-20b-WEBUI实现自动答疑机器人 教育行业正面临一个长期痛点:学生提问量大、时间分散、教师响应滞后,尤其在课后复习、自习答疑、在线学习等非教学时段,知识盲点无法及时消除。传统方式依赖人工值守或预设FAQ,覆盖有限、更新缓慢、缺乏交互深度。而gpt-oss-20b-WEBUI镜像的出现,为一线教育工作者提供了一种轻量、可控、可私有化部署的智能答疑解决方案——它不依赖云端API,不上传学生数据,模型运行在本地算力上,真正把“AI助教”装进了学校的IT基础设施里。 本文将聚焦真实教育场景,不讲抽象架构,不堆参数对比,而是带你从零开始:如何用一台双卡4090D服务器(或云上vGPU实例),快速部署gpt-oss-20b-WEBUI,构建一个能理解数理化题干、解析错因、分步讲解、支持多轮追问的自动答疑机器人。所有操作基于镜像内置能力,无需编译、不改代码、不配环境,重点落在“怎么用对”和“怎么用好”上。 1. 为什么是gpt-oss-20b-WEBUI?教育场景的三重适配 教育场景对AI答疑工具的要求很具体:不是越“全能”

【沧海拾昧】绿联NAS配置WebDAV公网访问并使用RaiDrive挂载到本地

【沧海拾昧】绿联NAS配置WebDAV公网访问并使用RaiDrive挂载到本地

#C0601 沧海茫茫千钟粟,且拾吾昧一微尘 ——《沧海拾昧集》@CuPhoenix 【阅前敬告】沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系【如有问题必是本集记录有谬,切勿深究】 目录 * 前言 * 一、配置步骤 * 1、确认网络设备支持 IPv6 * 2、购买域名 * 3、配置访问凭证 * 2、NAS 配置 WebDAV 服务 * 3、NAS 配置 DDNS 支持 * 4、配置反向代理 * 5、在 RaiDrive 中挂载 * 6、设置防火墙 * 二、最终结果 前言 将 NAS 的磁盘空间通过 RaiDrive 等软件挂载到本地使用是一种十分便捷的方法,但是 RaiDrive 中只有针对群晖(

在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

文章目录 * 一、什么是 Agent Skills? * 二、使用步骤 * 1.下载官方提供的agent-skills文档 * 2.cursor中使用 * 三、如何设计自己的skills * 四、实战:打造一个“生成标准 React 组件”的 Skill * 第一步:创建目录 * 第二步:编写 SKILL.md * 总结:为什么你应该开始用 Skills? 一、什么是 Agent Skills? 简单来说,Agent Skills 是一种标准化的方式,用来封装特定任务的知识和工作流。 如果说 MCP (Model Context Protocol) 是给 AI 装上了“手”(让它能连接数据库、Github)

ComfyUI Web Viewer:ComfyUI图像生成的便捷可视化利器

ComfyUI Web Viewer:ComfyUI图像生成的便捷可视化利器

一、应用介绍 1. 实时预览与调整:在图像生成过程中,无论是进行艺术创作、设计工作还是科研图像处理,实时查看生成结果并进行调整至关重要。ComfyUI Web Viewer提供了即时的可视化反馈,让用户能够实时观察到图像生成的进展。例如,艺术家在使用ComfyUI创作一幅复杂的奇幻插画时,通过Web Viewer可以实时看到不同参数调整后插画的变化,如色彩、构图、元素分布等,从而快速做出决策,避免长时间等待最终结果后才发现不符合预期,节省大量时间和精力,提高创作效率。 2. 团队协作与分享:在团队项目中,如广告设计团队、影视特效制作团队等,成员之间需要频繁交流和协作。ComfyUI Web Viewer使得团队成员可以方便地分享和展示图像生成工作流及结果。团队成员可以通过网络链接,在浏览器中直接查看彼此的工作进展和生成的图像,无需在本地安装复杂的环境。例如,广告设计团队在为客户设计海报时,设计师可以将Web Viewer生成的链接分享给文案撰写人员、客户等相关人员,他们可以随时在浏览器中查看设计稿,并提出反馈意见,促进团队协作和沟通,确保项目顺利推进。 3. 远程访问与移动办公