uvicorn 框架软件编写后发布至ubuntu服务器
uvicorn安装使用
- 1.安装
1
pip install uvicorn
- 2.main.py编写
1
2
3
4
5
6
7
8from fastapi import FastApi
app = FastApi()
async def hello():
return {'message': 'hello World'} - 3.开发环境运行
1
2if __name__ == '__main__':
uvicorn.run("main:app", host="127.0.0.1", port=8000, log_level="info")
发布环境部署
- 1.gunicorn安装
1
2pip install uvicorn
pip install gunicorn - 2.gunicorn.py配置文件编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import os
# 设置守护进程
daemon=True
# 监听内网端口8000
bind='0.0.0.0:8000'
# 设置进程文件目录
pidfile='./gunicorn.pid'
chdir='./' # 工作目录
# 工作模式
worker_class='uvicorn.workers.UvicornWorker'
# 并行工作进程数 核心数*2+1个
workers=3 #multiprocessing.cpu_count()+1
# 指定每个工作者的线程数
threads=2
# 设置最大并发量
worker_connections = 2000
loglevel='debug' # 错误日志的日志级别
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# 设置访问日志和错误信息日志路径
log_dir = "./log"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
accesslog = "./log/gunicorn_access.log"
errorlog = "./log/gunicorn_error.log" - 3.py文件特殊处理
1
2
3
4
5
6# 导入OS模块
import os
import sys
# 把当前文件所在文件夹的父文件夹路径加入到PYTHONPATH
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - 4.服务器运行
1
gunicorn main:app -c gunicorn.py
抑或
1
gunicorn main:app -b 0.0.0.0:8000 -w 4 -k uvicorn.workers.UvicornWorker --daemon
项目停止运行
- 1.获取gunicorn进程树
1
pstree -ap | grep gunicorn
- 2.终止gunicorn任务
kill -HUP 进程pid
- 3.如果使用了多进程,那么执行了上述命令后还会有子进程在运行,可以使用如下命令杀死
1
kill -9 进程pid
进程脚本杀死
1 |
|
- 脚本执行
1
2chmod 777 stop_gunicorn.sh
bash stop_gunicorn.sh
配置开机自启动服务
配置 gunicorn.service服务开机自启动
1 | cat >/usr/lib/systemd/system/gunicorn.service << EOF |
依次执行下面命令
1 | systemctl daemon-reload |
查看服务状态
1 | systemctl status gunicorn |
Nginx代理配置
1 | server { |
nginx配置生效
1 | nginx -s reload |