Python Web框架几种部署方式
1.部署到Linux服务器
- 服务器安装python
- 安装virtualenv
- 使用winscp或filezilla将程序目录上传到服务器指定目录
- 在服务器创建虚拟环境
- 激活创建的虚拟环境
- 安装程序目录下的requirements.txt
- 启动程序
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。

浙公网安备 33010602011771号