Personal Self-Hosted
从头到尾搭建并运行你自己的 Contextify Cloud 服务器。
从零开始部署并运行服务器,有 2 种方式:交给编程智能体配置,或者自己依次完成 4 个手动步骤。无论采用哪种方式,最终都是由你运维同一台服务器:启动服务器、为它配置 HTTPS、让 Contextify 连接到它,再验证搜索和找回功能。
Personal Self-Hosted(个人自托管版)免费供单人使用,让你在自己的硬件上运行 Contextify Cloud 同步服务器。它采用 Functional Source License, Version 1.1, Apache 2.0 Future License(FSL-1.1-Apache-2.0)许可证,源码可用。每个版本发布 2 年后转为 Apache License 2.0 许可;源码已发布在 GitHub 上。
最快的方式
让 AI 帮你配置
你已经在用编程智能体了。把这份运行手册交给它,它会替你部署服务器:在你的 shell 中逐条运行命令,并在关键选择处暂停询问你。所有操作都在你的机器上运行。
把这段提示词粘贴给 AI
把这段提示词复制到 Claude Code、Codex 或任意编程智能体中。它会引导智能体读取一份我们持续更新的运行手册,因此提示词本身可以保持简短、稳定。
Help me set up a self-hosted Contextify server on this machine. Read the runbook at https://contextify.sh/docs/self-hosted/agent-setup.md and follow it exactly: run the commands in my shell, show me what you are doing, generate any secrets locally on this machine, and pause to ask me at every step marked [ASK ME]. When it is done, verify the server is healthy and my Contextify app can search across it.
运行手册位于 contextify.sh/docs/self-hosted/agent-setup.md。如果你的智能体无法获取 URL,请打开该链接,把内容粘贴到对话中。
AI 会做什么,哪些仍由你掌控
- 它在你的终端中运行命令,并逐条展示给你。
- 它在你的机器上生成密钥,只写入服务器的配置文件,不会写进对话。
- 遇到以下事项时,它会先暂停并征求你的意见:确定服务器 URL、对项目外的内容做任何改动,以及创建账号。
- 你可以随时停止。
配置期间不会向任何地方发送数据。服务器运行后,历史记录只会同步到你刚创建的这台服务器,不会同步到其他任何地方。
即将推出:如果你在 Claude Code 或 Codex 中使用 contextify CLI,内置的配置技能(skill)会把这一过程简化为一条命令。它将在未来的 Contextify 版本中发布;在此之前,请使用上面的提示词。
自己动手
开始之前
想手动运行,或者想确切了解智能体会做什么?下面就是同样的 4 个步骤,从头到尾。
一台由你运维的机器
一台安装了 Docker 的 Mac mini、Linux 主机或私有 tailnet 主机。网络中一台闲置的机器就够了;整个链路中没有任何 Contextify 基础设施。
Docker
Docker 及 Compose v2(docker compose)。这套服务栈会在本地构建 API 镜像,并同时运行 PostgreSQL。
公开源码
contextify-cloud-self-hosted 仓库包含你要运行的 Docker 服务栈。
先确定服务器的 URL。各台机器访问服务器所用的地址会固化到服务器配置及其 TLS 证书中,所以请在编写任何配置之前选定它。Tailscale HTTPS 主机名(your-host.your-tailnet.ts.net)是最简单的选择:它提供稳定的名称和有效的证书,而且不会向公共互联网暴露任何内容。你也可以使用 LAN 主机名,搭配你自己的证书。下面的步骤中凡是要求填写服务器 URL 的地方,都使用这个 URL。
第 1 步:运行服务器
克隆公开源码,并根据示例创建环境文件:
git clone https://github.com/PeterPym/contextify-cloud-self-hosted.git
cd contextify-cloud-self-hosted
cp .env.example .env
在 .env 中填写密钥和 URL
在 shell 中生成 3 个机密值,并把每个值复制到 .env 中。不要把 $(...) 命令粘贴进文件:Docker Compose 按字面读取 .env,不会执行命令,所以一行 $(openssl ...) 会原样成为你的实际密钥。
openssl rand -hex 32 # copy into API_SECRET_KEY
openssl rand -hex 20 # copy into DB_PASSWORD
openssl rand -hex 32 # copy into CONTEXTIFY_SELF_HOSTED_SETUP_TOKEN
然后编辑 .env,填好以下各项:
| 变量 | 操作 |
|---|---|
API_SECRET_KEY |
把自带的 dev-secret-change-me 替换为你生成的 32 字节十六进制值。使用默认值时,服务器会拒绝启动。 |
DB_PASSWORD |
把默认的 contextify 替换为你生成的 20 字节十六进制值。请在首次启动之前设置(见下方警告)。 |
CONTEXTIFY_SELF_HOSTED_SETUP_TOKEN |
添加这一行。.env.example 中没有它,而缺少它服务栈就无法启动。它控制对一次性所有者配置页面的访问。 |
ALLOWED_ORIGINS |
把示例值整个替换为你的服务器 URL。默认值包含你不需要的地址。 |
EMAIL_BASE_URL, INVITATION_BASE_URL |
把两者都从 localhost 默认值改为你的服务器 URL。 |
SELF_HOSTED |
保持为 true。 |
请在首次启动之前设置好 DB_PASSWORD。PostgreSQL 只会在首次创建数据卷时应用该密码。如果你先用默认值启动服务栈,之后再修改 DB_PASSWORD,API 将无法再连接数据库。事后再改,就意味着要重置数据库卷。
这个 Compose 文件会忽略 .env.example 中的 DATABASE_URL 这一行,并根据 DB_PASSWORD 自行构建连接字符串,所以你无需编辑它。登录使用密码,因此邮件服务商是可选的:将 RESEND_API_KEY 留空,认证邮件会写入服务器日志,而不是发送出去。
启动服务栈
docker compose -f docker-compose.selfhosted.yml up -d --build
首次运行会构建 API 镜像,在小型机器上需要几分钟。用 docker compose -f docker-compose.selfhosted.yml ps 查看进度。API 默认绑定到回环地址(127.0.0.1:8443);第 2 步会在它前面加上 HTTPS。
确认服务器状态正常
curl -s http://127.0.0.1:8443/api/v1/health
状态正常的自托管服务器会返回:
{"status": "ok", "self_hosted": true}
所有者账号在第 2 步创建,届时真实主机名和 HTTPS 已经就绪,这样配置链接会指向各台机器实际使用的地址。
第 2 步:保护服务器
API 监听一个回环端口;你通过稳定的主机名和匹配的 TLS 证书,以 HTTPS 访问它。推荐方式是 Tailscale HTTPS:它在回环 API 端口前加上 HTTPS,使用只在你的私有 tailnet 内可达的 .ts.net 主机名,因此服务器永远不会暴露到公共互联网。证书所证明的主机名,就是你在 Contextify 中配置的主机名。用你自己的反向代理公开暴露服务器属于高级选项,TLS、认证和限流加固都由你负责;除非有明确的理由,否则请保持私有。
让配置与最终 URL 保持一致
HTTPS 就位后,确认服务器的配置与这个源(origin)完全一致:
-
检查 URL 变量
确认
.env中的ALLOWED_ORIGINS、EMAIL_BASE_URL和INVITATION_BASE_URL都与最终的 HTTPS 源一致。 -
开启安全 Cookie
在
.env中设置FORCE_SECURE_COOKIES=true。示例文件中它的值为false,用于本地 HTTP 验证。 -
应用更改
重新运行
docker compose -f docker-compose.selfhosted.yml up -d,让容器读取更新后的环境变量。
创建所有者账号
Personal Self-Hosted 是单用户方案;第一个账号就是服务器的所有者。请通过实际使用的 HTTPS 主机名创建该账号,且只创建一次。你可以在浏览器中打开一次性配置页面:
https://your-server.example.ts.net/setup?token=YOUR_SETUP_TOKEN
或者,对于无图形界面的服务器,从命令行创建所有者:
docker compose -f docker-compose.selfhosted.yml exec api \
python -m contextify_cloud create-admin --email you@example.com
配置页面只在尚无所有者时可用。令牌错误或缺失会返回 404;所有者创建后,该页面返回 410 并停止工作。配置表单上的工作空间名称字段只是这台单用户服务器的一个标签。请像对待密码一样对待配置令牌:它会出现在 URL 和 shell 历史中,所有者账号创建后就会失效。
第 3 步:让 Contextify 指向服务器
服务器运行并可访问后,连接你的机器。使用服务器 URL,以及在仪表盘中创建的、具备同步权限的 API 密钥。
Mac 应用
打开“Settings → Cloud”(云端设置页),选择“Contextify Cloud Self-Hosted”。输入服务器 URL(即 TLS 证书对应的主机名),然后粘贴具备同步权限的 API 密钥。
Linux 或 CLI
运行 contextify cloud setup --url https://your-server.example.ts.net,然后运行 contextify cloud status --json 和 contextify cloud sync。
如果服务器只能在 VPN 或 tailnet 内访问,请在该网络中的设备上运行连接命令。
第 4 步:验证搜索和找回
在一台已连接的机器上,确认整个往返流程端到端正常。
-
确认同步
运行
contextify cloud status --json,检查最近的项目是否已同步。你也可以在服务器 URL 打开只读仪表盘。 -
搜索历史记录
在 Mac 应用或仪表盘中,搜索一个你确定出现在过往会话中的词。结果来自你运维的服务器。
-
在 AI 助手中找回
用 Total Recall(跨会话历史检索)把过去的决策、修复或调试会话带入当前工作:在 Claude Code 中使用
/total-recall,在 Codex 中使用$total-recall。
刚连接,搜索却是空的?应用会先为本地历史记录建立索引,然后再同步。首次处理大量数据可能需要一些时间。阅读导入与同步说明,了解 Cloud 完成同步前会发生什么。
继续阅读
最后更新:2026 年 7 月 10 日