Inngest auto-hospedado — motor de ejecución durable para trabajos en segundo plano y flujos de trabajo de IA. Incluye PostgreSQL y Redis.
Zeabur
Zeabur
ZeaburInngest es un motor de ejecución durable de código abierto para trabajos en segundo plano, funciones programadas y flujos de trabajo de IA con reintentos y control de concurrencia integrados.
Esta plantilla despliega una instancia auto-hospedada de Inngest con PostgreSQL y Redis en un solo clic.
| Servicio | Puerto | Propósito |
|---|---|---|
| Inngest Dashboard & API | 8288 (HTTP) | UI, ingesta de eventos, REST API |
| Inngest Connect Gateway | 8289 (HTTP/WSS) | Puerta de enlace WebSocket para workers SDK |
| PostgreSQL | 5432 | Almacenamiento de estado persistente |
| Redis | 6379 | Cola y caché |
Necesitas dos cadenas hexadecimales (número par de caracteres, solo 0-9 y a-f):
openssl rand -hex 16
Usa una para Event Key y otra para Signing Key.
Inngest self-hosted por diseño no aplica autenticación al Dashboard UI ni a la GraphQL API. El código fuente solo aplica la validación de signing key a los endpoints del SDK:
| Endpoint | Protegido |
|---|---|
| Dashboard UI | ❌ Público |
GraphQL API (/v0/gql) | ❌ Público — cualquiera puede consultar todas las apps, funciones y eventos |
Envío de eventos (/e/*) | ✅ Requiere Event Key |
SDK Sync (/fn/register) | ✅ Requiere Signing Key |
| Connect WebSocket | ✅ Requiere Signing Key |
Recomendado: no expongas el dominio del Dashboard públicamente. Colócalo detrás de una VPN, lista de IPs permitidas o un proxy con HTTP Basic Auth. El dominio del Connect Gateway (puerto 8289) debe permanecer público para los workers del SDK.
const inngest = new Inngest({
id: "my-app",
baseUrl: "https://YOUR_DOMAIN",
eventKey: "YOUR_EVENT_KEY",
signingKey: "YOUR_SIGNING_KEY",
});
Para el modo Connect (workers WebSocket), especifica tu dominio Connect en gatewayUrl:
// ⚠️ Usa `triggers` (array plural), NO `trigger` (singular)
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",
});
Importante: Usa siempre
triggers: [...](array plural) al definir funciones. Usartrigger:(singular) dejará los triggers vacíos y las funciones nunca se ejecutarán.
Inngest es de código abierto bajo la licencia Apache 2.0.
Zeabur