将 FastAPI 部署到生产服务器(一套 全)
将 FastAPI 部署到生产服务器(全)
文章目录
- 将 FastAPI 部署到生产服务器(全)
- 一、前言
- 二、Fastapi项目 生产环境配置
- 1. 准备环境
- 2. 编写 FastAPI 应用
- 3. 使用 Uvicorn 运行应用
- 4. 配置生产级服务器 Gunicorn
- 4.1 配置 Gunicorn 和 Uvicorn Workers
- 5. 使用 Supervisor 管理应用
- 三、加SSl证书配置https
- 1、将域名解析到你的服务器
- 2、验证该域名是否解析成功
- 3、let's Encrypt 证书申请
- (1)certbot安装
- (2)let's Encrypt 证书申请
- 四、配置nginx
- 1、nginx安装
- 2、配置nginx.conf
- 3、重新运行nginx
- 五、运行测试
- 1、查看这个服务输出的日志
- 2、访问网站
一、前言
未来的开发者们请上座。
以下是本次用到的FastAPI,Uvicorn,Gunicorn和Supervisor的简要介绍:
-
FastAPI:FastAPI 是一个现代、快速(高性能)的 web 框架,用于构建 APIs,基于 Python 3.6+ 类型提示。主要特性包括:
- 快速:非常高的性能,接近于 NodeJS 和 Go(由 Starlette 和 Pydantic 提供)。
- 快速编码:提高开发速度约 200% 至 300%*。
- 少出错:减少约 40% 的人为(开发者)错误。
- 直观:优秀的编辑器支持,❤️ 的开发体验。
- 易于使用:设计易于使用和学习,尽量减少开发时间。
- 简洁:最小化代码复杂性,尽量减少开发者眼中的 bug。
- 基于标准:基于(并完全兼容)开放标准:OpenAPI(以前称为 Swagger)和 JSON Schema。
- Django 风格的 ORM:支持 Tortoise-ORM 和 Pydantic 模型。
-
Uvicorn:Uvicorn 是一个基于 asyncio 的 ASGI 服务器,用于部署 Python 的异步 web 应用,它的目标是成为 Python 异步服务器网关接口(ASGI)规范的最快实现之一。Uvicorn 支持 HTTP/1.1 和 WebSockets,并且可以配合像 Starlette 和 FastAPI 这样的框架使用。
-
Gunicorn:Gunicorn ‘Green Unicorn’ 是一个 Python WSGI HTTP 服务器,用于 UNIX。它是 Ruby 的 Unicorn 服务器的 Python 移植版。Gunicorn 的工作模式是预先分叉出多个进程来处理请求,这使得它在处理并发请求时具有较高的效率。然而,由于它基于同步的 WSGI,因此在处理 WebSockets 或长连接时可能不如 Uvicorn 高效。
-
Supervisor:Supervisor 是一个用 Python 开发的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动)和关闭进程(程序)。除了对单个进程的管理外,还可以同时启动、关闭多个进程,实现对程序的批量管理。Supervisor 通常被用于管理服务器上的后台程序。
每个工具都有其特定的用途:FastAPI 用于构建 API,Uvicorn 和 Gunicorn 用于部署应用,而 Supervisor 用于进程管理。在 Python 的 web 开发中,这些工具经常一起使用。
二、Fastapi项目 生产环境配置
1. 准备环境
- 操作系统:建议使用 Ubuntu、Debian 或 CentOS 等服务器操作系统。
- Python 环境:安装 Python 3.7+,并创建虚拟环境来隔离项目依赖。
sudo apt update sudo apt install python3 python3-venv python3-pip -y python3 -m venv venv source venv/bin/activate pip install fastapi uvicorn
2. 编写 FastAPI 应用
确保你的 FastAPI 应用文件(如 app.py)结构清晰。例如:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI(root_path="/aiCentre") # aicentre为nginx中api路由名
# 启用CORS支持
app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"], # 或者只列出 ["POST", "GET", "OPTIONS", ...] 等allow_headers=["*"],
)
# 路由
@app.get("/")
async def read_root():return {"message": "Welcome to FastAPI!"}
注:nginx.conf中后端配置参考如下如下,注意root_path和路由要一致。

3. 使用 Uvicorn 运行应用
先在开发环境测试运行:
uvicorn app:app --host 0.0.0.0 --port 8000
访问 http://<你的服务器IP>:8000,确认应用正常。
4. 配置生产级服务器 Gunicorn
生产环境通常需要使用反向代理(如 Nginx)和进程管理器(如 Gunicorn 、 Supervisor)。
4.1 配置 Gunicorn 和 Uvicorn Workers
安装 Gunicorn,并配置多进程支持:
pip install gunicorn uvicorn
gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
访问 http://<你的服务器IP>:8000,确认应用正常,Gunicorn正常运行。
-w 4:指定 4 个工作进程。-k uvicorn.workers.UvicornWorker:使用 Uvicorn Worker。- app:app,第一个app是python文件名,第二个是FastAPI的实例化的对象名。
5. 使用 Supervisor 管理应用
为确保应用在服务器重启后自动运行,可以使用 Supervisor。
- 安装 Supervisor:
sudo apt install supervisor -y - 创建配置文件
/etc/supervisor/conf.d/fastapi.conf:[program:fastapi] command=/path/to/venv/bin/gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker --bind 127.0.0.1:8000 directory=/path/to/your/project user=youruser autostart=true autorestart=true stderr_logfile=/var/log/fastapi.err.log stdout_logfile=/var/log/fastapi.out.log - 启用配置并启动:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start fastapi
注1:每一次更改都需要都执行一遍。
注2:fastapi这个要求是文件名fastapi.conf 和 [program:fastapi]一致,可以更换为你的
三、加SSl证书配置https
前置条件:我默认你已经有域名了,如果没有需要在国内的阿里云、腾讯云、华为云,国外的Hostinger等云服务商都提供域名注册和域名解析服务。找一个你喜欢的就可以,在这里我用的是阿里云注册的域名进行演示。
(国内的域名需要提前备案,15天左右。如果比较着急且只是演示可以用香港或者国外如Hostinger 云服务厂商提供的域名这样可以免掉备案的步骤)
1、将域名解析到你的服务器

等待20s左右让其传播。
2、验证该域名是否解析成功
执行 nslookup + 域名,即可查询域名解析对象
nslookup bak.sligenai.cn

看到解析到你的公网服务器的ip就完成了
3、let’s Encrypt 证书申请
(1)certbot安装
我们需要安装Certbot并用于申请let’s Encrypt 。
打开终端,运行以下命令:
sudo apt update
sudo apt install certbot python3-certbot-nginx
(2)let’s Encrypt 证书申请
sudo certbot --nginx -d bak.sligenai.cn
如果是第一次,可能会要你输入你的邮箱和让你输入A或Yes同意一些条款你按着输入就行。

然后就生成好证书了。记得保存好fullchain.pem和private.pem的路径,这个等下会用到。
下面是我的fullchain.pem和private.pem的路径
/etc/letsencrypt/live/bak.sligenai.cn/fullchain.pem
/etc/letsencrypt/live/bak.sligenai.cn/privkey.pem
fullchain.pem和privkey.pem这两个文件对于配置Web服务器以安全地提供服务是非常重要的。下面是这两个文件的详细说明:
fullchain.pem
- 含义:
fullchain.pem文件包含了你的域名证书以及任何中间证书的完整链,但不包括根证书。这个文件是将你的证书(cert.pem)和中间证书(chain.pem)合并而成的。在大多数Web服务器的SSL配置中,使用这个文件可以确保客户端(如Web浏览器)能够信任你的证书,即能够通过证书链验证到达一个根CA,该根CA已被客户端信任。 - 用途:在配置SSL/TLS时,
fullchain.pem通常用于服务器配置中指定证书文件。例如,在Nginx中,会用它来设置ssl_certificate指令。
privkey.pem
- 含义:
privkey.pem文件包含了你的私钥,这是在生成CSR(证书签名请求)时创建的。私钥是安全通信的基础,用于在SSL/TLS握手过程中对服务器端信息进行加密,确保只有对应的公钥(即你的服务器证书)能够解密。私钥必须保密,任何泄露都可能导致通信被解密。 - 用途:在Web服务器的SSL配置中,
privkey.pem用于设置私钥文件的位置。例如,在Nginx配置中,会用它来设置ssl_certificate_key指令。
总结
- fullchain.pem:包含你的域名证书和中间证书的全部内容,用于服务器配置中指定证书链。
- privkey.pem:包含你的私钥,用于服务器配置中指定私钥文件的位置。
在配置SSL/TLS时,确保正确使用这些文件,同时保护好你的私钥,避免安全风险。
注1:如果你没有开放443,80端口,申请的时候会报错
注2:如果你没有将域名解析到这个服务器的ip也会报错,会出现类似下面的回复。

四、配置nginx
1、nginx安装
sudo apt update
sudo apt install nginx
2、配置nginx.conf
打开nginx.conf
vim /etc/nginx/nginx.conf
下面是一个nginx.conf模版
# nginx.conf
worker_processes auto; # 与worker_connections乘积表示实际处理事件的总数events {worker_connections 1024; # 每个工作进程连接数
}http {include mime.types; # 文件扩展名与文件类型映射表default_type application/octet-stream;client_max_body_size 10M;sendfile on; # 减少网络报文数量keepalive_timeout 65; # 链接超时时间,自动断开,如果为0则无限时长。# HTTP server配置(重定向到HTTPS)server {listen 80; # 监听80端口server_name bak.sligenai.cn; # 替换为你的域名return 301 https://$host$request_uri; # 强制重定向到HTTPS}# HTTPS server配置server {listen 443 ssl; # 监听443端口server_name bak.sligenai.cn; # 替换为你的域名ssl_certificate /etc/letsencrypt/live/bak.sligenai.cn/fullchain.pem; #替换为你的fuuchian.pemssl_certificate_key /etc/letsencrypt/live/bak.sligenai.cn/privkey.pem; #替换为你的privkey.pemroot /usr/share/nginx/html;location / {index index.html index.htm;rewrite / /login permanent; # 根据需求选择是否保留}location /vue-test { #替换为你的项目路由,注意需要一开头的base一致index index.html index.htm;try_files $uri $uri/ /vue-test/index.html; #这个则是/路由/index.html 前面的部分一致不用动。 }location /abc { #替换为请求拦截器中的baseURL的地址,如果没有后端则可以删掉这一部分add_header Cache-Control no-cache;add_header Pragma no-cache;add_header Expires 0;proxy_pass http://localhost:3777/; #后端地址}error_page 404 /404.html; # 自定义404页面location = /404.html {internal;}error_page 500 502 503 504 /50x.html; # 自定义500页面location = /50x.html {internal;}}}
注1:上面一共两个路由 /vue-test、 /abc ,分别为前端和后端。
注2:如果有多个项目则复制/vue-test 在旁边粘贴一个,改掉路由即可。
注3: 如果有其他域名,则额外把上面这个server复制一遍,即可。
3、重新运行nginx

检测nginx.conf是否配置正常
nginx -t
如果报错,则按照提示修改即可。
重新运行nginx
sudo systemctl reload nginx
五、运行测试
1、查看这个服务输出的日志
tail -f /var/log/gunicorn_stderr.log

服务正常。
2、访问网站

可以看到后端可以正常访问。
恭喜你,掌握了企业级 py后端的部署步骤。
相关文章:
将 FastAPI 部署到生产服务器(一套 全)
将 FastAPI 部署到生产服务器(全) 文章目录 将 FastAPI 部署到生产服务器(全)一、前言二、Fastapi项目 生产环境配置1. 准备环境2. 编写 FastAPI 应用3. 使用 Uvicorn 运行应用4. 配置生产级服务器 Gunicorn4.1 配置 Gunicorn 和 …...
题解 洛谷 Luogu P1873 [COCI 2011/2012 #5] EKO / 砍树 二分答案 C/C++
题目传送门: P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1873思路: 很简单的二分答案 每次找区间中点 m,判断以 m 为高度砍下的木头是否够 h 即可 代码: #defin…...
SpringCloud SaToken整合微服务 集成Redis 网关路由权限拦截 服务间内部调用鉴权
介绍 作为 API 网关,通常负责路由、负载均衡、安全控制等功能。进行 统一鉴权 的做法意味着将所有微服务的认证和授权逻辑集中到网关层,而不是每个微服务单独实现。这样做有许多好处,微服务只关心核心业务逻辑,不需要处理身份验证…...
Oracle ADB 导入 BANK_GRAPH 的学习数据
Oracle ADB 导入 BANK_GRAPH 的学习数据 1. 下载数据2. 导入数据运行 setconstraints.sql 1. 下载数据 访问 https://github.com/oracle-quickstart/oci-arch-graph/tree/main/terraform/scripts,下载, bank_accounts.csvbank_txns.csvsetconstraints.…...
优化 MFC CGridCtrl 的表格布局与功能
在使用 MFC 的 CGridCtrl 控件创建表格时,遇到的一个典型问题是,当表格滚动条出现时,最后一列会显示空白。这篇博客将记录解决这一问题的详细过程,同时总结了 CGridCtrl 初始化及优化的关键步骤,帮助开发者快速搭建一个…...
koa-body 的详细使用文档
目录 koa-body install Features Hello World - Quickstart Usage with koa-router Usage with unsupported text body type Options 关于 parsedMethods 的说明 文件支持 关于未解析请求主体的说明 一些强大的选择 使用总结 koa-body 功能齐全的 koa body 解析器中…...
信息系统与互联网中的安全、隐私及伦理问题
1 伦理(Ethics) 1.1 伦理框架(Ethical Frameworks) 自然法与权利(Natural Law and Rights) 定义:基于人类自然权利的伦理思想,强调生命、自由和财产等基本权利。应用:隐…...
Java安全—log4j日志FastJson序列化JNDI注入
前言 log4j和fastjson都是这几年比较火的组件,前者是用于日志输出后者则是用于数据转换,今天我们从源码来说一下这两个组件为何会造成漏洞。 实验环境 这里的idea要进行一下配置,因为我们要引用第三方组件,而这些第三方组件都是…...
【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】
【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN?2.2 CMSIS-NN是什么?2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM…...
Python中如何判断一串文本是不是数字
目录 1. 内置函数2. 尝试类型转换3. 正则表达式 在编程中,我们经常需要确定一段文本是否为数字。 这不仅关系到数据的准确性,还涉及到后续的计算和处理。 1. 内置函数 在Python中,可以使用str.isdigit()、str.isnumeric()和str.isdecimal()…...
基于YOLOv8深度学习的智慧农业山羊行为检测系统研究与实现(PyQt5界面+数据集+训练代码)
随着智慧农业的快速发展,利用先进的技术手段对牲畜的行为进行自动化监测和管理,已经成为现代农业中的重要研究方向之一。在传统的农业管理模式中,牲畜的行为监测通常依赖于人工观测,耗时耗力且难以实现大规模实时监控。然而&#…...
Redis环境部署(主从模式、哨兵模式、集群模式)
一、概述 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库…...
高阶C语言之六:程序环境和预处理
本文介绍程序的环境,在Linux下对编译链接理解,较为简短,着重在于编译的步骤。 C的环境 在ANSI C(标准C语言)的任何一种实现中,存在两个不同的环境。 翻译环境:在这个环境中,源代码…...
Vue 3 国际化 (i18n) 最佳实践指南
1. 安装依赖 npm install vue-i18n@9 2. 项目结构建议 src/ ├── i18n/ │ ├── index.ts # i18n 配置文件 │ ├── languages/ # 语言文件目录 │ │ ├── zh-CN.ts # 中文 │ │ ├── en-US.ts # 英文 │ │ └─…...
Acme PHP - Let‘s Encrypt
Lets Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。 使用PHP来更新证书: Acme PHP | Rob…...
获取DOM 节点的四大方式
前言: 在 Vue 中,获取 DOM 节点可以通过多种方式,如自定义属性、ref 引用、类选择器和 ID 选择器等。 一、使用 ref 获取 DOM 实例 ref 是 Vue 中推荐的获取 DOM 节点的方式,它为每个节点分配一个唯一的引用,可以直…...
ROS2 Humble 机器人建模和Gazebo仿真
一.Ubuntu22.04系统虚拟机安装 1.下载镜像并安装 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装选英文版,安装类型选清除磁盘。 3.遇到无法复制windows内容到虚拟机里。需安装VMware tools。VMware tools安装不了&a…...
docker容器镜像的制作、使用以及传递
目录 制作容器镜像使用Dockerfile制作镜像准备所需文件构建镜像怎么不使用基础镜像来构建容器镜像 使用容器镜像传递容器镜像 这篇文章讨论一下怎么使用docker制作容器镜像,容器镜像的使用,以及怎么传递容器镜像。 制作容器镜像 docker制作容器镜像推荐…...
一种由于吸入硅酸盐粉尘而引起的肺部疾病:pneumonoultramicroscopicsilicovolcanoconiosis
有人说,pneumonoultramicroscopicsilicovolcanoconiosis是英语中最长的单词,这是一个医学词汇,意思是指:一种由于吸入硅酸盐粉尘而引起的肺部疾病。 pneumonoultramicroscopicsilicovolcanoconiosis [ˈnju:mənəuˌʌltrəˌmai…...
百度AI人脸检测与对比
1.注册账号 打开网站 https://ai.baidu.com/ ,注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置: <!--百度AI--> <dependency> <groupId>com.baidu.…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
