当前位置:   article > 正文

FastAPI项目uvicorn-gunicorn-fastapi服务端docker容器平滑重启及Docker仓库中python web接口服务器端Fastapi-gunicorn-server镜像包_fastapi做到项目平滑重启

fastapi做到项目平滑重启

一、FastAPI项目uvicorn-gunicorn-fastapi服务端docker容器平滑重启

    在部署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值进行重启。

  1. #线上环境80端口
  2. bind='0.0.0.0:81'
  3. #指定pid文件位置
  4. pidfile = '/tmp/gunicorn.pid'
  5. #日志配置
  6. loglevel="warning"
  7. errorlog="/tmp/error.log"
  8. accesslog="/tmp/access.log"
  9. #access日志格式。
  10. 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部署其它语言的容器时也遇到过,后来我的解决办法是不再使用软链接了,直接将代码覆盖,不过目前我这里还是先用了重启容器吧。

二、Docker仓库中python web接口服务器端Fastapi-gunicorn-server镜像包

    使用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模块。 

  1. fastapi 0.63.0
  2. gunicorn 20.0.4,
  3. h11 0.12.0,
  4. httptools 0.1.1,
  5. idna 2.10,
  6. loguru 0.5.3,
  7. minio 7.0.2,
  8. numpy 1.20.1,
  9. paho-mqtt 1.5.1,
  10. pandas 1.2.3,
  11. Pillow 8.2.0,
  12. pip 21.1.3,
  13. pydantic 1.8.1,
  14. PyMySQL 1.0.2,
  15. python-dateutil 2.8.1,
  16. python-dotenv 0.15.0,
  17. python-multipart 0.0.5,
  18. pytz 2021.1,
  19. PyYAML 5.3.1,
  20. redis 3.5.3,
  21. requests 2.24.0,
  22. setuptools 51.0.0,
  23. six 1.15.0,
  24. starlette 0.13.6,
  25. starlette-context 0.3.2,
  26. typing-extensions 3.7.4.3,
  27. tzlocal 2.1,
  28. urllib3 1.21.1,
  29. uvicorn 0.13.4,
  30. uvloop 0.14.0,
  31. watchgod 0.6,
  32. websockets 8.1,
  33. wheel 0.36.2,
  34. win32-setctime 1.0.3,
  35. wincertstore 0.2,
  36. PyCryptodome 3.14.1,
  37. sh 1.14.2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/542741
推荐阅读
相关标签
  

闽ICP备14008679号