Loading

Python Web框架几种部署方式

1.部署到Linux服务器

  1. 服务器安装python
  2. 安装virtualenv
  3. 使用winscp或filezilla将程序目录上传到服务器指定目录
  4. 在服务器创建虚拟环境
  5. 激活创建的虚拟环境
  6. 安装程序目录下的requirements.txt
  7. 启动程序
unicorn main:app --host 0.0.0.0 --port 80 --root-paht /api

 其中,uvicorn是ASGI服务器,用于运行FastAP程序,main:app是FastAPI的主文件名,若程序主文件是code.py,则参数为 code:app
--host 0.0.0.0:程序监听的访问者地址,0.0.0.0表示允许所有IP地址访问,默认为当不指定此参数时,只能从本机127.0.0.1访问。
--port 80:陈谷监听的端口,若不指定端口,默认为8000
--root-path:程序提供接口使用的根路径,默认为/

2.部署为后台进程

 部署为后台进程,常用方式有:使用nohup命令,使用gunicorn程序

使用nohup命令运行程序

nohup: no hang up

nohup uvicorn main:app --host 0.0.0.0 --port 80 > main.log 2>&1 &

运行后没有输出,可使用jovs命令查看使用nohup运行的后台进程

jobs

若需重新部署,则需停止后台运行的程序。先找到进程ID,再杀死进程

ps -aux|grep uvicorn
kill -9 进程ID

使用gunicorn工具运行程序

gunicorn是python WSGI UNIX的HTTP服务器,通过多个工作进程和一个管理进程的方式运行程序。工作进程可以使用uvicorn的服务来接受请求,返回响应。管理进程用来监控工作进程的状态。

pip install gunicorn
pip install uvloop
pip install httpools
gunicorn main:app -w 2 -k uvicorn.workers.UvicornWorker -D -b 127.0.0.1:8000

其中:
-w 2:指定工作进程的数量,一般为CPU内核数
-k:制定了工作进程的实现类使用uvicorn.workers.UvicornWorker
-D:指定程序在后台运行
-b 127.0.0.1:8000:指定程序绑定的服务地址和端口
启动后,使用ps查询状态

ps -aux |grep gunicorn

gunicorn除了可以以命令行方式启动,还可以使用配置文件的方式启动。在FastAPI程序的目录下创建gunicorn.py,典型配置内容如下:

import multiprocessing
bind='127.0.0.1:8000'  # 绑定的ip和端口号 同命令行的-b参数
backlog=512 # 监听队列
chdir="" #gunicorn要切换到的目的的工作目录,程序所在的目录
daemon=True #设置为后台进程
timeout=30 #超时,单个请求超过此设置值,则引发超时异常
worker_class="uvicorn.workers.UvicornWorker" # 工作进程类,同命令行的-k
workers=multiprocessing.cpu_count() #进程数 同命令行的-w
threads=2 # 指定每个进程开启的线程数
loglevel="info" # 错误日志级别,可选debug/info/notice/warning/error/critical/alert/emergency
access_log_format='%(t)s %(p)s %(h)s "%(r)s %(s)s %(L)s %(b)s %(f)s "%(a)s"' # 设置gnicorn访问日志格式,错误日志无法设置

配置好后,使用以下命令启动程序:

gnicorn -c gunicorn.py main.app

3.使用代理服务器

 由于一台服务器可能会在同一个端口(如:80)运行多个程序,并使用不同的路径区分服务。如/static指向静态资源,/web指向前端页面服务,/api指向后台接口服务。对于这种情况,会使用代理服务器监听80端口,管理不同的服务。

安装nNginx

 在CenOS中,使用官网的二进制包安装,安装程序会自动将Nginx设置为系统服务,可以跟随服务器启动。主配置文件在/etc/nginx/nginx.conf中,服务配置文件在/etc/nginx/conf.d/default.conf;使用官网的源码自行编译安装时,需自己写脚本注册为系统服务。
 在使用Nginx作为代理服务器时,需给FastAPI程序分配一个路径前缀。在使用uvicorn启动程序时,需带上参数--root-path,指定一个路径前缀。如:

uvicorn main:app --host 0.0.0.0 --port 80 --root-path /api

 在浏览器中访问本程序提供的API接口和API文档时,都要带上这个路径前缀。
 设置好FastAPI程序的启动参数后,使用命令启动FastAPI程序。然后在Nginx中使用location关键字,将路径/api绑定到FasatAPI服务上。示例配置如下:

server{
listen 80;
hostname _; # Nginx监听的主机名
location /api{  #需映射的路径
	proxy_pass http://localhost:8000/api, #该路径代理的服务
	proxy_set_header Host $host;  # 转发请求头Host
	proxy_set_header X-Real-TP $remote_addr; #转发请起头X——Real-IP
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

 完成以上配置后,需冲虚启动Nginx服务器才会生效。

总结
 如果需要再服务器同时运行其他程序时,或需要将程序安装到多台服务器上,并配置负载均衡策略时,就需要用到Nginx。

graph LR A(浏览器)--请求接口:/api/hello-->B(Nginx根据路径匹配服务) B--转发请求/api/hello-->C(FastAPI处理请求返回数据)
posted @ 2024-05-23 16:24  踩坑大王  阅读(515)  评论(0)    收藏  举报