我们如何在不重定向的情况下在两个端口(一个 HTTP 和一个 HTTPS)上运行 FastAPI 应用程序?

问题描述 投票:0回答:2

我想使用

gunicorn
托管我的 FastAPI 应用程序并将其托管在 Kubernetes 服务上。我的 Kubernetes 服务使用指定端点上的
HTTP
调用来运行活性探测(运行状况检查)。

我还希望在

HTTPS
上提供应用程序,因为我的 Kubernetes 服务将其公开以供外部组件使用。

现在我的 HTTP 端点不能依赖重定向,因为活性探针需要

200 Response
,而重定向会阻碍这一点。

我想在预先指定的端口上托管我的 HTTPS 端点,因为组织已制定最佳实践并且指定了端点和端口。

StackOverflow 上的一些类似问题:

  1. 在 http 和 https 上运行 Gunicorn
  2. uvicorn [fastapi] python 运行 HTTP 和 HTTPS

但是这两个都可以重定向,而我们不行。而且我们也无法使用

NGINX
服务器,因为我的组织已弃用该支持。

ssl https gunicorn fastapi
2个回答
2
投票

如果我们在 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
工作人员,您需要根据您的用例进行相应更改。


1
投票

对于登陆此处寻求 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

© www.soinside.com 2019 - 2024. All rights reserved.