logo
icon

Inngest

Inngest self-hosted — mesin eksekusi durable untuk background jobs dan AI workflow yang andal. Dilengkapi PostgreSQL dan Redis.

PlatformZeabur
Dideploy3
PenerbitzeaburZeabur
Dideploy3 kali
PenerbitzeaburZeabur
Dibuat2026-04-16
Layanan
service icon
service icon
service icon
Tag
Developer ToolsBackground JobsWorkflow

Inngest — Self-Hosted

Inngest adalah mesin eksekusi durable open-source untuk membangun background jobs, fungsi terjadwal, dan AI workflow yang andal dengan retry dan kontrol konkurensi bawaan.

Template ini men-deploy instance Inngest self-hosted dengan PostgreSQL dan Redis dalam satu klik.

Layanan

LayananPortFungsi
Inngest Dashboard & API8288 (HTTP)UI, penerimaan event, REST API
Inngest Connect Gateway8289 (HTTP/WSS)Gateway WebSocket untuk SDK worker
PostgreSQL5432Penyimpanan state persisten
Redis6379Antrean dan cache

Persiapan

Anda memerlukan dua string heksadesimal (jumlah karakter genap, hanya 0-9 dan a-f):

openssl rand -hex 16

Gunakan satu untuk Event Key dan satu lagi untuk Signing Key.

⚠️ Peringatan Keamanan

Inngest self-hosted secara desain tidak menerapkan autentikasi pada Dashboard UI atau GraphQL API. Source code hanya menerapkan validasi signing key pada endpoint SDK:

EndpointDilindungi
Dashboard UI❌ Publik
GraphQL API (/v0/gql)❌ Publik — siapa pun dapat query semua app, fungsi, dan event
Kirim Event (/e/*)✅ Memerlukan Event Key
SDK Sync (/fn/register)✅ Memerlukan Signing Key
Connect WebSocket✅ Memerlukan Signing Key

Disarankan: jangan ekspos domain Dashboard secara publik. Tempatkan di belakang VPN, IP allowlist, atau proxy HTTP Basic Auth. Domain Connect Gateway (port 8289) harus tetap publik agar SDK worker dapat terhubung.

Menghubungkan SDK Worker

const inngest = new Inngest({
  id: "my-app",
  baseUrl: "https://YOUR_DOMAIN",
  eventKey: "YOUR_EVENT_KEY",
  signingKey: "YOUR_SIGNING_KEY",
});

Untuk mode Connect (WebSocket worker), tentukan domain Connect di gatewayUrl:

// ⚠️ Gunakan `triggers` (array jamak), BUKAN `trigger` (tunggal)
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",
});

Penting: Selalu gunakan triggers: [...] (array jamak) saat mendefinisikan fungsi. Menggunakan trigger: (tunggal) akan membuat triggers kosong dan fungsi tidak akan pernah dieksekusi.

Lisensi

Inngest open-source di bawah lisensi Apache 2.0.