首页 > 其他分享 >转载 fastapi 部署 原文链接:https://blog.csdn.net/FrenzyTechAI/article/details/132696546

转载 fastapi 部署 原文链接:https://blog.csdn.net/FrenzyTechAI/article/details/132696546

时间:2024-09-30 10:26:51浏览次数:10  
标签:gunicorn nginx fastapi sudo FrenzyTechAI blog NGINX Gunicorn

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12 python3.12-venv -y

sudo apt install supervisor

sudo apt install supervisor nginx -y

启用并启动Supervisor:
sudo systemctl enable supervisor
sudo systemctl start supervisor
使用enable命令将确保 Supervisor 在启动时自动启动,并使用start命令立即启动 Supervisor 服务。

完成上述步骤后,您已成功安装 Python、Supervisor 和 NGINX,并已启用并启动了 Supervisor 服务。

cd /home/fastapi-user/fastapi-nginx-gunicorn
python3.11 -m venv .venv
source .venv/bin/activate

六、配置Gunicorn
配置Gunicorn有两个步骤。首先,明确指定 Gunicorn 的配置要求。其次,设置Supervisor程序来运行Gunicorn。

6.1 设置Gunicorn
首先,在项目目录中创建一个名为 gunicorn_start 的文件:

vim gunicorn_start
然后,将以下内容添加到文件中:

#!/bin/bash

NAME=fastapi-app
DIR=/home/fastapi-user/fastapi-nginx-gunicorn
USER=fastapi-user
GROUP=fastapi-user
WORKERS=3
WORKER_CLASS=uvicorn.workers.UvicornWorker
VENV=$DIR/.venv/bin/activate
BIND=unix:$DIR/run/gunicorn.sock
LOG_LEVEL=error

cd $DIR
source $VENV

exec gunicorn main:app \
--name $NAME \
--workers $WORKERS \
--worker-class $WORKER_CLASS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOG_LEVEL \
--log-file=-
这是您的设定解释:

第1行表示此脚本将由bash shell执行。

第3行至第11行指定您将传递给Gunicorn的配置选项。大多数参数都是直观的,除了 WORKERS、WORKER_CLASS 和 BIND :

WORKERS:定义要使用的工作进程数量,通常建议使用CPU核心数+1。

WORKER_CLASS:指定要使用的工作进程类型。在此示例中,您指定Uvicorn Worker作为ASGI服务器。

BIND:指定Gunicorn绑定到的 server socket。

第13行和第14行将当前位置更改为项目目录并激活虚拟环境。

第16行至第24行使用指定的参数运行Gunicorn。

保存并关闭文件。然后,通过运行以下命令使其可执行:

chmod u+x gunicorn_start
最后,在项目目录中创建一个文件夹 run ,用于存储您在参数中定义的Unix套接字文件BIND:

mkdir run
6.2 配置Supervisor
首先,在项目目录中创建一个名为 logs 的目录,用于存储应用程序的错误日志:

mkdir logs
接下来,通过运行以下命令创建Supervisor的配置文件:

sudo vim /etc/supervisor/conf.d/fastapi-app.conf
复制并粘贴以下内容到文件中:

[program:fastapi-app]
command=/home/fastapi-user/fastapi-nginx-gunicorn/gunicorn_start
user=fastapi-user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/fastapi-user/fastapi-nginx-gunicorn/logs/gunicorn-error.log
此配置文件指定了之前创建的 gunicorn_start 脚本,并设置了 fastapi-user 作为用户。Supervisor 将在服务器启动时启动应用程序,并在应用程序失败时重新启动它。错误日志将记录在项目目录下 logs/gunicorn-error.log 文件中。

重新加载Supervisor配置并重启服务,通过运行以下命令:

sudo supervisorctl reread
sudo supervisorctl update
最后,您可以通过运行以下命令检查程序的状态:

sudo supervisorctl status fastapi-app
如果一切顺利,fastapi-app 服务的状态应显示为 RUNNING。

您还可以通过打开新的终端窗口,连接到服务器,并使用以下命令发出GET请求来测试它:

curl --unix-socket /home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock localhost
您应该会看到以下输出:

{"message":"It's working!"
最后,如果您对代码进行了更改,可以通过运行以下命令重新启动服务以应用更改:

sudo supervisorctl restart fastapi-app
现在您已经拥有一个使用Gunicorn和Uvicorn作为ASGI服务器的应用程序。接下来,您将使用NGINX设置反向代理服务器。

七、配置NGINX
为您的项目创建一个新的 NGINX 配置文件:

sudo vim /etc/nginx/sites-available/fastapi-app
打开NGINX配置文件并粘贴以下内容:

upstream app_server {
server unix:/home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock fail_timeout=0;
}

server {
listen 80;

# add here the ip address of your server
# or a domain pointing to that ip (like example.com or www.example.com)
server_name XXXX;

keepalive_timeout 5;
client_max_body_size 4G;

access_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-access.log;
error_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-error.log;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

if (!-f $request_filename) {
proxy_pass http://app_server;
break;
}
}
}
这是 NGINX 配置文件。它的工作原理如下:

第 1 行到第 3 行app_server定义了一个称为NGINX 将代理请求的服务器集群。请求被重定向到位于 的 Unix socket file /home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock。设置fail_timeout=0告诉 NGINX 不要将服务器视为失败,即使它没有响应。

第 1 行到第 5 行定义了 NGINX 将用于处理请求的虚拟服务器的配置。在本例中,它侦听端口 80。将 XXXX 替换为 IP 或站点名称。

第 12 行和第 13 行指定keepalive_timeout设置客户端可以保持持久连接打开的最长时间,并client_max_body_size设置 NGINX 允许的客户端请求正文的大小限制。

第 15 行和第 16 行指定 NGINX 将写入其访问和错误日志的位置。

第 18 至 27 行定义了 NGINX 将如何处理对根目录的请求/。您提供一些规范来处理标头,并设置一个指令来将请求代理到您app_server之前定义的。

通过运行以下命令从文件创建符号链接来启用站点配置sites-available:sites-enabled

sudo ln -s /etc/nginx/sites-available/fastapi-app /etc/nginx/sites-enabled/
测试配置文件是否正常并重启NGINX:

sudo nginx -tsudo systemctl restart nginx
如果一切顺利,现在您应该能够从浏览器或使用curl. 您应该再次看到以下输出:

{"message":"It's working!"}
您现在应该已经运行了 FastAPI 应用程序,并且 Gunicorn+Uvicorn 作为 ASGI 服务器,NGINX 在它们前面作为反向代理。

7.1、权限错误
如果出现权限错误,表示NGINX无法访问Unix socket,您可以将用户 www-data(通常是NGINX进程运行的用户)添加到fastapi-user组中。您可以使用以下命令:

sudo usermod -aG fastapi-user www-data
如果您还没有为API应用购买域名,则不需要往下阅读了。如果您已经有域名,请继续执行下一步以获取SSL证书并启用HTTPS。

八、使用 Certbot 获取免费 SSL 证书
这仅适用于您希望为其获取SSL证书的域名。如果您使用的是Ubuntu,则可以跳过此步骤。否则,您首先需要安装snapd:

sudo apt install snapd
接下来,确保您拥有最新可用版本:

sudo snap install core; sudo snap refresh core
安装Certbot并确保certbot命令可执行:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
接下来,通过以交互方式运行以下命令为您的域名生成证书:

sudo certbot --nginx
最后,Certbot将自动处理您证书的续订。要测试它是否有效,请运行以下命令:

sudo certbot renew --dry-run
如果一切顺利,您应该会看到 Congratulations, all simulated renewals succeeded… 消息。

现在,您应该能够通过HTTPS成功发送请求。

九、结论
本篇文章介绍了如何使用 NGINX、Gunicorn 和 Uvicorn 来部署 FastAPI 应用程序。FastAPI 是最流行的 Python Web 框架之一。它已成为部署机器学习驱动的 Web 应用程序的首选,因此你希望持续关注AI领域,并希望能做一定的应用开发实践,熟悉它还是挺有帮助的。

在这篇文章中您了解到:

为什么以及何时应该使用 FastAPI、NGINX、Gunicorn 和 Uvicorn。

如何设置 Gunicorn+Uvicorn 作为 ASGI 服务器。

如何使用Supervisor来运行Gunicorn。

如何使用 certbot 配置 NGINX 并生成免费的 SSL 证书。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/FrenzyTechAI/article/details/132696546

标签:gunicorn,nginx,fastapi,sudo,FrenzyTechAI,blog,NGINX,Gunicorn
From: https://www.cnblogs.com/honeynm/p/18441308

相关文章

  • 转载 https://blog.csdn.net/h1773655323/article/details/142098658#:~:text=%E7%94%
    在Ubuntu20.04上安装Python3.12:详细教程写bug如流水于2024-09-1014:41:34发布阅读量837收藏11点赞数4分类专栏:Python文章标签:ubuntupythonlinux版权Python专栏收录该内容53篇文章7订阅订阅专栏今天这篇文章将指导您如何在Ubuntu20.04上安装Python3.12......
  • 数据库离程序员有多远 - cnblogs救园行动感想
    这两周,我参与了博客园的“2024救园行动”,成了终身会员。说实话,当初报名的时候,我心里还挺兴奋的,想着这下能和不少老朋友在这个社区里再次相聚。毕竟,在数据库行业摸爬滚打了这么多年,自认为也认识不少圈内人士,更不用说程序员群体了。可结果却有点出乎意料。当我翻看那500位终身会员的......
  • 基于SqlAlchemy+Pydantic+FastApi的Python开发框架的路由处理
    在前面随笔《基于SqlAlchemy+Pydantic+FastApi的Python开发框架 》中介绍了框架总体的内容,其中主要的理念就是通过抽象接口的方式,实现代码的重用,提高开发效率。本篇随笔深入介绍一下FastApi的路由处理部分的内容,通过基类继承的方式,我们可以简化路由器(或者叫WebAPI控制器)的基础......
  • fastapi
    fastapihttps://fastapi.tiangolo.com/zh/learn/0快速使用#异步框架fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classItem(BaseModel):name:strage:[email protected]('/')asyncdefindex():return{'code......
  • cnblogs的GitHub同步markdown文件的blog如何识别文章的唯一性(身份ID如何判定)
    本篇blog是写在GitHub的对应的仓库中的。cnblogs会给终身用户提供一个把GitHub仓库中的markdown文件同步到cnblogs上的一个服务,本文就是使用这个服务同步到个人blog地址的:https://cnblogs.com/xyz问题1:何时触发blogs的同步?当仓库中的markdown文件有更新时,cnblogs会自动同......
  • 基于SqlAlchemy+Pydantic+FastApi的Python开发框架
    随着大环境的跨平台需求越来越多,对与开发环境和实际运行环境都有跨平台的需求,Python开发和部署上都是跨平台的,本篇随笔介绍基于SqlAlchemy+Pydantic+FastApi的Python开发框架的技术细节,以及一些技术总结。最近这几个月一直忙于Python开发框架的整合处理,将之前开发框架中很多重要......
  • weblogic应用打补丁—附带截图以及报错解决办法
    本文详细描述了如何在OracleWebLogic服务器上进行升级,包括下载无漏洞补丁、备份、卸载旧补丁、安装新补丁、检查新补丁状态并解决安装过程中可能遇到的内存设置问题。整个过程大约耗时2小时。说明:1、需要提前去oracle官网下载好无漏洞的补丁压缩包,本次升级下载的压缩包为p3490072......
  • fastapi-events fastapi 异步事件分发处理扩展
    fastapi-eventsfastapi异步事件分发处理扩展,提供了本地,以及远程消息处理能力,同时包含了一些内置的handler,对于自定义handler也是比较灵活的参考使用app.pyfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.responsesimportJSONResponsefrom......
  • 【EasyBlog】基于React+AntD+NextJS+NestJS+MySQL打造的开源博客系统
    Github项目地址:https://github.com/fecommunity/easy-blog,欢迎Star。Easy-BlogEasy-Blog是一套集成文章发表、页面创建、知识库管理、博客后台管理等功能于一体的博客系统。首页-浅色主题首页-暗黑主题文章阅读后台管理✨特性......
  • LLMChat入门指南 - 基于Flutter和FastAPI的大语言模型聊天应用
    LLMChat-您的AI聊天助手......