赞
踩
在部署FastAPI项目至服务器时,会涉及到代码更改之后服务器端的重启问题,使用nginx服务器时-s reload就可以完成热加载,同样使用tiangolo/uvicorn-gunicorn-fastapi作为python项目的服务器端环境时也可以实现。
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 存在即加载(默认加载)
我们在项目目录新建文件:/gunicorn_conf.py ,内容如下,配置pidfile文件路径,方便直接取到pid值进行重启。
- #线上环境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'
然后在进行项目发布构建的时候执行如下命令即可实现平滑重启。
docker exec -it 容器ID或名称 /bin/bash -c 'kill -HUP `cat /tmp/gunicorn.pid`'
但在使用时发现使用kill -HUP虽然返回成功,但是并没有加载修改后的代码。而我直接在服务器上修改代码再执行上面的docker exec .kill -HUP,又能生效。这里应该和我当前代码文件夹用的是一个软链接链到版本代码有关,之前使用docker部署其它语言的容器时也遇到过,后来我的解决办法是不再使用软链接了,直接将代码覆盖,不过目前我这里还是先用了重启容器吧。
使用Fastapi框架进行服务端API开发,服务端适合使用gunicorn-serve,不过原始的uvicorn-gunicorn-fastapi镜像里没有什么东西,在使用这个镜像进行业务开发服务间增加不了少内容,于是打包成了这个镜像包。并分享到了docker仓库中。地址:https://hub.docker.com/repository/docker/kermitcode/fastapi-gunicorn-server/general
kermitcode/fastapi-gunicorn-server是Fastapi框架的服务端镜像,基于uvicorn-gunicorn-fastapi,在此基础上安装了requests,numpy,PyMySQL,redis,minio,paho-mqtt 30+模块扩展。包括FastAPI以及常用的Mysql模块、redis模块、mqtt模块、minio模块、loguru模块、request请求模块、pytz时区模块等常用的业务模块。
V1.0版本已安装python模板及版本明细如下:V1.1版本中pip更新至22.1.2版本: 另外增加了加解密库和sh模块。
- fastapi 0.63.0
- gunicorn 20.0.4,
- h11 0.12.0,
- httptools 0.1.1,
- idna 2.10,
- loguru 0.5.3,
- minio 7.0.2,
- numpy 1.20.1,
- paho-mqtt 1.5.1,
- pandas 1.2.3,
- Pillow 8.2.0,
- pip 21.1.3,
- pydantic 1.8.1,
- PyMySQL 1.0.2,
- python-dateutil 2.8.1,
- python-dotenv 0.15.0,
- python-multipart 0.0.5,
- pytz 2021.1,
- PyYAML 5.3.1,
- redis 3.5.3,
- requests 2.24.0,
- setuptools 51.0.0,
- six 1.15.0,
- starlette 0.13.6,
- starlette-context 0.3.2,
- typing-extensions 3.7.4.3,
- tzlocal 2.1,
- urllib3 1.21.1,
- uvicorn 0.13.4,
- uvloop 0.14.0,
- watchgod 0.6,
- websockets 8.1,
- wheel 0.36.2,
- win32-setctime 1.0.3,
- wincertstore 0.2,
- PyCryptodome 3.14.1,
- sh 1.14.2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。