自托管 Inngest — 可靠的持久执行引擎,适用于后台任务与 AI 工作流。包含 PostgreSQL 和 Redis。
Zeabur
Zeabur
ZeaburInngest 是开源的持久执行引擎,用于构建可靠的后台任务、定时函数与 AI 工作流,内置重试、并发控制与可观测性。
此模板一键部署包含 PostgreSQL(状态存储)和 Redis(队列与缓存)的自托管 Inngest 实例。
| 服务 | Port | 用途 |
|---|---|---|
| Inngest Dashboard & API | 8288 (HTTP) | 界面、事件接收、REST API |
| Inngest Connect Gateway | 8289 (HTTP/WSS) | SDK Worker 的 WebSocket 网关 |
| PostgreSQL | 5432 | 持久状态存储 |
| Redis | 6379 | 队列与缓存 |
需要两组十六进制字符串(偶数位,仅含 0-9 和 a-f):
openssl rand -hex 16
一个用于 Event Key,另一个用于 Signing Key。
Inngest self-hosted 设计上 不对 Dashboard UI 或 GraphQL API 进行身份验证,原始码只对 SDK 相关端点应用 signing key 验证:
| 端点 | 是否保护 |
|---|---|
| Dashboard UI | ❌ 公开 |
GraphQL API(/v0/gql) | ❌ 公开 — 任何人都能查询所有 app、函数和事件 |
发送 Event(/e/*) | ✅ 需要 Event Key |
SDK Sync(/fn/register) | ✅ 需要 Signing Key |
| Connect WebSocket | ✅ 需要 Signing Key |
建议: 不要将 Dashboard 域名公开到网络,请放在 VPN、IP 白名单或 HTTP Basic Auth Proxy 之后。Connect Gateway 域名(port 8289)需保持公开,供 SDK Worker 连接。
const inngest = new Inngest({
id: "my-app",
baseUrl: "https://YOUR_DOMAIN",
eventKey: "YOUR_EVENT_KEY",
signingKey: "YOUR_SIGNING_KEY",
});
Connect 模式(WebSocket Worker)需覆盖 gateway URL,指向你的 Connect 域名:
// ⚠️ 请用 `triggers`(复数数组),不要用 `trigger`(单数)
const myFn = inngest.createFunction(
{ id: "my-fn", triggers: [{ event: "my/event" }] },
async ({ event, step }) => { /* ... */ }
);
await connect({
apps: [{ client: inngest, functions: [myFn] }],
gatewayUrl: "wss://YOUR_CONNECT_DOMAIN/v0/connect",
});
注意: 定义函式时请使用
triggers: [...](复数数组)。若使用trigger:(单数)会导致 triggers 为空,函式永远不会执行。
Inngest 以 Apache 2.0 授权开源。