您是否找到了一种将 v14 中不同形式的 odoo 核心模块持久化的方法?那么,是否可以在 gcloud run 中部署 odoo?

问题描述

我想尽可能便宜地部署 odoo。我尝试使用 gcloud sql (15-30€/m) + cloud run。但是几分钟过去了,odoo 界面显示一个白色屏幕,控制台中有很多类似这样的日志:

GET 404 1.04 KB24 ms Chrome 91 https://bf-dev3-u7raxlu3nq-ew.a.run.app/web/content/290-f328144/1/website.assets_editor.css

我的理解是,由于cloud run是无状态的,而且web静态文件好像是存放在core模块中的,容器被kill后这些信息就丢失了。由于我已经花了一个月的时间寻找解决方案,在尝试其他任何部署方式之前,我问社区:您是否找到了一种将 v14 不同形式的 odoo 核心模块持久化的方法?那么,是否可以在 gcloud run 中部署 odoo?

这里列出了我尝试过的所有想法:

  • 首先,我认为这个 css 文件存储在 werkzeug 会话中,所以我尝试了两个插件,将这个会话存储在与文件存储不同的地方。这些插件是 camptocamp odoo-cloud-platform-14.0/session-redis 和 misc-addons-13.0/base_session_store_psql。但是,然后问题仍然存在。

  • 然后我看到在web编辑器中生成的静态css和js文件作为附件存储在odoo中,插件misc-addons-13.0/ir_attachment_s3可以将这些文件存储在s3中。但是,虽然我配置了这个插件,但问题仍然存在。

  • 接下来,我发现 this link 描述需要重新生成资产,以便将它们存储在数据库中。但是,虽然我这样做了,但问题仍然存在。

  • 最后,我想到了用其他方式部署odoo。直接在 vm 中的方式似乎更简约和标准,因此似乎有更多的工作机会,尽管实现 gitops 会很困难。它可以通过 docker compose 在 vm 中部署容器,这将有助于部署更新。 Gke anthos 似乎也实现了 gitops 并且似乎 persist volumes,但在描述中它显示 gke anthos 是无状态的。最后,还有在 k8s 集群中部署的方式,这种方式将实现容器并允许在 vm 中与 docker compose 方式进行自动缩放。但确实它似乎更昂贵且更难以实施。关于似乎更昂贵,可以考虑尝试使用小型工作节点机器,因此夜间成本保持较小。关于部署的难度,希望实现gitops,所以好像应该加argo或者其他的。另外,我听说 gke autopilot 有很好的免费套餐,而且更容易部署。

提前致谢:)

解决方法

Cloud Run 不是解决这个问题的好方法。事实上,如果 werkzeug 会话保存在内存中,则同一个客户端不一定每次都访问同一个实例,因此即使在会话中间也会丢失文件。

最好的解决方案是使用具有粘性会话配置的 VM。您可以在 Compute Engine 上使用老式部署,或使用 GKE/K8S 的云原生解决方案。如果您只有 1 个集群(第一个是免费的),成本或多或少是相同的


只是对 GKE Anthos 的更正。我认为您谈论的是 Anthos 上的 Cloud Run,是的,它类似于 Cloud Run,但使用 GKE 上的 KNative 来管理容器,而且它也是无服务器的。但是 GKE 可以处理有状态部署,正如您需要使用 odoo