如何在同一个容器谷歌云运行前的 Dockerfile 中设置一个 nginx?我尝试制作一个 python 服务器 (odoo) 处理 http/2

问题描述

提前致谢。我的问题是,如何在容器前的 Dockerfile 中设置一个 Nginx?我看到了其他问题 [5],似乎在 cloud run 中允许 odoo 上的 http/2 的唯一方法是创建一个 Nginx 容器,因为 gcrun 中不允许使用 sidecar。但我也读到,使用 supervisord 可以做到。有没有人能够这样做来处理 http/2 从而增加云运行最大请求配额?

我想试试这个:在entrpoint.sh中,写一个安装Nginx的命令,然后把它的配置设置为代理,允许http2。但是,我在这里问你,因为我不确定它是否会起作用,正如我在 [2] 中读到的那样,Nginx 不能与 python 服务器一起工作。

整个故事:我正在 google cloud run + cloud sql 上部署 odoo ce。我将一个 odoo 配置为包含 5 篇博文的演示,当我尝试下载它时,它说请求太大。然后,我想象这是因为 32MB 的云运行请求配额 [1],因为备份大小是 52 MB。然后,我看到http/2连接的配额是无限的,所以我在云运行中激活了http/2按钮。接下来,当我访问该服务时,出现与“出现连接失败”相关的错误

为此,我想到了两种方法:一种是将 odoo http 服务器升级到可以像 Quark 一样处理 http/2 的服务器。第一种方式对我来说似乎是不可能的,因为它可能会迫使我重写许多 odoo。然后,我想到的第二个选项是在 odoo 容器(在 Werkzeug 上运行 Python Web 服务器)前运行,一个 Nginx。我在网上读到 Nginx 可以将连接升级到 http/2。但是,我还读到 Cloud run 正在运行其内部负载均衡器 [2]。那么,我的问题是:是否可以在同一个 odoo 容器中运行在云运行上公开此服务的 Nginx


参考文献:

[1] https://cloud.google.com/run/quotas
[2] Cloud Run needs NGINX or not?
[3] https://linuxize.com/post/configure-odoo-with-nginx-as-a-reverse-proxy/
[4] https://github.com/odoo/docker/tree/master/14.0
[5] How to setup nginx in front of node in docker for Cloud Run?

解决方法

有没有人能够这样做来处理 http/2 从而增加云运行最大请求配额?

处理 HTTP/2 无助于增加 Cloud Run 上每个容器的最大请求数限制。

HTTP/2 仅帮助您重用 TCP 连接以通过单个连接发送并发请求,但 Cloud Run 并没有真正计算连接数,因此您在这里没有走上正轨。 HTTP/2 帮不了你。

如今的 Cloud Run 已经支持 1000 个容器实例(预览版中有 250 个并发请求),因此您的服务可以同时发出 250,000 个请求。如果您需要更多,请联系支持人员。

但是,我在这里问你,因为我不确定它是否会起作用,正如我在 [2] 中读到的那样,nginx 不能与 python 服务器一起工作。

听起来不正确。

如果您配置多进程容器,则可以在 Cloud Run 上的 nginx 后面运行 Python。但是正如你所说,Cloud Run 不需要 nginx。

总的来说,在这种情况下您不需要 HTTP/2。