Supermemory 自托管版如何以非交互方式(Docker/CI)部署并设置 LLM 密钥
【免费下载链接】supermemoryMemory and context engine + app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era.项目地址: https://gitcode.com/GitHub_Trending/su/supermemory
Supermemory 自托管版(self-hosted binary)默认在首次启动时通过交互式向导收集唯一的必填输入——一个 LLM provider 密钥。但在 Docker 容器或 CI 流水线这类没有 TTY 的环境里,向导根本不会出现,服务器也不会停下来等你粘贴密钥。因此非交互部署的正确做法是:先用安装器拿到supermemory-server二进制,再通过环境变量提供 LLM 密钥(以及可选的 embedding 配置),最后直接启动服务并用 Memory API 验证。本文基于仓库内apps/docs/self-hosting/的 quickstart、configuration 与 embeddings 文档,给出这条完整的操作路径。
为什么必须用环境变量而不是向导
文档明确说明:
- 首启向导只在有 TTY 时出现;Docker、CI 或任何非交互部署“没有 TTY 就没有交互式提示”(no interactive prompt without a TTY)。
- 服务器的唯一必填输入是一个 LLM provider 密钥,可以“通过环境变量设置以支持非交互部署”。
- embedding 默认使用本地模型,不需要任何密钥;只有在你想用远程 embedding 时才需要通过环境变量切换。
所以下面这条路径的关键就是:把密钥交给环境变量,其余全部走默认。
第一步:安装 supermemory-server 二进制
安装器会检测操作系统与架构、下载对应二进制并校验。支持的平台:macOS(Apple Silicon 与 Intel)、Linux(x64 与 arm64):
# 三选一 curl -fsSL https://supermemory.ai/install | bash npx supermemory local bunx supermemory local如果需要固定版本(CI 场景下通常更稳妥),可以给安装器传一个明确版本号,而不是latest:
curl -fsSL https://supermemory.ai/install | bash -s -- 0.0.3注意文档的警告:安装器只替换二进制,不升级数据;回滚到旧版本前要先备份数据目录,因为旧版本服务器可能无法理解新版本产生的数据或 schema 变更。
第二步:通过环境变量设置 LLM 密钥(必做)
配置文档给出的 provider 环境变量如下,配置至少一个:
| 变量 | Provider |
|---|---|
OPENAI_API_KEY | OpenAI — 或任何 OpenAI 兼容端点(见下) |
ANTHROPIC_API_KEY | Anthropic |
GEMINI_API_KEY | Google AI Studio(Gemini) |
GROQ_API_KEY | Groq |
WORKERS_AI_API_KEY+CLOUDFLARE_ACCOUNT_ID | Cloudflare Workers AI |
GOOGLE_VERTEX_PROJECT_ID+GOOGLE_VERTEX_LOCATION | GCP Vertex AI |
两条使用规则(均来自 configuration.mdx):
- 同时配置多个 provider 时,使用上面表格中排序靠前的那一个。
- 图片、视频、高保真 PDF 理解需要 Gemini 或 Vertex AI 密钥;纯文本摄取、记忆抽取和搜索用任意 provider 即可。
OpenAI 兼容端点 / 完全离线
OPENAI_API_KEY+OPENAI_BASE_URL这一组合覆盖任何 OpenAI 兼容端点:Ollama、LM Studio、vLLM、llama.cpp server、Together、Fireworks 等。文档给出的 Ollama 示例(sk-...、ollama等位置都需要替换为你自己的值;OPENAI_API_KEY=ollama是文档原样给出的占位写法,本地 runner 不校验它,任意非空字符串即可):
# Ollama 示例 — gpt-oss-20b works great OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=ollama # any non-empty string for local runners OPENAI_MODEL=gpt-oss:20b相关变量与默认值:
| 变量 | 用途 | 默认值 |
|---|---|---|
OPENAI_BASE_URL | OpenAI 兼容端点 URL | OpenAI |
OPENAI_MODEL | 发送到该端点的模型 ID | gpt-5.1 |
OPENAI_FAST_MODEL | 快/轻任务覆盖 | 同OPENAI_MODEL |
OPENAI_TEXT_MODEL | 较重文本任务覆盖 | 同OPENAI_MODEL |
生产级.env的完整示例(来自配置文档,sk-...替换为你的 OpenAI 密钥):
# Persistent data location SUPERMEMORY_DATA_DIR=/var/lib/supermemory # One LLM provider (required for extraction) OPENAI_API_KEY=sk-... # Optional — omit to keep local Xenova/bge-base-en-v1.5 (768d) # SUPERMEMORY_EMBEDDING_PROVIDER=openai # SUPERMEMORY_EMBEDDING_MODEL=text-embedding-3-small # SUPERMEMORY_EMBEDDING_DIMENSIONS=1536文档说明这份配置已经足够支撑完整的摄取、记忆抽取和混合搜索(配合默认本地 embedding)。
第三步(可选):设置 embedding provider
默认情况下向量由本地模型Xenova/bge-base-en-v1.5(768 维)计算,不需要任何 embedding API 密钥。如果你的容器里想改用远程 embedding,或者默认英文模型不满足需求,通过以下环境变量设置:
| 变量 | 用途 | 默认值 |
|---|---|---|
SUPERMEMORY_EMBEDDING_PROVIDER | local、openai、gemini或 OpenAI 兼容远端 | local |
SUPERMEMORY_EMBEDDING_MODEL | 所选 provider 的模型 id | Xenova/bge-base-en-v1.5 |
SUPERMEMORY_EMBEDDING_DIMENSIONS | 向量维度;必须与模型及已存数据匹配 | 768 |
SUPERMEMORY_EMBEDDING_BASE_URL | OpenAI 兼容 embedding API 的 base URL | 未设置 |
文档给出的 OpenAI embedding 示例:
OPENAI_API_KEY=sk-... SUPERMEMORY_EMBEDDING_PROVIDER=openai SUPERMEMORY_EMBEDDING_MODEL=text-embedding-3-small SUPERMEMORY_EMBEDDING_DIMENSIONS=1536两条必须记住的限制(来自 embeddings.mdx):
- 维度不匹配会拒绝启动:配置的维度与已存储数据不一致时,服务器直接 refuse to boot。provider、model、dimensions 要一起设置,并在大批量回填之前定下来。
- 默认本地模型仅支持英文:非英文内容可以摄取成功,但稠密语义召回会很弱;多语言部署应切换到多语言模型(文档示例为
SUPERMEMORY_EMBEDDING_MODEL=Xenova/bge-m3、SUPERMEMORY_EMBEDDING_DIMENSIONS=1024)。
第四步:启动服务器并取回 API 密钥
在环境变量就绪后直接运行:
supermemory-server首次启动会自动完成初始化——内嵌的 Supermemory 图引擎、本地 embedding、凭据生成。文档示例的首启输出(示例结果,具体值以你的环境为准):
┌──────────────────────────────────────────────────┐ │ url http://localhost:6767 │ │ database ./.supermemory │ │ api key sm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │ │ org id xxxxxxxxxxxxxxxxxxxxxx │ └──────────────────────────────────────────────────┘保存这个 API key——它是之后每个请求的 bearer token。默认监听端口是6767(可用PORT或SUPERMEMORY_PORT覆盖),全部状态默认存放在./.supermemory/(可用SUPERMEMORY_DATA_DIR重定向到如/var/lib/supermemory的持久化路径)。容器场景下把数据目录指到持久卷即可,这是文档中给出的可备份/迁移的单一状态目录。
另外注意:安装器写入的 API 密钥存放在~/.supermemory/env,并在每次启动时加载。如果在同一台机器上曾用安装器保存过密钥,它们会自动生效。
验证:写入第一条记忆并搜索
quickstart 文档给出的验证路径是用 Bearer 密钥直接打 API(sm_...替换为首启打印的 API key):
curl http://localhost:6767/v3/documents \ -H "Authorization: Bearer sm_..." \ -H "Content-Type: application/json" \ -d '{ "content": "I am Dhravya. I love building dev tools and I am allergic to peanuts.", "containerTag": "user_dhravya" }'配置文档说明了这里的可预期行为:POST /v3/documents会在毫秒级返回,状态为queued;抽取、向量化、索引在后台队列中按受控节奏执行(默认并发SUPERMEMORY_INGEST_CONCURRENCY= 2)。也就是说“请求返回 queued”本身是正常的,不代表失败。
写入后用它验证检索:
curl http://localhost:6767/v3/search \ -H "Authorization: Bearer sm_..." \ -H "Content-Type: application/json" \ -d '{ "q": "what food should I avoid?", "containerTag": "user_dhravya" }'两个请求都能用你保存的 API key 正常应答,就证明非交互部署链路(环境变量密钥 → 启动 → 认证 → 摄取/检索)已经打通。整个 Memory API——documents、memories、user profiles、spaces、filtering——对本地服务器与托管平台行为一致。
边界与限制
- 没有 TTY 就没有向导:如果你发现容器里进程卡在等待输入,基本可以确认环境变量没生效——服务器在无 TTY 环境下不会提示,缺密钥时的表现以启动日志为准。
- 换 embedding 模型不支持原地进行:不同模型(或不同维度)的向量不可比,必须换新数据目录或全量重新摄取;维度与已存数据不一致时服务器拒绝启动。
- 平台独有能力不在自托管二进制里:Connectors(Google Drive、Notion、Gmail、OneDrive)、托管 MCP 端点、平台调优的抽取管线仅存在于托管平台;代码库里看到的其他环境变量如果是平台专用的,自托管二进制会直接忽略。
- 摄取内存上限默认在启动基线之上1 GB(
SUPERMEMORY_EMBEDDING_RAM_LIMIT),超出后新文档排队等待而非丢弃——CI 中批量导入时若看到吞吐下降,这是文档预期的行为。
完整的环境变量清单、provider 选型表和 embedding 调优项见 Configuration、Providers 与 Embeddings。
【免费下载链接】supermemoryMemory and context engine + app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era.项目地址: https://gitcode.com/GitHub_Trending/su/supermemory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考