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 授權開源。