之前用过supervisor+uvicorn部署过fastapi 但那时superviosr是手动安装的并非用的宝塔 同样方法配置在宝塔上没有成功于是有了这篇
宝塔的superviosr可以管理启动fastapi,通过命令python main.py启动
image.png
只要将uvicorn写在main.py文件里即可,或者
uvicorn main:app --reload运行
单是显然这样必须运行4次superviosr,于是我选择了gunicorn运行uvicorn,在uvicorn文档中gunicorn也算首推方式,它是最简单的部署方式了。gunicorn重启麻烦和日志输出配置麻烦所以我们需要重新配置。gunicorn可以配置输出日志到单独的文件中也可以配置控制台直接输出,然后又supervisor管理日志
import multiprocessing
# 监听内网端口8000
bind = "0.0.0.0:8000"
# 并行工作进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 监听队列
backlog = 2048
# 工作模式协程。
worker_class = "uvicorn.workers.UvicornWorker"
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# worker_connections最大客户端并发数量,默认情况下这个值为1000。
worker_connections = 2000
# 设置日志记录水平
loglevel = 'info'
# supervisor管理gunicorn 日志输出到supervisor日志文件
errorlog = '-'
accesslog = '-'
# 日志格式
logconfig_dict = {
'formatters': {
"generic": {
"format": "%(process)d %(asctime)s %(levelname)s %(message)s", # 打日志的格式
"datefmt": "[%Y-%m-%d %H:%M:%S %z]", # 时间显示方法
"class": "logging.Formatter"
}
}
}
以上是我的gunicorn配置,我把它加在config.py文件,也就是我fastapi项目的配置文件。根据文档配置的access_log_format = '%(h)s %(l)s %(u)s %(t)s' 不起作用,我选择用logcofig_dict格式化输出日志。配置好后用宝塔的supervisor 启动gunicorn -c=config.py main:app 命令即可