在部署FastAPI项目至服务器时,会涉及到代码更改之后服务器端的重启问题,使用nginx服务器时-s reload就可以完成热加载,同样使用tiangolo/uvicorn-gunicorn-fastapi作为python项目的服务器端环境时也可以实现。本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
gunicorn服务,只需要向其发送HUP信号,即可实现平滑reload。tiangolo/uvicorn-gunicorn-fastapi项目在运行的时候会先加载gunicorn_conf.py配置文件,可能的路径有如下,默认优先使用第3个:
1. /app/gunicorn_conf.py 存在即加载
2. /app/app/gunicorn_conf.py 存在即加载
3. /gunicorn_conf.py 存在即加载(默认加载)本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
我们在项目目录新建文件:/gunicorn_conf.py ,内容如下,配置pidfile文件路径,方便直接取到pid值进行重启。本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
#线上环境80端口 bind='0.0.0.0:81' #指定pid文件位置 pidfile = '/tmp/gunicorn.pid' #日志配置 loglevel="warning" errorlog="/tmp/error.log" accesslog="/tmp/access.log" #access日志格式。 access_log_format = '%(h)s %(l)s %(u)s %(t)s'本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
然后在进行项目发布构建的时候执行如下命令即可实现平滑重启。本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
docker exec -it 容器ID或名称 /bin/bash -c 'kill -HUP `cat /tmp/gunicorn.pid`'本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
但在使用时发现使用kill -HUP虽然返回成功,但是并没有加载修改后的代码。而我直接在服务器上修改代码再执行上面的docker exec .kill -HUP,又能生效。这里应该和我当前代码文件夹用的是一个软链接链到版本代码有关,之前使用docker部署其它语言的容器时也遇到过,后来我的解决办法是不再使用软链接了,直接将代码覆盖,不过目前我这里还是先用了重启容器吧。本文地址:http://www.04007.cn/article/944.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/944.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |