当前位置: 首页 > news >正文

FastAPI系列:Ubuntu部署FastAPI项目实战

这篇文章提供了在Ubuntu上部署FastAPI应用程序的详细指南。首先,读者将学习如何创建项目目录并设置Python虚拟环境,接着安装FastAPI、Uvicorn和Gunicorn等必要依赖。随后,文章指导用户编写基本的FastAPI应用程序代码,并使用Gunicorn和Uvicorn运行该应用,验证API是否正常工作。

为了方便管理,文章还介绍了如何创建systemd服务单元文件,使得用户能够轻松启动、停止和重启应用程序,并确保其在系统重启时自动启动。最后,读者可以通过systemctl status命令检查服务的运行状态。整体而言,这篇文章为读者提供了一个清晰的步骤,帮助他们在生产环境中顺利部署FastAPI应用程序。

FastAPI是一个现代、快速、高性能的web框架,用于构建api和web应用程序。在个人电脑上编写和开发FastAPI应用程序后,您肯定想将其放到互联网上,以便全世界都可以使用和享受您的杰作。在Ubuntu上部署FastAPI应用程序是生产环境常见任务。事不宜迟,我们开始吧。
在这里插入图片描述

示例项目准备

本节是关于在实际服务器上设置FastAPI应用程序的全部内容。为此,首先需要创建一个目录来存储代码。执行以下命令:

mkdir /home/fastapi_example
cd /home/fastapi_example

一旦创建了目录,就需要设置虚拟环境。在Ubuntu中,你必须安装Python虚拟环境包:

sudo apt update
sudo apt install python3-venv

下一步是初始化并激活虚拟环境来运行你的代码:

python3 -m venv venv
source venv/bin/activate

现在,安装必要的依赖包:

pip install fastapi uvicorn gunicorn

一旦安装了必要的包,就需要创建应用程序文件。运行如下命令:

sudo nano main.py

现在你可以将Python代码添加到main.py文件中:

# main.py
from fastapi import FastAPI

app = FastAPI()

@ app.get("/")
def read_root():
    return {
        "success": True,
        "message": "Welcome to Sling Academy Public API"
} 

如果你已经把你的代码推送到GitHub,你可以把你的项目拉到fastapi_example目录:

git pull <your project repository URL>

然后在requirements.txt文件中安装所有包:

pip install -r requirements.txt

禁用swagger文档

在生产环境中,当然不能访问swagger接口文档,可以通过下面配置禁用文档访问。

# main.py

from fastapi import FastAPI

app = FastAPI(
    docs_url=None, # Disable docs (Swagger UI)
    redoc_url=None, # Disable redoc
)

运行项目

Gunicorn是Python WSGI HTTP服务器,旨在为你的FastAPI应用程序提供服务。为了验证一切正常,在fastapi_example目录下使用以下命令运行临时API:

gunicorn main:app -k uvicorn.workers.UvicornWorker

-k uvicorn.workers.UvicornWorker,这是 Gunicorn 的一个参数,用于指定工作进程的类型,具体解释如下:

  • -k:这是 --worker-class 的缩写形式,其作用是指定 Gunicorn 使用的工作进程类。
  • uvicorn.workers.UvicornWorker:指定使用 uvicorn 作为工作进程的执行器。uvicorn 是一个基于 asyncio 的快速 ASGI(异步服务器网关接口)服务器,支持异步编程。通过使用 uvicorn 工作进程,Gunicorn 能够以异步方式处理请求,从而提升应用程序的性能和并发处理能力。

打开另一个终端窗口,执行如下命令:

curl http://localhost:8000

你应该得到这个:

{"success":true,"message":"Welcome to Sling Academy Public API"}

按Ctrl + C停止临时web服务器,并移动到下一步以生产方式再次运行它。

创建系统服务

我们创建系统服务来管理应用程序。这样做的好处是你可以轻松地启动、重新启动和停止应用程序。此外,当系统重新启动时,您的应用程序将自动启动。

仍然,在fastapi_example目录中,为Gunicorn创建一个配置文件:

sudo nano gunicorn_conf.py

在文件中粘贴下面代码:

# gunicorn_conf.py
from multiprocessing import cpu_count

bind = "127.0.0.1:8000"

# Worker Options
workers = cpu_count() + 1
worker_class = 'uvicorn.workers.UvicornWorker'

# Logging Options
loglevel = 'debug'
accesslog = '/home/fastapi_example/access_log'
errorlog =  '/home/fastapi_example/error_log'

保存并退出该文件。现在我们必须在/etc/systemd/system目录中创建一个systemd单元文件。执行以下命令:

sudo nano /etc/systemd/system/fastapi_example.service

创建服务后,向其添加以下内容:

[Unit]
Description=Gunicorn Daemon for FastAPI example
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/fastapi_example
ExecStart=/home/fastapi_example/env/bin/gunicorn -c gunicorn_conf.py main:app -k uvicorn.workers.UvicornWorker

[Install]
WantedBy=multi-user.target

保存并关闭文件。下面对配置文件进行简单解释:

[Unit]

​ 这是 Systemd 服务单元文件的一个段落,用于定义服务的通用信息和依赖关系。

  • Description:对该服务的描述信息,这里表明该服务是用于 FastAPI 示例的 Gunicorn 守护进程。当你使用 systemctl status 命令查看服务状态时,会显示这个描述信息,方便你识别服务。
  • After:指定该服务在哪些目标(target)之后启动。network.target 表示网络服务启动完成后,才会启动此服务。这是因为 FastAPI 应用通常需要网络连接,确保网络就绪后再启动服务可以避免因网络未准备好而导致的启动失败。

[Service]

​ 该段落用于定义服务的具体运行参数和执行命令。

  • User:指定以哪个用户身份运行该服务。这里指定为 ubuntu 用户,意味着 Gunicorn 进程将以 ubuntu 用户的权限运行。

  • Group:指定服务运行时所属的用户组。www-data 通常是 Web 服务器相关的用户组,将服务进程加入该组可以方便与其他 Web 服务进行交互。

  • WorkingDirectory:指定服务的工作目录。服务启动时,会将当前工作目录切换到 /home/fastapi_example,这样在执行命令时,相对路径会基于该目录进行解析。

  • ExecStart:指定服务启动时要执行的命令。这里使用 /home/fastapi_example/env/bin/gunicorn 来启动 Gunicorn 服务器,-c gunicorn_conf.py 表示使用 gunicorn_conf.py 作为 Gunicorn 的配置文件,main:app 表示要运行的 FastAPI 应用实例,main 是 Python 模块名,app 是 FastAPI 应用对象的名称。

[Install]

该段落用于定义服务的安装信息,即服务如何在系统启动时自动启动。

  • WantedBy:指定该服务被哪些目标(target)所依赖。multi-user.target 是一个常用的目标,表示多用户模式。当系统进入多用户模式时,会尝试启动被 multi-user.target 所依赖的服务,因此将该服务的 WantedBy 设置为 multi-user.target 可以实现服务在系统启动时自动启动。

配置自动运行

启动并启用fastapi_example服务(以便在服务器重启时自动启动):

sudo systemctl start fastapi_example
sudo systemctl enable fastapi_example

运行这个命令,检查服务是否正常工作:

sudo systemctl status fastapi_example

到目前为止,我们已经成功地使用Gunicorn和Uvicorn发布了FastAPI应用程序。

最后总结

这篇文章提供了一个完整的指南,涵盖了从创建FastAPI应用程序到在Ubuntu上部署和管理该应用程序的所有步骤。通过使用Gunicorn和Uvicorn,文章展示了如何在生产环境中高效地运行FastAPI应用程序。此外,使用systemd创建服务单元文件的做法,使得应用程序的管理更加方便。生产环境完整部署,可能还需要nigix和https证书等方面内容,有兴趣读者可以继续探索学习。

相关文章:

  • 用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
  • springboot 如何实现发送短信
  • 什么是 Ribbon?
  • WordPress平台如何接入Deepseek,有效提升网站流量
  • Deepseek引爆AI热潮 防静电地板如何守护数据中心安全
  • 通义灵码在跨领域应用拓展之物联网篇
  • 蓝桥杯第十六届嵌入式模拟编程题解析
  • Android TextView 使用.9图片文字不展示
  • 计算机视觉算法实战——跌倒检测(主页有源码)
  • 【前端】【功能函数】treeMapEach,对每个节点进行自定义转换的实用函数
  • 深入理解 CSS pointer-events: none:穿透点击的魔法
  • 前端兼容处理接口返回的文件流或json数据
  • C++ Primer 容器适配器
  • java基础学习
  • SQL笔记#函数、谓词、CASE表达式
  • JavaScript 中的逻辑运算符
  • 项目实战--网页五子棋(匹配模块)(5)
  • 【网络安全 | 漏洞挖掘】Stripe 子系统 TaxJar 的 ATO 漏洞挖掘之旅
  • 【第五节】C++设计模式(创建型模式)-Prototype(原型)模式
  • 【NLP 23、预训练语言模型】
  • 免费做动态图片的网站/百度注册网站
  • vr全景网站开发制作/广告外链购买交易平台
  • 有什么做兼职的好的网站/收录查询站长工具
  • 做pc端网站效果/湖南网站托管
  • 百度域名注册与解析服务/网站优化服务
  • 襄阳市住房和城乡建设局网站/企业内训