Inngest self-hosted — mesin eksekusi durable untuk background jobs dan AI workflow yang andal. Dilengkapi PostgreSQL dan Redis.
Zeabur
Zeabur
ZeaburInngest 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 | Port | Fungsi |
|---|---|---|
| Inngest Dashboard & API | 8288 (HTTP) | UI, penerimaan event, REST API |
| Inngest Connect Gateway | 8289 (HTTP/WSS) | Gateway WebSocket untuk SDK worker |
| PostgreSQL | 5432 | Penyimpanan state persisten |
| Redis | 6379 | Antrean dan cache |
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.
Inngest self-hosted secara desain tidak menerapkan autentikasi pada Dashboard UI atau GraphQL API. Source code hanya menerapkan validasi signing key pada endpoint SDK:
| Endpoint | Dilindungi |
|---|---|
| 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.
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. Menggunakantrigger:(tunggal) akan membuat triggers kosong dan fungsi tidak akan pernah dieksekusi.
Inngest open-source di bawah lisensi Apache 2.0.
Zeabur