异想天开的想法:通过 Docker 镜像实现任意自动化脚本

Discourse Automation 非常酷且有用,但可用的自动化功能相当有限。其中许多似乎是一次性的 hack[1],旨在满足某个特定 CDCK 客户的特定用例,而不是通用的工具。

可以创建自定义自动化,但我看不出托管客户如何将其集成进去。此外,它们似乎可能相当危险。我相信我可以与友好的 Discourse 员工合作来部署我编写的自动化,但这似乎对双方来说都是一项艰巨的工作。

所以,这是我的想法:

  1. 一个管理员界面[2],可以在其中提供 OCI[3] 镜像的链接(使用 registry.example.org/imagename:tag)。
  2. 一种将 API 密钥与该镜像关联的方法(链接到现有的 API 密钥管理页面)。
  3. 一种将 webhook 与该镜像关联的方法(链接到现有的 webhook 管理页面)。
  4. 为该镜像添加一个定期计划选项,或者(我认为更好!)将该选项通用地添加到 webhook 中。

一个代理/调度程序将监听 webhook,将它们转发给匹配的容器,将 API 密钥作为 secret 提供,并通过 stdin 或 HTTP 端口传输负载。(我设想其中许多将是“一次性的”——容器将启动、处理一个事件然后退出——但也可以选择持久化的(或者,也许,在退出前监听 N 秒)。

容器将以合理的资源限制运行,并且要么没有持久存储,要么可以访问相同的存储池附件和内容。对于托管站点,我可以想象将自动化 CPU 时间作为与 pageviews、电子邮件和存储并列的另一个按计划限制。

站点 API 的位置可以作为环境变量或另一个 secret 提供。默认情况下,其他网络访问将被禁止,尽管应该可以允许特定的出站连接。

当然,一个人现在可以“在旁边”设置这样的东西,但将其与 API 和 Webhook 管理界面集成将非常流畅(并且基本上完全解决了管理 secret 的问题)。此外,代理/调度程序的设置有点复杂。


  1. 我不是那个意思 ↩︎

  2. 可能在 API 部分 ↩︎

  3. "Docker" ↩︎

2 个赞

此外,它还将有一个“重新部署”按钮,并且可能有一个选项可以在 Discourse 部署或其他触发器上自动检查新的容器版本。