diff --git a/README.md b/README.md index 8984d6a..c1faf02 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,7 @@ These services require building custom Docker images from source. | [Jenkins](./src/jenkins) | 2.541-lts | | [JODConverter](./src/jodconverter) | latest | | [Kestra](./src/kestra) | latest-full | +| [Kaneo](./src/kaneo) | 2.16.2 | | [Kibana](./src/kibana) | 8.16.1 | | [Kodbox](./src/kodbox) | 1.62 | | [Kong](./src/kong) | 3.8.0 | @@ -184,13 +185,14 @@ These services require building custom Docker images from source. | [SearXNG](./src/searxng) | 2025.1.20-1ce14ef99 | | [Selenium](./src/selenium) | 144.0-20260120 | | [Shannon](./apps/shannon) | v0.3.1 | -| [SigNoz](./src/signoz) | v0.132.2 | +| [SigNoz](./src/signoz) | v0.136.1 | | [Sim](./apps/sim) | latest | | [Skyvern](./apps/skyvern) | v1.0.31 | | [Stable Diffusion WebUI](./apps/stable-diffusion-webui-docker) | latest | | [Stirling-PDF](./apps/stirling-pdf) | latest | | [Sub2API](./src/sub2api) | 0.1.124 | | [Temporal](./src/temporal) | 1.24.2 | +| [TencentDB Agent Memory](./src/tencentdb-agent-memory) | 1.0.0 | | [TiDB](./src/tidb) | v8.5.0 | | [TiKV](./src/tikv) | v8.5.0 | | [Trigger.dev](./src/trigger-dev) | v4.2.0 | diff --git a/README.zh.md b/README.zh.md index c2969f6..c35a319 100644 --- a/README.zh.md +++ b/README.zh.md @@ -102,6 +102,7 @@ docker compose exec redis redis-cli ping | [Jenkins](./src/jenkins) | 2.541-lts | | [JODConverter](./src/jodconverter) | latest | | [Kestra](./src/kestra) | latest-full | +| [Kaneo](./src/kaneo) | 2.16.2 | | [Kibana](./src/kibana) | 8.16.1 | | [Kodbox](./src/kodbox) | 1.62 | | [Kong](./src/kong) | 3.8.0 | @@ -184,13 +185,14 @@ docker compose exec redis redis-cli ping | [SearXNG](./src/searxng) | 2025.1.20-1ce14ef99 | | [Selenium](./src/selenium) | 144.0-20260120 | | [Shannon](./apps/shannon) | v0.3.1 | -| [SigNoz](./src/signoz) | v0.132.2 | +| [SigNoz](./src/signoz) | v0.136.1 | | [Sim](./apps/sim) | latest | | [Skyvern](./apps/skyvern) | v1.0.31 | | [Stable Diffusion WebUI](./apps/stable-diffusion-webui-docker) | latest | | [Stirling-PDF](./apps/stirling-pdf) | latest | | [Sub2API](./src/sub2api) | 0.1.124 | | [Temporal](./src/temporal) | 1.24.2 | +| [TencentDB Agent Memory](./src/tencentdb-agent-memory) | 1.0.0 | | [TiDB](./src/tidb) | v8.5.0 | | [TiKV](./src/tikv) | v8.5.0 | | [Trigger.dev](./src/trigger-dev) | v4.2.0 | diff --git a/src/kaneo/.env.example b/src/kaneo/.env.example new file mode 100644 index 0000000..9bb6fd5 --- /dev/null +++ b/src/kaneo/.env.example @@ -0,0 +1,40 @@ +# Kaneo image version (GitHub Container Registry: ghcr.io/usekaneo/kaneo) +KANEO_VERSION=2.16.2 + +# PostgreSQL image version +POSTGRES_VERSION=16.14-alpine + +# Timezone +TZ=UTC + +# Host port mapping for the Kaneo web interface +KANEO_PORT_OVERRIDE=5173 + +# Public URL clients use to reach Kaneo (used for links, OAuth callbacks, etc.) +KANEO_CLIENT_URL=http://localhost:5173 + +# Required: secret used to sign session cookies (min 32 characters). +# Generate one with: openssl rand -hex 32 +# If unset or changed, all user sessions are invalidated on restart. +AUTH_SECRET= + +# PostgreSQL database name +POSTGRES_DB=kaneo + +# PostgreSQL user +POSTGRES_USER=kaneo + +# PostgreSQL password (change this in production!) +POSTGRES_PASSWORD=kaneo123 + +# Resource limits and reservations for the Kaneo service +KANEO_CPU_LIMIT=1.0 +KANEO_MEMORY_LIMIT=1G +KANEO_CPU_RESERVATION=0.1 +KANEO_MEMORY_RESERVATION=256M + +# Resource limits and reservations for the PostgreSQL service +POSTGRES_CPU_LIMIT=1.0 +POSTGRES_MEMORY_LIMIT=1G +POSTGRES_CPU_RESERVATION=0.1 +POSTGRES_MEMORY_RESERVATION=256M diff --git a/src/kaneo/README.md b/src/kaneo/README.md new file mode 100644 index 0000000..fb0c5d7 --- /dev/null +++ b/src/kaneo/README.md @@ -0,0 +1,67 @@ +# Kaneo + +[English](./README.md) | [中文](./README.zh.md) + +This service deploys [Kaneo](https://kaneo.app), an open-source kanban and project management platform. Kaneo offers workspaces, projects, customizable workflows, labels, and time tracking, plus integrations with GitHub, Gitea, Slack, Discord, and Telegram. It supports SSO (OIDC) and ships a built-in MCP server at `/api/mcp`. + +## Services + +- `kaneo`: The Kaneo application server (web UI + API). +- `postgres`: PostgreSQL database storing all Kaneo data. + +## Quick Start + +1. Create a `.env` file from the example: + + ```bash + cp .env.example .env + ``` + +2. Edit `.env` and set the required values: + + ```env + AUTH_SECRET=your-32-char-minimum-random-secret + POSTGRES_PASSWORD=your-secure-db-password + ``` + + Generate a secret with `openssl rand -hex 32`. See [Security Notes](#security-notes) for why `AUTH_SECRET` matters. + +3. Start the services: + + ```bash + docker compose up -d + ``` + +4. Open `http://localhost:5173` in your browser. + +5. The first user to register becomes the workspace owner. Registration is open by default; once you have your account, lock it down by adding `DISABLE_REGISTRATION=true` to the `kaneo` service environment (or set the equivalent app setting). + +## Environment Variables + +| Variable Name | Description | Default Value | +| -------------------- | ------------------------------------ | ---------------------- | +| KANEO_VERSION | Kaneo image version | `2.16.2` | +| POSTGRES_VERSION | PostgreSQL image version | `16.14-alpine` | +| KANEO_PORT_OVERRIDE | Host port for the Kaneo web interface | `5173` | +| KANEO_CLIENT_URL | Public URL clients use to reach Kaneo | `http://localhost:5173` | +| AUTH_SECRET | Session signing secret (required, min 32 chars) | *(none)* | +| POSTGRES_DB | PostgreSQL database name | `kaneo` | +| POSTGRES_USER | PostgreSQL user | `kaneo` | +| POSTGRES_PASSWORD | PostgreSQL password | `kaneo123` | +| KANEO_CPU_LIMIT | Kaneo CPU limit | `1.0` | +| KANEO_MEMORY_LIMIT | Kaneo memory limit | `1G` | +| POSTGRES_CPU_LIMIT | PostgreSQL CPU limit | `1.0` | +| POSTGRES_MEMORY_LIMIT| PostgreSQL memory limit | `1G` | + +## Storage + +All application data is stored in the `postgres_data` named volume, managed by the `postgres` service. + +Uploads attached to descriptions and comments are kept inside the container's ephemeral filesystem by default. For persistent uploads, configure S3-compatible object storage (e.g., MinIO) in the Kaneo settings — the app runs fine without it, but uploads will be lost on container recreation. + +## Security Notes + +- **Open registration**: registration is enabled by default, so anyone who can reach the app can create an account. Register your account first, then disable registration (e.g., `DISABLE_REGISTRATION=true`). +- **AUTH_SECRET**: required and must be at least 32 characters. If it is unset or changes, all user sessions are invalidated on restart. Generate with `openssl rand -hex 32`. +- **POSTGRES_PASSWORD**: change the default (`kaneo123`) before exposing the service beyond localhost. +- **Image source**: the image is pulled from GitHub Container Registry (`ghcr.io/usekaneo/kaneo`) and pinned to version `2.16.2`. The health check probes `http://127.0.0.1:5173/api/health`. diff --git a/src/kaneo/README.zh.md b/src/kaneo/README.zh.md new file mode 100644 index 0000000..edc3482 --- /dev/null +++ b/src/kaneo/README.zh.md @@ -0,0 +1,67 @@ +# Kaneo + +[English](./README.md) | [中文](./README.zh.md) + +此服务部署 [Kaneo](https://kaneo.app),一个开源的看板与项目管理平台。Kaneo 提供工作区、项目、可定制工作流、标签和工时统计,并支持 GitHub、Gitea、Slack、Discord 和 Telegram 集成。它还支持 SSO(OIDC),并内置了位于 `/api/mcp` 的 MCP 服务器。 + +## 服务 + +- `kaneo`: Kaneo 应用服务器(Web 界面 + API)。 +- `postgres`: 存储所有 Kaneo 数据的 PostgreSQL 数据库。 + +## 快速开始 + +1. 从示例文件创建 `.env` 文件: + + ```bash + cp .env.example .env + ``` + +2. 编辑 `.env` 并设置必需值: + + ```env + AUTH_SECRET=your-32-char-minimum-random-secret + POSTGRES_PASSWORD=your-secure-db-password + ``` + + 使用 `openssl rand -hex 32` 生成密钥。关于 `AUTH_SECRET` 的重要性,请参阅[安全提示](#安全提示)。 + +3. 启动服务: + + ```bash + docker compose up -d + ``` + +4. 在浏览器中打开 `http://localhost:5173`。 + +5. 第一个注册的用户将成为工作区所有者。注册默认开放;创建账户后,请在 `kaneo` 服务的环境变量中添加 `DISABLE_REGISTRATION=true`(或设置对应的应用选项)以关闭注册。 + +## 环境变量 + +| 变量名 | 描述 | 默认值 | +| -------------------- | -------------------------------- | ----------------------- | +| KANEO_VERSION | Kaneo 镜像版本 | `2.16.2` | +| POSTGRES_VERSION | PostgreSQL 镜像版本 | `16.14-alpine` | +| KANEO_PORT_OVERRIDE | Kaneo Web 界面的主机端口 | `5173` | +| KANEO_CLIENT_URL | 客户端访问 Kaneo 的公开 URL | `http://localhost:5173` | +| AUTH_SECRET | 会话签名密钥(必需,至少 32 个字符) | *(无)* | +| POSTGRES_DB | PostgreSQL 数据库名 | `kaneo` | +| POSTGRES_USER | PostgreSQL 用户名 | `kaneo` | +| POSTGRES_PASSWORD | PostgreSQL 密码 | `kaneo123` | +| KANEO_CPU_LIMIT | Kaneo CPU 限制 | `1.0` | +| KANEO_MEMORY_LIMIT | Kaneo 内存限制 | `1G` | +| POSTGRES_CPU_LIMIT | PostgreSQL CPU 限制 | `1.0` | +| POSTGRES_MEMORY_LIMIT| PostgreSQL 内存限制 | `1G` | + +## 存储 + +所有应用数据都存储在由 `postgres` 服务管理的 `postgres_data` 命名卷中。 + +默认情况下,附加到描述和评论中的上传文件保存在容器内部的临时文件系统中。如需持久化上传文件,请在 Kaneo 设置中配置 S3 兼容的对象存储(例如 MinIO)——应用不配置也可以正常运行,但容器重建后上传文件将会丢失。 + +## 安全提示 + +- **开放注册**: 注册默认开放,任何能够访问应用的人都可以创建账户。请先注册您的账户,然后关闭注册(例如设置 `DISABLE_REGISTRATION=true`)。 +- **AUTH_SECRET**: 必填项,且至少需要 32 个字符。如果未设置或发生更改,所有用户会话将在重启后失效。请使用 `openssl rand -hex 32` 生成。 +- **POSTGRES_PASSWORD**: 在将服务暴露到 localhost 之外之前,请更改默认密码(`kaneo123`)。 +- **镜像来源**: 镜像从 GitHub Container Registry(`ghcr.io/usekaneo/kaneo`)拉取,并固定为版本 `2.16.2`。健康检查探测 `http://127.0.0.1:5173/api/health`。 diff --git a/src/kaneo/docker-compose.yaml b/src/kaneo/docker-compose.yaml new file mode 100644 index 0000000..f554a63 --- /dev/null +++ b/src/kaneo/docker-compose.yaml @@ -0,0 +1,69 @@ +x-defaults: &defaults + restart: unless-stopped + logging: + driver: json-file + options: + max-size: 100m + max-file: '3' + +services: + kaneo: + <<: *defaults + image: ${GHCR_IO_REGISTRY:-ghcr.io}/usekaneo/kaneo:${KANEO_VERSION:-2.16.2} + ports: + - '${KANEO_PORT_OVERRIDE:-5173}:5173' + environment: + - TZ=${TZ:-UTC} + - KANEO_CLIENT_URL=${KANEO_CLIENT_URL:-http://localhost:5173} + # Required: AUTH_SECRET must be set (min 32 chars). Generate with: openssl rand -hex 32 + - AUTH_SECRET=${AUTH_SECRET:-} + - POSTGRES_HOST=postgres + - POSTGRES_PORT=5432 + - POSTGRES_DB=${POSTGRES_DB:-kaneo} + - POSTGRES_USER=${POSTGRES_USER:-kaneo} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-kaneo123} + depends_on: + postgres: + condition: service_healthy + healthcheck: + test: [CMD, wget, --no-verbose, --tries=1, --spider, 'http://127.0.0.1:5173/api/health'] + interval: 30s + timeout: 5s + retries: 3 + start_period: 60s + deploy: + resources: + limits: + cpus: ${KANEO_CPU_LIMIT:-1.0} + memory: ${KANEO_MEMORY_LIMIT:-1G} + reservations: + cpus: ${KANEO_CPU_RESERVATION:-0.1} + memory: ${KANEO_MEMORY_RESERVATION:-256M} + + postgres: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-16.14-alpine} + environment: + - TZ=${TZ:-UTC} + - POSTGRES_DB=${POSTGRES_DB:-kaneo} + - POSTGRES_USER=${POSTGRES_USER:-kaneo} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-kaneo123} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: [CMD-SHELL, 'pg_isready -U ${POSTGRES_USER:-kaneo} -d ${POSTGRES_DB:-kaneo}'] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + deploy: + resources: + limits: + cpus: ${POSTGRES_CPU_LIMIT:-1.0} + memory: ${POSTGRES_MEMORY_LIMIT:-1G} + reservations: + cpus: ${POSTGRES_CPU_RESERVATION:-0.1} + memory: ${POSTGRES_MEMORY_RESERVATION:-256M} + +volumes: + postgres_data: diff --git a/src/signoz/.env.example b/src/signoz/.env.example index 23a3c4c..ab4a720 100644 --- a/src/signoz/.env.example +++ b/src/signoz/.env.example @@ -13,16 +13,16 @@ TZ=UTC SIGNOZ_IMAGE_NAME=signoz/signoz # SigNoz all-in-one backend + frontend + alertmanager version -SIGNOZ_VERSION=v0.132.2 +SIGNOZ_VERSION=v0.136.1 # SigNoz OTel Collector version (also used for migration jobs) -SIGNOZ_OTEL_COLLECTOR_VERSION=v0.144.5 +SIGNOZ_OTEL_COLLECTOR_VERSION=v0.144.7 # ClickHouse version -SIGNOZ_CLICKHOUSE_VERSION=26.4.4 +SIGNOZ_CLICKHOUSE_VERSION=26.4.5 # ZooKeeper version -SIGNOZ_ZOOKEEPER_VERSION=3.7.1 +SIGNOZ_ZOOKEEPER_VERSION=3.9.3 # ============================================ # Security Configuration diff --git a/src/signoz/README.md b/src/signoz/README.md index 14681e7..2686a2a 100644 --- a/src/signoz/README.md +++ b/src/signoz/README.md @@ -17,12 +17,12 @@ SigNoz is an open-source observability platform that provides monitoring and tro | Service | Image | Description | | -------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------ | -| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.132.2}` | All-in-one backend, frontend UI, and alert manager | -| `otel-collector` | signoz/signoz-otel-collector:v0.144.5 | Receives, processes, and exports telemetry data | -| `clickhouse` | clickhouse/clickhouse-server:26.4.4 | Time-series database for traces, metrics, and logs | -| `zookeeper-1` | signoz/zookeeper:3.7.1 | ZooKeeper for ClickHouse replication metadata | -| `init-clickhouse` | clickhouse/clickhouse-server:26.4.4 | One-shot init that downloads the histogramQuantile UDF | -| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.5 | One-shot schema migration for ClickHouse | +| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.136.1}` | All-in-one backend, frontend UI, and alert manager | +| `otel-collector` | signoz/signoz-otel-collector:v0.144.7 | Receives, processes, and exports telemetry data | +| `clickhouse` | clickhouse/clickhouse-server:26.4.5 | Time-series database for traces, metrics, and logs | +| `zookeeper-1` | signoz/zookeeper:3.9.3 | ZooKeeper for ClickHouse replication metadata | +| `init-clickhouse` | clickhouse/clickhouse-server:26.4.5 | One-shot init that downloads the histogramQuantile UDF | +| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.7 | One-shot schema migration for ClickHouse | ## Quick Start @@ -62,9 +62,9 @@ SigNoz is an open-source observability platform that provides monitoring and tro | `SIGNOZ_OTEL_GRPC_PORT_OVERRIDE` | `4317` | OTLP gRPC receiver host port | | `SIGNOZ_OTEL_HTTP_PORT_OVERRIDE` | `4318` | OTLP HTTP receiver host port | | `SIGNOZ_IMAGE_NAME` | `signoz/signoz` | SigNoz image repository/name | -| `SIGNOZ_VERSION` | `v0.132.2` | SigNoz image version | -| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.5` | OTel Collector image version | -| `SIGNOZ_CLICKHOUSE_VERSION` | `26.4.4` | ClickHouse image version | +| `SIGNOZ_VERSION` | `v0.136.1` | SigNoz image version | +| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.7` | OTel Collector image version | +| `SIGNOZ_CLICKHOUSE_VERSION` | `26.4.5` | ClickHouse image version | | `TZ` | `UTC` | Timezone | See `.env.example` for the complete list including resource limits. diff --git a/src/signoz/README.zh.md b/src/signoz/README.zh.md index add961f..47803b4 100644 --- a/src/signoz/README.zh.md +++ b/src/signoz/README.zh.md @@ -17,12 +17,12 @@ SigNoz 是一个开源的可观测性平台,为分布式应用程序提供监 | 服务 | 镜像 | 描述 | | -------------------------------- | ----------------------------------------------------------------- | ---------------------------------------- | -| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.132.2}` | 后端、前端 UI 和告警管理器的合体镜像 | -| `otel-collector` | signoz/signoz-otel-collector:v0.144.5 | 接收、处理和导出遥测数据 | -| `clickhouse` | clickhouse/clickhouse-server:26.4.4 | 存储追踪、指标和日志的时序数据库 | -| `zookeeper-1` | signoz/zookeeper:3.7.1 | ZooKeeper,用于 ClickHouse 副本元数据 | -| `init-clickhouse` | clickhouse/clickhouse-server:26.4.4 | 一次性初始化,下载 histogramQuantile UDF | -| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.5 | 一次性 ClickHouse Schema 迁移 | +| `signoz` | `${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.136.1}` | 后端、前端 UI 和告警管理器的合体镜像 | +| `otel-collector` | signoz/signoz-otel-collector:v0.144.7 | 接收、处理和导出遥测数据 | +| `clickhouse` | clickhouse/clickhouse-server:26.4.5 | 存储追踪、指标和日志的时序数据库 | +| `zookeeper-1` | signoz/zookeeper:3.9.3 | ZooKeeper,用于 ClickHouse 副本元数据 | +| `init-clickhouse` | clickhouse/clickhouse-server:26.4.5 | 一次性初始化,下载 histogramQuantile UDF | +| `signoz-telemetrystore-migrator` | signoz/signoz-otel-collector:v0.144.7 | 一次性 ClickHouse Schema 迁移 | ## 快速开始 @@ -62,9 +62,9 @@ SigNoz 是一个开源的可观测性平台,为分布式应用程序提供监 | `SIGNOZ_OTEL_GRPC_PORT_OVERRIDE` | `4317` | OTLP gRPC 接收器宿主机端口 | | `SIGNOZ_OTEL_HTTP_PORT_OVERRIDE` | `4318` | OTLP HTTP 接收器宿主机端口 | | `SIGNOZ_IMAGE_NAME` | `signoz/signoz` | SigNoz 镜像仓库名或镜像名 | -| `SIGNOZ_VERSION` | `v0.132.2` | SigNoz 镜像版本 | -| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.5` | OTel Collector 镜像版本 | -| `SIGNOZ_CLICKHOUSE_VERSION` | `26.4.4` | ClickHouse 镜像版本 | +| `SIGNOZ_VERSION` | `v0.136.1` | SigNoz 镜像版本 | +| `SIGNOZ_OTEL_COLLECTOR_VERSION` | `v0.144.7` | OTel Collector 镜像版本 | +| `SIGNOZ_CLICKHOUSE_VERSION` | `26.4.5` | ClickHouse 镜像版本 | | `TZ` | `UTC` | 时区 | 完整变量列表(含资源限制)请查看 `.env.example`。 diff --git a/src/signoz/docker-compose.yaml b/src/signoz/docker-compose.yaml index 49ac1bd..82261df 100644 --- a/src/signoz/docker-compose.yaml +++ b/src/signoz/docker-compose.yaml @@ -8,7 +8,7 @@ x-defaults: &defaults x-clickhouse-defaults: &clickhouse-defaults <<: *defaults - image: ${GLOBAL_REGISTRY:-}clickhouse/clickhouse-server:${SIGNOZ_CLICKHOUSE_VERSION:-26.4.4} + image: ${GLOBAL_REGISTRY:-}clickhouse/clickhouse-server:${SIGNOZ_CLICKHOUSE_VERSION:-26.4.5} depends_on: init-clickhouse: condition: service_completed_successfully @@ -34,7 +34,7 @@ x-db-depend: &db-depend services: # One-shot init: downloads histogramQuantile UDF binary into the shared volume init-clickhouse: - image: ${GLOBAL_REGISTRY:-}clickhouse/clickhouse-server:${SIGNOZ_CLICKHOUSE_VERSION:-26.4.4} + image: ${GLOBAL_REGISTRY:-}clickhouse/clickhouse-server:${SIGNOZ_CLICKHOUSE_VERSION:-26.4.5} restart: on-failure logging: driver: json-file @@ -65,7 +65,7 @@ services: # ZooKeeper for ClickHouse replication metadata zookeeper-1: <<: *defaults - image: ${GLOBAL_REGISTRY:-}signoz/zookeeper:${SIGNOZ_ZOOKEEPER_VERSION:-3.7.1} + image: ${GLOBAL_REGISTRY:-}signoz/zookeeper:${SIGNOZ_ZOOKEEPER_VERSION:-3.9.3} user: root environment: - TZ=${TZ:-UTC} @@ -116,7 +116,7 @@ services: # One-shot migration: bootstraps and runs schema migrations signoz-telemetrystore-migrator: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.5} + image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.7} restart: on-failure environment: - TZ=${TZ:-UTC} @@ -140,7 +140,7 @@ services: # SigNoz all-in-one backend + frontend + alertmanager signoz: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.132.2} + image: ${GLOBAL_REGISTRY:-}${SIGNOZ_IMAGE_NAME:-signoz/signoz}:${SIGNOZ_VERSION:-v0.136.1} ports: - '${SIGNOZ_PORT_OVERRIDE:-8080}:8080' volumes: @@ -169,7 +169,7 @@ services: # OTel Collector for receiving telemetry data otel-collector: <<: *db-depend - image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.5} + image: ${GLOBAL_REGISTRY:-}signoz/signoz-otel-collector:${SIGNOZ_OTEL_COLLECTOR_VERSION:-v0.144.7} entrypoint: [/bin/sh] command: - -c diff --git a/src/tencentdb-agent-memory/.env.example b/src/tencentdb-agent-memory/.env.example new file mode 100644 index 0000000..a56638b --- /dev/null +++ b/src/tencentdb-agent-memory/.env.example @@ -0,0 +1,63 @@ +# Global registry prefix for all images (optional) +GLOBAL_REGISTRY= + +# ------------------------------------------------------------------ +# Versions +# ------------------------------------------------------------------ + +# TencentDB Agent Memory image version +TDAI_MEMORY_VERSION=1.0.0 + +# ------------------------------------------------------------------ +# Timezone +# ------------------------------------------------------------------ + +# Timezone (e.g., UTC, Asia/Shanghai, America/New_York) +TZ=UTC + +# ------------------------------------------------------------------ +# Ports +# ------------------------------------------------------------------ + +# Host port mapping (maps to the gateway port 8420 in the container) +TDAI_MEMORY_PORT_OVERRIDE=8420 + +# ------------------------------------------------------------------ +# LLM configuration +# ------------------------------------------------------------------ + +# REQUIRED - no default. API key for the external OpenAI-compatible +# LLM provider (e.g., OpenAI, DeepSeek, Tencent Cloud). The service +# contains no model itself and will not start working without this. +TDAI_LLM_API_KEY= + +# Base URL of the OpenAI-compatible LLM API +# e.g. https://api.deepseek.com/v1 or https://api.lkeap.cloud.tencent.com/v1 +TDAI_LLM_BASE_URL=https://api.openai.com/v1 + +# LLM model name to use +TDAI_LLM_MODEL=gpt-4o + +# Maximum number of tokens per LLM request +TDAI_LLM_MAX_TOKENS=4096 + +# ------------------------------------------------------------------ +# Security +# ------------------------------------------------------------------ + +# Optional Bearer auth token for the gateway API. Leave empty for open +# access - set a random long string when the gateway is exposed to a +# network. /health is always open regardless of this setting. +TDAI_GATEWAY_API_KEY= + +# ------------------------------------------------------------------ +# Resources +# ------------------------------------------------------------------ + +# CPU limits +TDAI_MEMORY_CPU_LIMIT=1.0 +TDAI_MEMORY_CPU_RESERVATION=0.1 + +# Memory limits +TDAI_MEMORY_LIMIT=1G +TDAI_MEMORY_RESERVATION=256M diff --git a/src/tencentdb-agent-memory/README.md b/src/tencentdb-agent-memory/README.md new file mode 100644 index 0000000..5f12d99 --- /dev/null +++ b/src/tencentdb-agent-memory/README.md @@ -0,0 +1,67 @@ +# TencentDB Agent Memory + +[English](./README.md) | [中文](./README.zh.md) + +This service deploys TencentDB Agent Memory, a layered long-term memory system for AI agents built by Tencent Cloud. It gives agents persistent, structured memory across four abstraction levels — conversation → atomic facts → scenes → persona — plus symbolic short-term memory via context offloading. Data persists to an embedded SQLite + sqlite-vec database and local Markdown files. + +The service contains no LLM itself: it consumes an external OpenAI-compatible LLM API, so an API key is required. + +## Services + +- `tencentdb-agent-memory`: The memory Gateway (port 8420), running in standalone mode with an embedded SQLite database. No external database or Redis is required. + +## Quick Start + +```bash +cp .env.example .env +# Set TDAI_LLM_API_KEY in .env (required - the service has no model of its own) +docker compose up -d +``` + +The gateway is an API service, not a web UI. Verify it is running: + +```bash +curl http://localhost:8420/health +``` + +Expected response: `{"status":"ok",...}`. + +## Environment Variables + +| Variable Name | Description | Default Value | +| -------------------------- | --------------------------------------------------------------------------- | ------------------------------- | +| `GLOBAL_REGISTRY` | Global registry prefix for all images | `""` | +| `TDAI_MEMORY_VERSION` | Image version | `1.0.0` | +| `TDAI_LLM_API_KEY` | LLM API key (required, no default; any OpenAI-compatible provider) | `""` | +| `TDAI_LLM_BASE_URL` | Base URL of the OpenAI-compatible LLM API | `https://api.openai.com/v1` | +| `TDAI_LLM_MODEL` | LLM model name | `gpt-4o` | +| `TDAI_LLM_MAX_TOKENS` | Maximum tokens per LLM request | `4096` | +| `TDAI_GATEWAY_API_KEY` | Optional Bearer auth token for the gateway API (empty = open access) | `""` | +| `TDAI_MEMORY_PORT_OVERRIDE`| Host port mapping (maps to gateway port 8420 in the container) | `8420` | +| `TZ` | Timezone | `UTC` | +| `TDAI_MEMORY_CPU_LIMIT` | CPU limit | `1.00` | +| `TDAI_MEMORY_CPU_RESERVATION` | CPU reservation | `0.10` | +| `TDAI_MEMORY_LIMIT` | Memory limit | `1G` | +| `TDAI_MEMORY_RESERVATION` | Memory reservation | `256M` | + +Set `TDAI_LLM_BASE_URL` to your provider, e.g. `https://api.deepseek.com/v1` or `https://api.lkeap.cloud.tencent.com/v1`. + +Please modify the `.env` file as needed for your use case. + +## Storage + +- `tdai_memory_data`: A named volume mounted at `/data/tdai-memory` holding the embedded database and Markdown files: `vectors.db`, `conversations/`, `records/`, `scene_blocks/`, and `persona.md`. + +## Security Notes + +- `TDAI_LLM_API_KEY` is required — the service has no bundled model and cannot function without an LLM API key. +- The gateway API is open by default (no auth). Set `TDAI_GATEWAY_API_KEY` to a random long string when the gateway is exposed to a network. The `/health` endpoint is always open. +- Check the project license before redistribution: the default branch `README.docker.md` states a proprietary Tencent Cloud license while the main branch is MIT. + +## Integration + +TencentDB Agent Memory is designed for integration with agent frameworks, e.g. the OpenClaw plugin and the Hermes provider. + +## License + +This service folder is provided under the repository's license. TencentDB Agent Memory itself — verify its license before redistribution (see Security Notes). diff --git a/src/tencentdb-agent-memory/README.zh.md b/src/tencentdb-agent-memory/README.zh.md new file mode 100644 index 0000000..126da5d --- /dev/null +++ b/src/tencentdb-agent-memory/README.zh.md @@ -0,0 +1,67 @@ +# TencentDB Agent Memory + +[English](./README.md) | [中文](./README.zh.md) + +此服务用于部署腾讯云开源的 TencentDB Agent Memory,一个为 AI 智能体设计的分层长期记忆系统。它为智能体提供跨四个抽象层级的持久化、结构化记忆——对话 → 原子事实 → 场景 → 人设(Persona)——并通过上下文卸载(Context Offloading)提供符号化短期记忆。数据持久化到内置的 SQLite + sqlite-vec 数据库以及本地 Markdown 文件。 + +该服务本身不包含任何 LLM:它需要调用外部 OpenAI 兼容的 LLM API,因此必须提供 API 密钥。 + +## 服务 + +- `tencentdb-agent-memory`:记忆网关(Memory Gateway,端口 8420),以 standalone 模式运行,使用内置 SQLite 数据库,无需外部数据库或 Redis。 + +## 快速开始 + +```bash +cp .env.example .env +# 在 .env 中设置 TDAI_LLM_API_KEY(必填——该服务自身不包含模型) +docker compose up -d +``` + +网关是 API 服务,而不是 Web 界面。通过以下命令验证其运行状态: + +```bash +curl http://localhost:8420/health +``` + +预期响应:`{"status":"ok",...}`。 + +## 环境变量 + +| 变量名 | 说明 | 默认值 | +| ----------------------------- | ---------------------------------------------------------------- | --------------------------------- | +| `GLOBAL_REGISTRY` | 全局镜像仓库前缀 | `""` | +| `TDAI_MEMORY_VERSION` | 镜像版本 | `1.0.0` | +| `TDAI_LLM_API_KEY` | LLM API 密钥(必填,无默认值;任意 OpenAI 兼容的提供商均可) | `""` | +| `TDAI_LLM_BASE_URL` | OpenAI 兼容 LLM API 的基础 URL | `https://api.openai.com/v1` | +| `TDAI_LLM_MODEL` | LLM 模型名称 | `gpt-4o` | +| `TDAI_LLM_MAX_TOKENS` | 每次 LLM 请求的最大 token 数 | `4096` | +| `TDAI_GATEWAY_API_KEY` | 网关 API 的可选 Bearer 认证令牌(留空表示开放访问) | `""` | +| `TDAI_MEMORY_PORT_OVERRIDE` | 主机端口映射(映射到容器内网关端口 8420) | `8420` | +| `TZ` | 时区 | `UTC` | +| `TDAI_MEMORY_CPU_LIMIT` | CPU 限制 | `1.00` | +| `TDAI_MEMORY_CPU_RESERVATION` | CPU 预留 | `0.10` | +| `TDAI_MEMORY_LIMIT` | 内存限制 | `1G` | +| `TDAI_MEMORY_RESERVATION` | 内存预留 | `256M` | + +请将 `TDAI_LLM_BASE_URL` 设置为您的提供商地址,例如 `https://api.deepseek.com/v1` 或 `https://api.lkeap.cloud.tencent.com/v1`。 + +请根据实际需求修改 `.env` 文件。 + +## 存储 + +- `tdai_memory_data`:挂载到 `/data/tdai-memory` 的命名卷,存储内置数据库和 Markdown 文件:`vectors.db`、`conversations/`、`records/`、`scene_blocks/` 和 `persona.md`。 + +## 安全提示 + +- `TDAI_LLM_API_KEY` 为必填项——该服务没有内置模型,没有 LLM API 密钥将无法工作。 +- 网关 API 默认开放(无认证)。当网关暴露到网络时,请将 `TDAI_GATEWAY_API_KEY` 设置为随机长字符串。`/health` 端点始终开放。 +- 再分发前请核查项目许可证:默认分支的 `README.docker.md` 声明为腾讯云专有许可证,而 main 分支为 MIT 许可证。 + +## 集成 + +TencentDB Agent Memory 专为与智能体框架集成而设计,例如 OpenClaw 插件和 Hermes provider。 + +## 许可证 + +本服务目录遵循仓库的许可证。TencentDB Agent Memory 本身——再分发前请核查其许可证(参见安全提示)。 diff --git a/src/tencentdb-agent-memory/docker-compose.yaml b/src/tencentdb-agent-memory/docker-compose.yaml new file mode 100644 index 0000000..b3db945 --- /dev/null +++ b/src/tencentdb-agent-memory/docker-compose.yaml @@ -0,0 +1,43 @@ +x-defaults: &defaults + restart: unless-stopped + logging: + driver: json-file + options: + max-size: 100m + max-file: '3' + +services: + tencentdb-agent-memory: + <<: *defaults + image: ${GLOBAL_REGISTRY:-}agentmemory/memory-core:${TDAI_MEMORY_VERSION:-1.0.0} + ports: + - '${TDAI_MEMORY_PORT_OVERRIDE:-8420}:8420' + volumes: + - tdai_memory_data:/data/tdai-memory + environment: + - TZ=${TZ:-UTC} + - TDAI_DEPLOY_MODE=standalone + - TDAI_GATEWAY_PORT=8420 + - TDAI_LLM_API_KEY=${TDAI_LLM_API_KEY:-} + - TDAI_LLM_BASE_URL=${TDAI_LLM_BASE_URL:-https://api.openai.com/v1} + - TDAI_LLM_MODEL=${TDAI_LLM_MODEL:-gpt-4o} + - TDAI_LLM_MAX_TOKENS=${TDAI_LLM_MAX_TOKENS:-4096} + - TDAI_DATA_DIR=/data/tdai-memory + - TDAI_GATEWAY_API_KEY=${TDAI_GATEWAY_API_KEY:-} + healthcheck: + test: [CMD, curl, -fsS, 'http://127.0.0.1:8420/health'] + interval: 30s + timeout: 5s + retries: 3 + start_period: 15s + deploy: + resources: + limits: + cpus: ${TDAI_MEMORY_CPU_LIMIT:-1.0} + memory: ${TDAI_MEMORY_LIMIT:-1G} + reservations: + cpus: ${TDAI_MEMORY_CPU_RESERVATION:-0.1} + memory: ${TDAI_MEMORY_RESERVATION:-256M} + +volumes: + tdai_memory_data: