Realtime: 多个构建

创建于 2020-05-19  ·  16评论  ·  资料来源: supabase/realtime

目前,我们仅将其作为 docker 镜像提供。 我们可能希望这些作为最低限度的构建、版本和存储的工件:

现在:

下一个:

  • [x] 数字海洋图像
  • [x] AWS 图像

推荐:

  • Packer:我们在 @supabase/postgres 和我们的 KPS 服务器上使用 Packer。 如果我们可以使用相同的工具那就太好了,这样我们就不必学习新工具了

最有用的评论

@soedirgo刚刚与保罗交谈过,这里的第一步是实际上只是将实时应用程序的构建和发布自动化为二进制文件

所以可以暂时忘记所有虚拟机的东西和数字海洋(尽管这可能是下一步)

我们需要的是,每次有人标记一个 release时,github 都会为每个环境构建应用程序(对于初学者来说,ubuntu 和 osx 就可以了),并创建一个带有二进制文件的版本(例如:https://github.com/ setvisible/DownZemAll/releases)

这都可以通过 github 操作来实现: https ://github.com/features/actions

如果你想从这个 repo 开始并在你自己的 fork 上进行试验——那么当你启动并运行它时,我们可以将这些操作合并回这个 repo

这看起来像是一个很好的入门模板: https ://github.com/actions/create-release

您应该首先在您自己的操作系统上构建实时应用程序,以了解需要哪些依赖项(混合等),然后这是一个如何使用 ansible 构建实时应用程序的示例,因此可以复制过来一些步骤: https ://github.com/supabase/kps/blob/master/ansible/tasks/setup-supabase.yml

所有16条评论

@kiwicopple这将是一个仅安装了实时应用程序的 Ubuntu 映像-您会直接公开实时端口吗? 还是我们仍然想要单条路线的 kong? (考虑 apikeys/速率限制等)

@soedirgo刚刚与保罗交谈过,这里的第一步是实际上只是将实时应用程序的构建和发布自动化为二进制文件

所以可以暂时忘记所有虚拟机的东西和数字海洋(尽管这可能是下一步)

我们需要的是,每次有人标记一个 release时,github 都会为每个环境构建应用程序(对于初学者来说,ubuntu 和 osx 就可以了),并创建一个带有二进制文件的版本(例如:https://github.com/ setvisible/DownZemAll/releases)

这都可以通过 github 操作来实现: https ://github.com/features/actions

如果你想从这个 repo 开始并在你自己的 fork 上进行试验——那么当你启动并运行它时,我们可以将这些操作合并回这个 repo

这看起来像是一个很好的入门模板: https ://github.com/actions/create-release

您应该首先在您自己的操作系统上构建实时应用程序,以了解需要哪些依赖项(混合等),然后这是一个如何使用 ansible 构建实时应用程序的示例,因此可以复制过来一些步骤: https ://github.com/supabase/kps/blob/master/ansible/tasks/setup-supabase.yml

也只是为了清楚起见,我们现在只想构建实时服务器,所以在这个文件夹中找到的所有内容: https ://github.com/supbase/realtime/tree/master/server

@soedirgo这个现在完成了吗? 什么都没有了?

不过,在 3 和 4 上的工作应该在今天完成

都好! 慢慢来,如果你遇到困难,请告诉我

Ack,好吧,这比我想象的要难。 (我应该停止说“今天”或“本周”)

我做了什么:

  • 从基础镜像构建(目前仅在 DO 上测试)
  • 让用户将DB_HOSTDB_PASSWORDDB_PORT等的用户变量传递给 ansible
  • 通过 ansible 构建 Phoenix 应用(在构建器中,而不是最终图像)
  • DB_HOST连接到数据库(同样,在构建器中)
    我为此使用了一个 supabase/postgres 液滴,并且只能说它“有点工作”,因为当我从 next.js 示例连接到它时,实时说了一些类似于“没有名为 todos 的表”的内容。

阻滞剂:

  • IIUC 实时二进制文件需要 envars 才能工作。 这通常是怎么做的? /etc/个人资料? 嵌入到 shell 脚本中?
  • 我需要实时在启动时运行。 似乎与 systemd 有关,并且在相关说明中,kps 和 postgres 似乎使用我不熟悉的 systemd 切片。
  • 实时通常与数据库在同一台机器上吗? 如果是这样,我们可能想用 supabase/postgres 基础构建图像吗? (可能用于下一步)

快速提问 - 这部分对我来说很重要:

通过 ansible 构建 Phoenix 应用(在构建器中,而不是最终图像)

这是否意味着您正在 DO 映像上构建 phoenix 应用程序? 例如 - 安装 elixir/mix 等,然后运行构建?

对于这个问题:

实时通常与数据库在同一台机器上吗?

不 - 这是一个独立的服务器,所以它只会运行realtime并连接到env_vars指定的单独数据库

这是否意味着您正在 DO 映像上构建 phoenix 应用程序? 例如 - 安装 elixir/mix 等,然后运行构建?

是的,我可以从发行版中获取二进制文件,但不确定这是否会导致不兼容问题。 (主要是复制它是如何使用 Docker 完成的)

只需获取二进制文件! 减少表面积。 如果我们切换 docker 做同样的事情可能会更好 - 然后我们可以使用一个纤细的图像

@soedirgo这是一个非常好的 systemctl 介绍和备忘单 - 我们用来管理 systemd 的工具: https ://www.linode.com/docs/quick-answers/linux-essentials/introduction-to-systemctl/

这是来自 KPS 的实时 systemctl 文件: https ://github.com/supabase/kps/blob/master/ansible/files/supabase.service.j2

关于 env vars 的问题,上面的文件还显示了如何指定将 env vars 放入哪个文件,因此可以是特定于应用程序的

关于如何在运行/配置时传递它们,我们使用云配置

向下滚动并找到write_files指令,我们基本上只是按照上面的 .j2 文件将环境变量的字符串复制到/etc/supabase.env

Gotcha,会深入了解那些!

关于这一点,我应该使用什么样的硬化? 只是最低限度。 我知道 postgres 使用 UFW 来阻止除 22 和 5432 之外的任何内容。

@dragarcia可能从 AWS 和 DO 列表过程中学到了一些东西——我看到一件事说确保你不使用标准化默认值来获取安全种子/密码等。

是的,让我为我们目前所处的市场记录一份清单,稍后在此分享。

太棒了,一切都在一个地方。 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

lacoprof picture lacoprof  ·  4评论

kwakwaversal picture kwakwaversal  ·  6评论

kiwicopple picture kiwicopple  ·  14评论

awalias picture awalias  ·  9评论

retendo picture retendo  ·  12评论