logo
icon

Inngest

自托管 Inngest — 可靠的持久执行引擎,适用于后台任务与 AI 工作流。包含 PostgreSQL 和 Redis。

平台Zeabur
部署次数3
发布者zeaburZeabur
部署次数3
发布者zeaburZeabur
创建于2026-04-16
模版内的服务
service icon
service icon
service icon
标签
Developer ToolsBackground JobsWorkflow

Inngest — 自托管版

Inngest 是开源的持久执行引擎,用于构建可靠的后台任务、定时函数与 AI 工作流,内置重试、并发控制与可观测性。

此模板一键部署包含 PostgreSQL(状态存储)和 Redis(队列与缓存)的自托管 Inngest 实例。

服务说明

服务Port用途
Inngest Dashboard & API8288 (HTTP)界面、事件接收、REST API
Inngest Connect Gateway8289 (HTTP/WSS)SDK Worker 的 WebSocket 网关
PostgreSQL5432持久状态存储
Redis6379队列与缓存

部署前准备

需要两组十六进制字符串(偶数位,仅含 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 连接。

连接 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 授权开源。