Show HN: Supapool – 每个编码代理在~400毫秒内获得一个Supabase实例

Hacker News Top 工具

摘要

Supapool 是一个 CLI 工具,可为每个编码代理或 CI 运行提供隔离的临时 Supabase 实例,在大约 400 毫秒内启动,实现并行的、类似生产环境的测试,且无干扰。

hi HN,<p>我构建了 supapool.io,它是 Supabase 服务的临时完整副本,可以在约 400 毫秒内启动(Auth、Postgres、Storage、Realtime)。<p>因此,如果你在不同的工作树中并行运行多个编码代理,它们现在可以拥有自己的 Supabase 副本,而不会产生相互冲突的更改。<p>&gt; 为什么不在本地使用 Supabase Docker?<p>当我在本地运行 3-4 个实例时,我的 MacBook 会变热,有时会死机。<p>&gt; 为什么不使用 Supabase 分支?<p>分支需要几分钟才能设置好,并且是为持久性设计的。这很昂贵,而且对于开发环境来说太慢了。<p>&gt; 为什么不用模拟(mocks)?<p>模拟对代理不好。我希望代理能针对真实的生产服务行为测试它们的迁移和 SQL。代理经常幻觉出能用的模拟。然而,模拟的优势是更快且在本地运行,但有了 Supapool,这个优势就不那么有说服力了。<p>&gt; 它是如何工作的?/ 这在经济上如何可行?<p>在 400 毫秒内启动 Supabase 需要以下几点: 1. 一个准备好的 Supabase 实例池,保持热运行,并配置区域故障转移(us-east、us-west、europe-west、asia-southeast) 2. 当池开始缩小时,使用 microVM/Firecracker 快速自动扩展 3. 摒弃强大的持久性保证。开发代理不需要 WAL、fsync、PITR、复制。任何用于临时 Supabase 实例的高可用性(HA)都是冗余的。<p>目前它处于测试阶段,我使用我们的 GCP 信用额度来资助,所以是免费的。最终定价将类似 $/实例秒,并且比分叉或自托管/维护 Supabase 集群更具成本效益。<p>如果你使用 Supabase,并且认为有更适合你本地编码代理设置的东西,非常希望得到你的反馈。谢谢!
查看原文
查看缓存全文

缓存时间: 2026/07/30 19:51

# Supapool:面向并行编码代理的真正的 Supabase 来源:https://supapool.io/ Discord(https://discord.gg/V5aB8xw7Ps) ## 工作原理 ``` npx @supapool/cli run -- npm run dev ``` 包装任意命令。Supapool 租用一个干净的实例,注入其凭据,保持实例存活,并在命令退出时释放它。 ## 为什么选择它 - **真正的 Supabase**。包含 Postgres、Auth 和兼容 S3 的存储。 - **并行代理需要这个**。代理们不会在运行中途互相擦除数据库。 - **无需模拟**。针对真实隔离的 Supabase 堆栈测试迁移和数据库操作,不触动生产环境。 - **分支既慢又贵**。创建分支可能需要数分钟,且按生产实例计费。 - **本地化部署**。实例是临时的,因此它们会在代理执行工作的附近启动,而不是固定在一个区域。 - **仅通过 CLI 使用**。没有仪表板。账户、使用情况和成本均通过 CLI 和 API 暴露,专为代理的易用性设计,你可以将所有内容直接导入公司的大脑。 - **测试版免费**。发送邮件至 [email protected],即可获得自动回复,包含修复方案或解决问题所需的信息。 ## 文档 ### 命令 CLI 有两个命令: ``` npx @supapool/cli login npx @supapool/cli run -- ``` `login` 打开 GitHub 登录并将 API 密钥保存到 `~/.config/supapool/config.json`。`run` 在首次使用时执行相同的登录流程,因此大多数人不需要直接运行 `login`。 `run` 获取一个干净的实例,按文件名字顺序依次执行 `supabase/migrations` 目录下的所有 `.sql` 文件,使用实例凭据作为环境变量启动你的命令,在命令运行期间续租,并在命令退出时释放实例。你仓库的环境文件永远不会被修改。 ### 注入的内容 被包装的命令会收到标准的 Supabase 变量:`SUPABASE_URL`、`SUPABASE_ANON_KEY`、`SUPABASE_SERVICE_ROLE_KEY` 和 `DATABASE_URL`。这些值同时会映射到当前可发布/秘密密钥名称、Next.js、Vite、Astro、Svelte、Expo、Create React App、Gatsby 和 Nuxt 使用的公开前缀、Prisma 和 Postgres URL 别名,以及标准的 `PG*` 连接变量。秘密密钥永远不会被分配到浏览器公开变量。`SUPAPOOL_INSTANCE_ID` 用于标识租约。 ### 租约 每个实例都是一个带有 TTL(默认 30 分钟)的租约。CLI 在你的命令运行期间每 5 分钟续约一次。当命令退出,或者进程死亡且续约停止时,租约过期,该槽位被清理并返回池中。实例中存储的任何内容都不会在释放后保留,因此请将每次运行视为一次性的。 ### CI CI 作业会跳过浏览器登录。在笔记本电脑上登录一次,将 `~/.config/supapool/config.json` 中的密钥复制为一个 CI 密钥,并将其设置为 `SUPAPOOL_API_KEY`: ``` SUPAPOOL_API_KEY=sp_live_... npx @supapool/cli run -- pnpm test ``` ### 在代码中使用 这个 npm 包也是一个库。`withInstance` 获取一个租约,在回调运行时续约,并始终释放它,即使回调抛出异常: ```javascript import { withInstance } from '@supapool/cli' await withInstance(async (instance) => { const { SUPABASE_URL, SUPABASE_ANON_KEY, DATABASE_URL } = instance.env // 运行测试、填充数据、操作真实堆栈 }) ``` 生命周期原语 `acquire`、`renew`、`release` 和 `startRenewer` 也已导出,用于自行管理租约边界的代码。完整 API 请参见该包的 README(https://www.npmjs.com/package/@supapool/cli)。

相似文章

Launch HN: Hoplite (YC S26) – 轻松部署云端编码智能体

Hacker News Top

Hoplite(YC S26)推出一个平台,用于部署云端编码智能体,可迁移本地设置,并支持跨用户流程、API 和 CLI 对功能进行并发 QA。创始人 Bence 和 Ryan 在 AWS、Temporal、Modal 和 Planetscale 上构建了自定义智能体框架,可通过代码 'HACKERNEWS' 获取免费额度。