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