我想使用
gunicorn
托管我的 FastAPI 应用程序并将其托管在 Kubernetes 服务上。我的 Kubernetes 服务使用指定端点上的 HTTP
调用来运行活性探测(运行状况检查)。
我还希望在
HTTPS
上提供应用程序,因为我的 Kubernetes 服务将其公开以供外部组件使用。
现在我的 HTTP 端点不能依赖重定向,因为活性探针需要
200 Response
,而重定向会阻碍这一点。
我想在预先指定的端口上托管我的 HTTPS 端点,因为组织已制定最佳实践并且指定了端点和端口。
StackOverflow 上的一些类似问题:
但是这两个都可以重定向,而我们不行。而且我们也无法使用
NGINX
服务器,因为我的组织已弃用该支持。
如果我们在 Docker 环境中尝试这个。以下将完成它:
Dockerfile:
ENTRYPOINT ./start.sh
Shell脚本start.sh:
gunicorn -k uvicorn.workers.UvicornWorker -w 3 -b 0.0.0.0:30000 -t 360 --reload app:app & gunicorn -k uvicorn.workers.UvicornWorker -w 3 --ssl-certfile certfile.txt --ssl-keyfile keyfile.txt --ca-certs ca_certs.txt -b 0.0.0.0:8443 -t 360 --reload app:app
&
在后台运行一个,然后运行另一个。您可以将一台配置为使用 HTTP,另一台配置为使用 HTTPS。
我们将
gunicorn
用于 fastAPI
应用程序,因此我们使用 uvicorn
工作人员,您需要根据您的用例进行相应更改。
对于登陆此处寻求 fastapi/uvicorn 帮助的人们:
uvicorn api:app\
--ssl-certfile=yourcert.pem\
--ssl-keyfile=yourkey.pem\
--host 0.0.0.0 --port 443 --workers 1\
&\
uvicorn api:app\
--host 0.0.0.0 --port 80 --workers 1
您应该知道,后台守护进程将无法在
CTRL+C
关闭。最好使用 tmux 之类的东西,并在不同的窗口中运行 :80
和 :443
。