From 60d566d050ab36df753cb2e696f97295d7e5f17f Mon Sep 17 00:00:00 2001 From: Sun-ZhenXing <1006925066@qq.com> Date: Tue, 10 Feb 2026 11:17:06 +0800 Subject: [PATCH] feat(inngest): add Inngest service with configuration files, documentation, and Docker Compose setup --- README.md | 1 + README.zh.md | 1 + src/inngest/.env.example | 83 ++++++++++++++++++ src/inngest/README.md | 99 +++++++++++++++++++++ src/inngest/README.zh.md | 99 +++++++++++++++++++++ src/inngest/docker-compose.yaml | 147 ++++++++++++++++++++++++++++++++ 6 files changed, 430 insertions(+) create mode 100644 src/inngest/.env.example create mode 100644 src/inngest/README.md create mode 100644 src/inngest/README.zh.md create mode 100644 src/inngest/docker-compose.yaml diff --git a/README.md b/README.md index 06859cf..531f62e 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ These services require building custom Docker images from source. | [Harbor](./src/harbor) | v2.12.0 | | [HashiCorp Consul](./src/consul) | 1.20.3 | | [InfluxDB](./src/influxdb) | 2.8.0 | +| [Inngest](./src/inngest) | v1.16.3 | | [Jenkins](./src/jenkins) | 2.541-lts | | [JODConverter](./src/jodconverter) | latest | | [Kestra](./src/kestra) | latest-full | diff --git a/README.zh.md b/README.zh.md index 0e20f85..a9379d6 100644 --- a/README.zh.md +++ b/README.zh.md @@ -65,6 +65,7 @@ Compose Anything 通过提供一组高质量的 Docker Compose 配置文件, | [Harbor](./src/harbor) | v2.12.0 | | [HashiCorp Consul](./src/consul) | 1.20.3 | | [InfluxDB](./src/influxdb) | 2.8.0 | +| [Inngest](./src/inngest) | v1.16.3 | | [Jenkins](./src/jenkins) | 2.541-lts | | [JODConverter](./src/jodconverter) | latest | | [Kestra](./src/kestra) | latest-full | diff --git a/src/inngest/.env.example b/src/inngest/.env.example new file mode 100644 index 0000000..caa82b3 --- /dev/null +++ b/src/inngest/.env.example @@ -0,0 +1,83 @@ +# Global registry prefix for all images (optional) +GLOBAL_REGISTRY= + +# ============================================================ +# Inngest Configuration +# ============================================================ + +# Inngest image version +INNGEST_VERSION=v1.16.3 + +# Event key for authenticating event submissions (must be hex string with even number of chars) +# Generate with: openssl rand -hex 32 +INNGEST_EVENT_KEY=deadbeefcafebabe0123456789abcdef + +# Signing key for signing/validating data between server and apps (must be hex string with even number of chars) +# Generate with: openssl rand -hex 32 +INNGEST_SIGNING_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef + +# Log level: trace, debug, info, warn, error +INNGEST_LOG_LEVEL=info + +# ============================================================ +# Port Configuration +# ============================================================ + +# Inngest API and Dashboard port +INNGEST_PORT_OVERRIDE=8288 + +# Inngest Connect WebSocket gateway port +INNGEST_GATEWAY_PORT_OVERRIDE=8289 + +# ============================================================ +# PostgreSQL Configuration +# ============================================================ + +# PostgreSQL image version +INNGEST_PG_VERSION=17.6-alpine + +# PostgreSQL credentials +INNGEST_PG_USER=inngest +INNGEST_PG_PASSWORD=inngest +INNGEST_PG_DB=inngest + +# ============================================================ +# Redis Configuration +# ============================================================ + +# Redis image version +INNGEST_REDIS_VERSION=7.4-alpine + +# ============================================================ +# Timezone +# ============================================================ + +# Timezone (e.g., UTC, Asia/Shanghai, America/New_York) +TZ=UTC + +# ============================================================ +# Resource Limits - Inngest +# ============================================================ + +INNGEST_CPU_LIMIT=1.00 +INNGEST_CPU_RESERVATION=0.50 +INNGEST_MEMORY_LIMIT=512M +INNGEST_MEMORY_RESERVATION=256M + +# ============================================================ +# Resource Limits - PostgreSQL +# ============================================================ + +INNGEST_PG_CPU_LIMIT=0.50 +INNGEST_PG_CPU_RESERVATION=0.25 +INNGEST_PG_MEMORY_LIMIT=256M +INNGEST_PG_MEMORY_RESERVATION=128M + +# ============================================================ +# Resource Limits - Redis +# ============================================================ + +INNGEST_REDIS_CPU_LIMIT=0.50 +INNGEST_REDIS_CPU_RESERVATION=0.25 +INNGEST_REDIS_MEMORY_LIMIT=128M +INNGEST_REDIS_MEMORY_RESERVATION=64M diff --git a/src/inngest/README.md b/src/inngest/README.md new file mode 100644 index 0000000..2947eee --- /dev/null +++ b/src/inngest/README.md @@ -0,0 +1,99 @@ +# Inngest + +[English](./README.md) | [中文](./README.zh.md) + +[Inngest](https://www.inngest.com/) is an open-source durable workflow engine for building reliable applications. It provides event-driven functions with automatic retries, scheduling, fan-out, and a built-in dashboard for monitoring and debugging. + +## Services + +- `inngest`: Inngest server with API, Dashboard, and Connect WebSocket gateway (ports 8288, 8289) +- `postgres`: PostgreSQL database for persistence +- `redis`: Redis for queue and run state management + +## Quick Start + +```bash +# Copy environment file +cp .env.example .env + +# Start all services +docker compose up -d +``` + +After startup, access the Inngest Dashboard at `http://localhost:8288`. + +## Environment Variables + +| Variable Name | Description | Default Value | +| ---------------------------------- | ---------------------------------------------------- | ------------- | +| `GLOBAL_REGISTRY` | Global registry prefix for all images | `""` | +| `INNGEST_VERSION` | Inngest image version | `v1.16.3` | +| `INNGEST_EVENT_KEY` | Event key for authenticating event submissions (hex) | `deadbeef...` | +| `INNGEST_SIGNING_KEY` | Signing key for server-app communication (hex) | `01234567...` | +| `INNGEST_LOG_LEVEL` | Log level (trace, debug, info, warn, error) | `info` | +| `INNGEST_PORT_OVERRIDE` | Host port for API and Dashboard | `8288` | +| `INNGEST_GATEWAY_PORT_OVERRIDE` | Host port for Connect WebSocket gateway | `8289` | +| `INNGEST_PG_VERSION` | PostgreSQL image version | `17.6-alpine` | +| `INNGEST_PG_USER` | PostgreSQL username | `inngest` | +| `INNGEST_PG_PASSWORD` | PostgreSQL password | `inngest` | +| `INNGEST_PG_DB` | PostgreSQL database name | `inngest` | +| `INNGEST_REDIS_VERSION` | Redis image version | `7.4-alpine` | +| `TZ` | Timezone | `UTC` | +| `INNGEST_CPU_LIMIT` | CPU limit for Inngest | `1.00` | +| `INNGEST_CPU_RESERVATION` | CPU reservation for Inngest | `0.50` | +| `INNGEST_MEMORY_LIMIT` | Memory limit for Inngest | `512M` | +| `INNGEST_MEMORY_RESERVATION` | Memory reservation for Inngest | `256M` | +| `INNGEST_PG_CPU_LIMIT` | CPU limit for PostgreSQL | `0.50` | +| `INNGEST_PG_CPU_RESERVATION` | CPU reservation for PostgreSQL | `0.25` | +| `INNGEST_PG_MEMORY_LIMIT` | Memory limit for PostgreSQL | `256M` | +| `INNGEST_PG_MEMORY_RESERVATION` | Memory reservation for PostgreSQL | `128M` | +| `INNGEST_REDIS_CPU_LIMIT` | CPU limit for Redis | `0.50` | +| `INNGEST_REDIS_CPU_RESERVATION` | CPU reservation for Redis | `0.25` | +| `INNGEST_REDIS_MEMORY_LIMIT` | Memory limit for Redis | `128M` | +| `INNGEST_REDIS_MEMORY_RESERVATION` | Memory reservation for Redis | `64M` | + +Please modify the `.env` file as needed for your use case. + +## Volumes + +- `inngest_pg_data`: Named volume for PostgreSQL data +- `inngest_redis_data`: Named volume for Redis data + +## Configuring Inngest SDKs + +To connect your application to a self-hosted Inngest server, set the following environment variables in your app: + +```bash +INNGEST_EVENT_KEY= +INNGEST_SIGNING_KEY= +INNGEST_DEV=0 +INNGEST_BASE_URL=http://:8288 +``` + +For example, with a Node.js app: + +```bash +INNGEST_EVENT_KEY=deadbeefcafebabe0123456789abcdef \ +INNGEST_SIGNING_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \ +INNGEST_DEV=0 \ +INNGEST_BASE_URL=http://localhost:8288 \ +node ./server.js +``` + +## Security Notes + +- **Change default keys before production use.** The event key and signing key must be valid hex strings with an even number of characters. Generate secure keys with `openssl rand -hex 32`. +- **Change the default PostgreSQL password** in `.env` before production deployment. +- The Inngest image supports both `amd64` and `arm64` architectures. +- Consider using TLS/SSL termination (e.g., via a reverse proxy) for production deployments. + +## References + +- [Official Documentation](https://www.inngest.com/docs) +- [Self-Hosting Guide](https://www.inngest.com/docs/self-hosting) +- [GitHub Repository](https://github.com/inngest/inngest) +- [SDK Documentation](https://www.inngest.com/docs/sdk/overview) + +## License + +Inngest is source-available under the [Elastic License 2.0 (ELv2)](https://github.com/inngest/inngest/blob/main/LICENSE.md) with some components under [Apache-2.0](https://github.com/inngest/inngest/blob/main/LICENSE-APACHE.md). diff --git a/src/inngest/README.zh.md b/src/inngest/README.zh.md new file mode 100644 index 0000000..919a1e2 --- /dev/null +++ b/src/inngest/README.zh.md @@ -0,0 +1,99 @@ +# Inngest + +[English](./README.md) | [中文](./README.zh.md) + +[Inngest](https://www.inngest.com/) 是一个开源的持久化工作流引擎,用于构建可靠的应用程序。它提供事件驱动的函数,支持自动重试、调度、扇出以及内置的监控和调试仪表板。 + +## 服务 + +- `inngest`:Inngest 服务器,包含 API、仪表板和 Connect WebSocket 网关(端口 8288、8289) +- `postgres`:PostgreSQL 数据库,用于数据持久化 +- `redis`:Redis,用于队列和运行状态管理 + +## 快速开始 + +```bash +# 复制环境配置文件 +copy .env.example .env + +# 启动所有服务 +docker compose up -d +``` + +启动后,通过 `http://localhost:8288` 访问 Inngest 仪表板。 + +## 环境变量 + +| 变量名 | 说明 | 默认值 | +| ---------------------------------- | ------------------------------------------- | ------------- | +| `GLOBAL_REGISTRY` | 全局镜像仓库前缀 | `""` | +| `INNGEST_VERSION` | Inngest 镜像版本 | `v1.16.3` | +| `INNGEST_EVENT_KEY` | 事件提交认证密钥(十六进制字符串) | `deadbeef...` | +| `INNGEST_SIGNING_KEY` | 服务器与应用间的签名密钥(十六进制字符串) | `01234567...` | +| `INNGEST_LOG_LEVEL` | 日志级别(trace、debug、info、warn、error) | `info` | +| `INNGEST_PORT_OVERRIDE` | API 和仪表板的主机端口 | `8288` | +| `INNGEST_GATEWAY_PORT_OVERRIDE` | Connect WebSocket 网关的主机端口 | `8289` | +| `INNGEST_PG_VERSION` | PostgreSQL 镜像版本 | `17.6-alpine` | +| `INNGEST_PG_USER` | PostgreSQL 用户名 | `inngest` | +| `INNGEST_PG_PASSWORD` | PostgreSQL 密码 | `inngest` | +| `INNGEST_PG_DB` | PostgreSQL 数据库名 | `inngest` | +| `INNGEST_REDIS_VERSION` | Redis 镜像版本 | `7.4-alpine` | +| `TZ` | 时区 | `UTC` | +| `INNGEST_CPU_LIMIT` | Inngest CPU 限制 | `1.00` | +| `INNGEST_CPU_RESERVATION` | Inngest CPU 预留 | `0.50` | +| `INNGEST_MEMORY_LIMIT` | Inngest 内存限制 | `512M` | +| `INNGEST_MEMORY_RESERVATION` | Inngest 内存预留 | `256M` | +| `INNGEST_PG_CPU_LIMIT` | PostgreSQL CPU 限制 | `0.50` | +| `INNGEST_PG_CPU_RESERVATION` | PostgreSQL CPU 预留 | `0.25` | +| `INNGEST_PG_MEMORY_LIMIT` | PostgreSQL 内存限制 | `256M` | +| `INNGEST_PG_MEMORY_RESERVATION` | PostgreSQL 内存预留 | `128M` | +| `INNGEST_REDIS_CPU_LIMIT` | Redis CPU 限制 | `0.50` | +| `INNGEST_REDIS_CPU_RESERVATION` | Redis CPU 预留 | `0.25` | +| `INNGEST_REDIS_MEMORY_LIMIT` | Redis 内存限制 | `128M` | +| `INNGEST_REDIS_MEMORY_RESERVATION` | Redis 内存预留 | `64M` | + +请根据实际需求修改 `.env` 文件。 + +## 卷 + +- `inngest_pg_data`:用于存储 PostgreSQL 数据的命名卷 +- `inngest_redis_data`:用于存储 Redis 数据的命名卷 + +## 配置 Inngest SDK + +要将你的应用连接到自托管的 Inngest 服务器,请在应用中设置以下环境变量: + +```bash +INNGEST_EVENT_KEY=<你的事件密钥> +INNGEST_SIGNING_KEY=<你的签名密钥> +INNGEST_DEV=0 +INNGEST_BASE_URL=http://:8288 +``` + +例如,对于 Node.js 应用: + +```bash +INNGEST_EVENT_KEY=deadbeefcafebabe0123456789abcdef \ +INNGEST_SIGNING_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \ +INNGEST_DEV=0 \ +INNGEST_BASE_URL=http://localhost:8288 \ +node ./server.js +``` + +## 安全提示 + +- **生产环境使用前请务必更改默认密钥。** 事件密钥和签名密钥必须是偶数位的有效十六进制字符串。可使用 `openssl rand -hex 32` 生成安全密钥。 +- 生产环境部署前请在 `.env` 中**更改默认的 PostgreSQL 密码**。 +- Inngest 镜像支持 `amd64` 和 `arm64` 架构。 +- 生产环境建议使用 TLS/SSL 终止(例如通过反向代理)。 + +## 参考链接 + +- [官方文档](https://www.inngest.com/docs) +- [自托管指南](https://www.inngest.com/docs/self-hosting) +- [GitHub 仓库](https://github.com/inngest/inngest) +- [SDK 文档](https://www.inngest.com/docs/sdk/overview) + +## 许可证 + +Inngest 采用 [Elastic License 2.0(ELv2)](https://github.com/inngest/inngest/blob/main/LICENSE.md) 发布,部分组件采用 [Apache-2.0](https://github.com/inngest/inngest/blob/main/LICENSE-APACHE.md) 许可。 diff --git a/src/inngest/docker-compose.yaml b/src/inngest/docker-compose.yaml new file mode 100644 index 0000000..ad69fac --- /dev/null +++ b/src/inngest/docker-compose.yaml @@ -0,0 +1,147 @@ +# Inngest - Durable workflow engine for building reliable applications +# https://www.inngest.com/ +# https://github.com/inngest/inngest +# +# Features: +# - Durable functions and workflows with automatic retries +# - Event-driven architecture with fan-out and scheduling +# - Built-in dashboard for monitoring and debugging +# - Connect WebSocket gateway for SDK communication +# - Supports PostgreSQL for persistence and Redis for queuing +# +# Default Ports: +# - 8288: API and Dashboard +# - 8289: Connect WebSocket gateway +# +# Default Credentials: +# - PostgreSQL: inngest / inngest (database: inngest) +# - Event Key: See .env.example (must be hex string with even number of chars) +# - Signing Key: See .env.example (must be hex string with even number of chars) +# +# Security Notes: +# - Change the default event key and signing key before production use +# - Change the default PostgreSQL password before production use +# - Both keys must be valid hex strings with an even number of characters +# - Generate secure keys with: openssl rand -hex 32 +# +# License: Apache-2.0 (Elastic License 2.0 for some components) + +x-defaults: &defaults + restart: unless-stopped + logging: + driver: json-file + options: + max-size: 100m + max-file: "3" + +services: + inngest: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}inngest/inngest:${INNGEST_VERSION:-v1.16.3} + command: > + inngest start + --host 0.0.0.0 + --port 8288 + --connect-gateway-port 8289 + --postgres-uri postgresql://${INNGEST_PG_USER:-inngest}:${INNGEST_PG_PASSWORD:-inngest}@postgres:5432/${INNGEST_PG_DB:-inngest}?sslmode=disable + --redis-uri redis://redis:6379 + ports: + - "${INNGEST_PORT_OVERRIDE:-8288}:8288" + - "${INNGEST_GATEWAY_PORT_OVERRIDE:-8289}:8289" + environment: + - TZ=${TZ:-UTC} + - INNGEST_EVENT_KEY=${INNGEST_EVENT_KEY:-deadbeefcafebabe0123456789abcdef} + - INNGEST_SIGNING_KEY=${INNGEST_SIGNING_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef} + - INNGEST_LOG_LEVEL=${INNGEST_LOG_LEVEL:-info} + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: + [ + "CMD", + "wget", + "--spider", + "--quiet", + "http://localhost:8288/v0/health", + ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + deploy: + resources: + limits: + cpus: ${INNGEST_CPU_LIMIT:-1.00} + memory: ${INNGEST_MEMORY_LIMIT:-512M} + reservations: + cpus: ${INNGEST_CPU_RESERVATION:-0.50} + memory: ${INNGEST_MEMORY_RESERVATION:-256M} + + postgres: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}postgres:${INNGEST_PG_VERSION:-17.6-alpine} + volumes: + - inngest_pg_data:/var/lib/postgresql/data + environment: + - TZ=${TZ:-UTC} + - POSTGRES_USER=${INNGEST_PG_USER:-inngest} + - POSTGRES_PASSWORD=${INNGEST_PG_PASSWORD:-inngest} + - POSTGRES_DB=${INNGEST_PG_DB:-inngest} + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -U ${INNGEST_PG_USER:-inngest} -d ${INNGEST_PG_DB:-inngest}", + ] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + cap_drop: + - ALL + cap_add: + - CHOWN + - DAC_READ_SEARCH + - FOWNER + - SETGID + - SETUID + deploy: + resources: + limits: + cpus: ${INNGEST_PG_CPU_LIMIT:-0.50} + memory: ${INNGEST_PG_MEMORY_LIMIT:-256M} + reservations: + cpus: ${INNGEST_PG_CPU_RESERVATION:-0.25} + memory: ${INNGEST_PG_MEMORY_RESERVATION:-128M} + + redis: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}redis:${INNGEST_REDIS_VERSION:-7.4-alpine} + volumes: + - inngest_redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 3s + retries: 3 + start_period: 5s + cap_drop: + - ALL + cap_add: + - SETGID + - SETUID + deploy: + resources: + limits: + cpus: ${INNGEST_REDIS_CPU_LIMIT:-0.50} + memory: ${INNGEST_REDIS_MEMORY_LIMIT:-128M} + reservations: + cpus: ${INNGEST_REDIS_CPU_RESERVATION:-0.25} + memory: ${INNGEST_REDIS_MEMORY_RESERVATION:-64M} + +volumes: + inngest_pg_data: + inngest_redis_data: