mem9 自托管部署完全教程:mnemo-server + TiDB 从零到生产环境的 6 个步骤(附 Docker 与全量环境变量说明)
人工智能AI 应用Agent 记忆AI AgentRAG后端前端dsh-plugin【免费下载链接】mem9Unlimited memory for OpenClaw项目地址https://gitcode.com/gh_mirrors/me/mem9点击查看免费下载mem9 是一个为 AI Agent 提供持久化记忆的开源项目本教程带你从零开始自托管部署 mem9 的记忆服务端mnemo-server连接 TiDB 作为存储后端完成 schema 初始化、构建、Docker 打包、环境变量配置与生产上线验证全程附完整命令。一、先搞懂mem9 自托管架构长什么样在动手之前花 1 分钟理解架构能帮你少走 90% 的弯路。mem9 的核心思想是Agent 插件保持轻量无状态所有存储、检索、写入、策略逻辑都收敛到 mnemo-server 这一层。OpenClaw、Claude Code、OpenCode、Codex 等运行时统一通过 REST API 访问同一个记忆服务架构设计详见 docs/DESIGN.md。自托管时涉及两层数据库这是新手最容易混淆的点层作用对应配置控制面Control Plane存放租户tenant注册信息、Space Chain、webhook 等MNEMO_DSN指向的数据库租户库Tenant DB每个 Space 独立的记忆数据 向量列 全文索引由租户库连接串记录在控制面里也就是说MNEMO_DSN不是记忆库本身而是管租户的库。服务端的完整请求链路为handler → service → repository源码组织见 server/AGENTS.md。mnemo-server 支持三种存储后端通过MNEMO_DB_BACKEND切换其中tidb是默认值且功能最全支持服务端自动 embedding、原生向量检索、全文检索tidb默认推荐生产使用postgres走高级手动 bootstrap 路径db9类 TiDB 的兼容后端二、环境准备3 样东西缺一不可开始部署前确认你手上有Go 1.24构建用依赖清单见 server/go.mod与make一个 TiDB 兼容数据库可以是 TiDB Serverless 实例、TiDB Cloud Starter或自建 TiDB。DSN 格式为 MySQL 风格连接串Docker可选用于容器化部署 如果你只想先体验而不折腾基础设施可以先用托管 API自托管时只需把MEM9_API_URL换成自己的服务地址插件代码不用改一行。三、一键构建与首次启动步骤 1获取代码并构建git clone https://gitcode.com/gh_mirrors/me/mem9 cd mem9 make build # 产出 server/bin/mnemo-server静态二进制CGO_ENABLED0make build的目标定义在 Makefile它会以GOOS/GOARCH无关的方式产出可执行文件。步骤 2初始化控制面 schema首次启动前必须在MNEMO_DSN指向的数据库中执行控制面建表脚本不同后端对应不同文件TiDBserver/schema.sqlPostgreSQLserver/schema_pg.sqldb9server/schema_db9.sqlmysql -h host -P 4000 -u user -p server/schema.sql该脚本会创建tenants、tenant_activity、space_chains等表是整个自托管的地基。步骤 3启动 mnemo-server最小运行配置只需要一个变量MNEMO_DSNcd server MNEMO_DSNuser:passtcp(host:4000)/mnemos?parseTimetrue ./bin/mnemo-server服务默认监听8080端口。启动后日志为 JSON 格式会依次打印database connected、embedding配置状态、starting mnemo server等信息配置解析逻辑见 server/internal/config/config.go入口逻辑见 server/cmd/mnemo-server/main.go。本地开发可以用热重载模式MNEMO_DSNuser:passtcp(host:4000)/mnemos?parseTimetrue make dev步骤 4验证服务服务内置健康检查端点curl http://localhost:8080/healthz更完整的端到端验证可以直接跑仓库自带的冒烟测试脚本覆盖租户创建、写入、检索、更新、删除全流程MNEMO_BASEhttp://localhost:8080 bash e2e/api-smoke-test.sh脚本说明见 e2e/api-smoke-test.sh。全部 PASS 即代表 mnemo-server TiDB 链路完全打通。四、Docker 部署两条命令完成容器化mem9 的 Docker 流程是先编译、后打包make docker会先执行build-linux交叉编译出 Linux amd64 二进制再把它 COPY 进一个极简的alpine:3.19镜像只加ca-certificates最终镜像体积非常小。镜像定义见 server/Dockerfile。# 构建并打上 local/mnemo-server:dev 标签 make docker REGISTRYlocal COMMITdev # 运行 docker run -d \ -e MNEMO_DSNuser:passtcp(host:4000)/mnemos?parseTimetrue \ -e MNEMO_DB_BACKENDtidb \ -p 8080:8080 \ local/mnemo-server:dev生产建议用${REGISTRY}/mnemo-server:${COMMIT}的命名方式按 commit 打标签方便灰度和回滚。五、全量环境变量说明分类速查表所有配置均通过环境变量注入唯一必填项是MNEMO_DSN其余按需开启。以下按用途分类整理完整默认值以 server/internal/config/config.go 为准。5.1 核心服务变量必填默认值说明MNEMO_DSN✅—控制面数据库连接串MNEMO_PORT❌8080HTTP 监听端口MNEMO_DB_BACKEND❌tidb存储后端tidb/postgres/db9MNEMO_ENV❌development环境标识影响默认 CORS 白名单生产设为productionMNEMO_CORS_ALLOWED_ORIGINS❌按环境逗号分隔的 CORS 来源覆盖MNEMO_ENV默认值MNEMO_RATE_LIMIT❌100每 IP 每秒请求数MNEMO_RATE_BURST❌200限流突发容量MNEMO_UPLOAD_DIR❌./uploads上传文件存储目录MNEMO_WORKER_CONCURRENCY❌5异步上传导入的并行 worker 数MNEMO_UTM_ENABLED❌false启用 UTM 归因记录需tenant_utm表存在5.2 Embedding 与智能导入Ingest这一组决定混合检索是否可用。什么都不配也不会报错——服务会降级为纯关键词检索。变量必填默认值说明MNEMO_EMBED_AUTO_MODEL❌—TiDB/db9 服务端EMBED_TEXT()模型如tidbcloud_free/cohere/embed-multilingual-v3设置后优先于客户端 embeddingMNEMO_EMBED_AUTO_DIMS❌1024服务端向量维度Cohere Embed v3 模型强制要求1024MNEMO_EMBED_API_KEY❌—客户端 embedding 提供方 API KeyMNEMO_EMBED_BASE_URL❌OpenAI 地址自定义 OpenAI 兼容 embedding 端点可指向本地模型MNEMO_EMBED_MODEL❌text-embedding-3-small客户端 embedding 模型名MNEMO_EMBED_DIMS❌1536客户端向量维度MNEMO_LLM_API_KEY❌—LLM Key不设置则 smart ingest 退化为 raw 导入MNEMO_LLM_BASE_URL❌OpenAI 地址自定义 OpenAI 兼容 chat 端点MNEMO_LLM_MODEL❌gpt-4o-mini智能导入使用的 LLMMNEMO_LLM_TEMPERATURE❌0.1LLM 温度MNEMO_INGEST_MODE❌smart导入模式smartLLM 抽取事实或rawMNEMO_FTS_ENABLED❌falseTiDB 全文检索开关仅在集群支持 FTS 时开启5.3 租户供给与连接池Provisioningmnemo-server 对 TiDB 后端支持三种租户供给方式这是自托管时最核心的运营决策方式触发条件特点TiDB Zero 自动供给默认开启MNEMO_TIDB_ZERO_ENABLEDtruetidb后端新 Space 自动创建独立租户库零运维TiDB Cloud PoolMNEMO_TIDB_ZERO_ENABLEDfalse且配置了MNEMO_TIDBCLOUD_API_KEY/MNEMO_TIDBCLOUD_API_SECRET从 Serverless 资源池接管集群适合团队级部署手动 Bootstrap不配置任何供给器使用控制面中已存在的租户记录postgres/db9后端必须走这条路变量必填默认值说明MNEMO_TIDB_ZERO_ENABLED❌true开启 TiDB Zero 自动供给优先级最高MNEMO_TIDB_ZERO_API_URL❌TiDB Zero 地址自定义 Zero API 入口MNEMO_TIDBCLOUD_API_URL❌Serverless 地址自定义 Cloud Pool API 入口MNEMO_TIDBCLOUD_POOL_ID❌2Cloud Pool 资源池 IDMNEMO_TIDBCLOUD_API_KEY/MNEMO_TIDBCLOUD_API_SECRET❌—Cloud Pool 凭据digest 认证MNEMO_TENANT_POOL_MAX_IDLE❌5进程内租户库空闲连接上限MNEMO_TENANT_POOL_MAX_OPEN❌10单租户库最大打开连接数MNEMO_TENANT_POOL_CONNECT_TIMEOUT❌3s冷连接 ping/打开超时MNEMO_TENANT_POOL_IDLE_TIMEOUT❌10m租户库句柄空闲回收时间MNEMO_TENANT_POOL_TOTAL_LIMIT❌200全进程租户库句柄总量上限5.4 安全加密⚠️ 一次性决策变量必填默认值说明MNEMO_ENCRYPT_TYPE❌plain租户库密码加密方式plain/md5/kmsMNEMO_ENCRYPT_KEY❌—md5模式的密钥或kms模式的 KMS Key ID⚠️重要警告MNEMO_ENCRYPT_TYPE是一次性部署决策。租户创建后再切换加密方式会导致所有存量租户请求返回 HTTP 500旧密码无法用新方案解密。生产环境建议第一天就选好KMS 模式需要额外配置 AWS 凭据AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION。5.5 计费与用量按需MeteringAPI 用量上报MNEMO_METERING_ENABLEDtrueMNEMO_METERING_URL支持s3://、http(s)://刷新间隔MNEMO_METERING_FLUSH_INTERVAL默认10sRuntime Usage配额管控MNEMO_RUNTIME_USAGE_ENABLEDtrue时必须同时提供MNEMO_RUNTIME_USAGE_BASE_URL与MNEMO_RUNTIME_USAGE_INTERNAL_SECRET否则服务拒绝启动以上默认全部关闭纯自托管场景可以先不配置。六、生产环境部署清单 ✅检查项操作环境标识设置MNEMO_ENVproductionCORS 默认收紧为https://mem9.ai需自定义时用MNEMO_CORS_ALLOWED_ORIGINS加密方式上线前确定MNEMO_ENCRYPT_TYPE之后不再变更供给方式明确选择 Zero / Cloud Pool / 手动 Bootstrap 三者之一限流按业务调整MNEMO_RATE_LIMIT/MNEMO_RATE_BURST向量能力确认 embedding 方案服务端MNEMO_EMBED_AUTO_MODEL或客户端MNEMO_EMBED_*已生效否则只有关键词检索优雅停机内置 SIGTERM 处理先停 worker、webhook再关 HTTP可直接对接容器编排健康检查将GET /healthz接入你的监控与负载均衡端到端验证上线后跑MNEMO_BASE你的域名 bash e2e/api-smoke-test.sh全量回归服务启动后客户端插件只需两个环境变量即可接入你的私有记忆服务export MEM9_API_URLhttp://你的服务器:8080 export MEM9_API_KEYprovisioning 流程返回的 mem9 API key七、常见问题 FAQQ1忘了配置 embedding服务会挂吗不会。日志会打印no embedding configured, keyword-only search active检索自动降级为关键词模式后续补配置即可。Q2MNEMO_DSN和租户库是什么关系MNEMO_DSN只连控制面存租户注册表。每个 Space 的实际记忆数据存在各自独立的租户库中由供给器自动创建或手动写入。Q3postgres 后端能用 TiDB Zero 自动供给吗不能。TiDB Zero 供给仅支持tidb后端postgres/db9必须使用手动 Bootstrap 路径控制面中需已存在 active 租户记录。Q4如何验证部署是对的以 e2e/api-smoke-test.sh 全绿为准——它覆盖了健康检查、租户创建、消息导入、内容导入、按 query/tag 检索、按 ID 读写删等 12 项检查。写在最后mem9 的自托管比想象中简单schema 初始化 →make build→ 一个MNEMO_DSN环境变量 → 启动核心路径不到 5 分钟。真正的复杂度在运营层——供给方式、embedding 方案、加密策略的一次性选择。按上面的清单逐项确认你就能把 mnemo-server 稳定地跑在生产环境给整个 Agent 团队提供永不失忆的共享记忆。 延伸阅读服务端模块导航server/AGENTS.md总体设计Direct vs Server 模式docs/DESIGN.md控制面建表脚本server/schema.sql端到端测试脚本e2e/api-smoke-test.sh赞分享人工智能AI 应用Agent 记忆AI AgentRAG后端前端dsh-plugin【免费下载链接】mem9Unlimited memory for OpenClaw项目地址https://gitcode.com/gh_mirrors/me/mem9点击查看免费下载相关推荐CryptPad安装完全教程从Docker到生产环境的详细部署步骤CryptPad安装完全教程从Docker到生产环境的详细部署步骤 CryptPad是一款开源的端到端加密协作办公套件为团队提供安全、私密的在线协作环境。无协同办公后端前端密码学解决Windows游戏自动化输入难题PyDirectInput的技术实现与应用实践解决Windows游戏自动化输入难题PyDirectInput的技术实现与应用实践 在Windows平台上进行自动化测试或游戏脚本开发时许多开发者会遇到一个MCSManager Docker 容器化部署完全教程从零到生产环境MCSManager Docker 容器化部署完全教程从零到生产环境 想要快速部署和管理多个游戏服务器MCSManager Docker 容器化部署是您的终后端前端运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

约束感知强化学习实战:SAC-Lagrange在微电网储能调度中的应用

约束感知强化学习实战:SAC-Lagrange在微电网储能调度中的应用

做能源系统优化调度这件事,真正难的从来不是把算法刷到某个测试集上跑得好看,而是你给出的每一组动作,在线下仿真里漂亮,一到真实场景就被各种“硬约束”锤得抬不起头。这是我折腾过好几个微电网调度项目后的真实感受:当 SOC 越限、联络线功率越界、备用容量不够这些条件同时压…

2026/10/14 15:24:19 阅读更多 →
varlet Table 表格组件完全指南:从基本表格、弱背景色到固定表头的实现与定制

varlet Table 表格组件完全指南:从基本表格、弱背景色到固定表头的实现与定制

UI组件前端 【免费下载链接】varlet A Vue3 component library based on Material Design 2 and 3, supporting mobile and desktop. 项目地址: https://gitcode.com/gh_mirrors/va/varlet 点击查看 免费下载 本文围绕 varlet(基于 Material Design 2/3…

2026/10/14 15:23:18 阅读更多 →
Unity显示Office文档:三大方案选型与实战避坑指南

Unity显示Office文档:三大方案选型与实战避坑指南

简介:面向需要在Unity工程中展示Office文档与PDF文件的开发者,这份资源聚焦安卓平台的实现难点,提供了一套完整的技术参考。压缩包共2000个文件,包含C#脚本、Unity场景、DLL插件、XML/JSON配置、Markdown与TXT说明文档&#xff0c…

2026/10/14 15:23:18 阅读更多 →

最新新闻

电源硬件设计知识库:三层权威架构与自动化Agent实践

电源硬件设计知识库:三层权威架构与自动化Agent实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:11 阅读更多 →
模型压缩四大路线实战:剪枝、量化、蒸馏与AutoML选型指南

模型压缩四大路线实战:剪枝、量化、蒸馏与AutoML选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:11 阅读更多 →
组合数与逆元全解析:从扔硬币概率题到竞赛实战

组合数与逆元全解析:从扔硬币概率题到竞赛实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:10 阅读更多 →
Windows 10家庭版中文用户名修改:避开两个隐蔽坑的完整指南

Windows 10家庭版中文用户名修改:避开两个隐蔽坑的完整指南

1. 为什么一个中文用户名能把开发环境搅得天翻地覆很多人第一次意识到C:\Users\用户名里那个中文名是个麻烦,往往不是在装系统的时候,而是在某个工具突然报错、某个依赖死活装不上、某个脚本莫名其妙找不到路径的时候。我这次动手改,起因也很…

2026/10/14 20:02:10 阅读更多 →
腾讯云一句话识别实战:从接口调用到生产环境避坑指南

腾讯云一句话识别实战:从接口调用到生产环境避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:10 阅读更多 →
Kafka日志异常清理导致Broker频繁崩溃的根因与修复

Kafka日志异常清理导致Broker频繁崩溃的根因与修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:01:10 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →