跳转到主要内容

用 Traefik 在 Vultr 上安全部署 Dense-Mem

一篇非技术读者也能跟上的 walkthrough:在 Vultr 云服务器上启动 Dense-Mem,配置 Traefik、HTTPS、私有控制台访问,以及给个人、家庭或工作 AI 工具使用的共享记忆。

9 分钟阅读
分享:
AI 驱动

AI 驱动 · 每小时限 20 次请求

一台云 VPS 由 HTTPS 边界网关和私有 Dense-Mem 记忆保险库保护
一台云 VPS 由 HTTPS 边界网关和私有 Dense-Mem 记忆保险库保护

快速答案

安全的云端版本使用一个公开 HTTPS 端点,同时把管理界面保持私有。

公开私有
AI 客户端使用 https://memory.example.com/mcp控制台通过 SSH 隧道访问 127.0.0.1:8090
Traefik 对外开放 80443Postgres、Neo4j 和门户不暴露到公网
API 密钥保护记忆访问团队和配置档隔离家庭、个人和工作记忆

本地运行 Dense-Mem 是最容易的起点。把它放到一台小云服务器上,才能让同一份记忆从笔记本、台式机、工作机器和远程 AI 客户端都能访问。

这篇教程会搭建一个适合初学者的安全部署:

你的 AI 客户端 -> https://memory.example.com/mcp -> Traefik -> Dense-Mem

公网只看到 HTTPS Dense-Mem 端点。控制台保持私有。

你要搭建什么

组件职责
Vultr VPS运行 Dense-Mem 的小型云电脑
Docker Compose启动 Dense-Mem、Postgres、Neo4j 和 Traefik
Traefik处理 HTTPS、证书、响应头和公开路由
Dense-Mem保存共享 AI 记忆
控制门户创建和轮换密钥,但保持私有

这个配置适合普通用户、家庭和小团队:你想要一台自己的记忆服务器,但不想从零搭一个平台。

步骤 1:创建 Vultr 服务器

通过推荐链接打开 Vultr:

创建 Vultr 账号或服务器

创建一个新的 Cloud Compute 实例:

设置初学者选择
位置选择离你最近的区域
镜像Ubuntu 24.04 LTS
规格给 Docker、Postgres 和 Neo4j 足够 RAM;第一次建议 4 GB 更稳
SSH 密钥添加 SSH 密钥,不要用密码登录
防火墙只允许 SSH、HTTP 和 HTTPS

防火墙建议:

端口允许来源原因
22最好只允许你的 IPSSH 管理访问
80任何来源让 Traefik 申请 HTTPS 证书
443任何来源公开 Dense-Mem HTTPS 端点

不要把这些端口暴露到公网:

8080, 8090, 5432, 7474, 7687

它们是内部或本地管理/数据库接口。

步骤 2:把域名指向服务器

一个域名路径通过 DNS 指向安全云服务器
一个域名路径通过 DNS 指向安全云服务器

你需要一个域名或子域名,例如:

memory.example.com

创建一条 A 记录:

DNS 字段
名称memory
类型A
你的 Vultr 服务器公网 IP

等待 DNS 生效:

bash
ping memory.example.com

如果 ping 显示你的 Vultr IP,就可以继续。

步骤 3:SSH 到服务器

从你的电脑执行:

bash
ssh root@YOUR_SERVER_IP

更新 Ubuntu:

bash
apt update
apt upgrade -y

按 Docker 官方 Ubuntu 文档安装 Docker。简版命令如下:

bash
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" \
  > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

检查安装:

bash
docker compose version

步骤 4:下载高级 Compose 文件

创建应用目录:

bash
mkdir -p /opt/dense-mem
cd /opt/dense-mem

下载带 Traefik 的 Compose 文件:

bash
curl -fsSLo docker-compose.yml \
  https://raw.githubusercontent.com/markhuangai/dense-mem/main/examples/docker-compose.expert.yml

创建 .env

bash
cat > .env <<'EOF'
POSTGRES_PASSWORD=replace-with-a-long-random-password
NEO4J_PASSWORD=replace-with-a-long-random-password
CONTROL_PORTAL_TOKEN=replace-with-a-long-random-token
AI_API_URL=https://api.openai.com/v1
AI_API_KEY=your-ai-provider-api-key
AI_API_EMBEDDING_MODEL=text-embedding-3-large
AI_API_EMBEDDING_DIMENSIONS=3072

DENSE_MEM_DOMAIN=memory.example.com
[email protected]
CONTROL_PORTAL_BIND=127.0.0.1
CONTROL_PORTAL_PORT=8090
EOF

编辑它:

bash
nano .env

替换这些值:

  • memory.example.com 改成你的真实域名
  • [email protected] 改成你的邮箱
  • 所有占位密码和 token 都换成真实密钥
  • your-ai-provider-api-key 换成你的提供商 API 密钥
  • 如果不用 OpenAI,把 AI_API_URL 换成你的兼容 OpenAI 提供商基础 URL
  • AI_API_EMBEDDING_MODELAI_API_EMBEDDING_DIMENSIONS 要匹配同一个 Embedding 模型

可以用下面命令生成随机密钥:

bash
openssl rand -base64 32

示例使用 OpenAI 的 text-embedding-3-large,返回 3072 维。如果使用 text-embedding-3-small,设置 AI_API_EMBEDDING_DIMENSIONS=1536。在保存重要记忆前先确定 Embedding 模型;后续更换模型或维度,通常需要重建或重新 Embedding 已有记忆数据。

步骤 5:用 Traefik 启动 Dense-Mem

公开 HTTPS 流量先经过安全边界网关,再进入私有 Dense-Mem
公开 HTTPS 流量先经过安全边界网关,再进入私有 Dense-Mem

启动公开 HTTPS 服务栈:

bash
docker compose --profile traefik up -d

检查容器:

bash
docker compose ps

检查公开健康端点:

bash
curl https://memory.example.com/health

如果返回包含 healthydegraded 状态的 JSON,说明公开 HTTPS 路由已经工作。单服务器配置中如果可选 Redis 没启用,degraded 也可能是预期状态。

步骤 6:创建团队和 API 密钥

创建第一份共享记忆团队:

bash
docker compose exec server /app/provision-team --name "primary-memory"

把输出的 API 密钥保存到私密位置。

在任何要连接的机器上设置它:

bash
export DENSE_MEM_API_KEY="dm_default-prof_..."

步骤 7:把 Claude Code 接到公开服务器

bash
claude mcp add --transport http dense-mem https://memory.example.com/mcp \
  --header "Authorization: Bearer $DENSE_MEM_API_KEY"

问 Claude Code:

请记住,这台 Dense-Mem 服务器是我的共享 AI 记忆。

然后开一个新会话,问:

关于我的 Dense-Mem 搭建,你记得什么?

步骤 8:把 Codex 接到同一台服务器

把下面内容加入 ~/.codex/config.toml

toml
[mcp_servers.dense_mem]
url = "https://memory.example.com/mcp"
bearer_token_env_var = "DENSE_MEM_API_KEY"
tool_timeout_sec = 60
enabled = true

重启 Codex。

现在 Claude Code 和 Codex 已经连到同一个记忆大脑。

步骤 9:保持控制门户私有

私有 SSH 隧道通向控制门户,而公网 HTTPS 只到记忆 API
私有 SSH 隧道通向控制门户,而公网 HTTPS 只到记忆 API

控制门户管理团队、配置档、密钥和安全设置。不要公开暴露它。

高级 Compose 文件只把它发布到服务器本机的 127.0.0.1:8090。如果你想从自己的电脑访问,建立 SSH 隧道:

bash
ssh -L 8090:127.0.0.1:8090 root@YOUR_SERVER_IP

然后打开:

http://127.0.0.1:8090/

使用 .env 里的 CONTROL_PORTAL_TOKEN 登录。

和家庭或工作团队共享记忆

Dense-Mem 可以支持多个共享记忆边界。

实际配置
个人一个名为 primary-memory 的团队
家庭一个名为 family-memory 的团队,并用配置档区分成员
工作每个工作组或项目一个团队
自动化当工具只应该搜索、不应该写入记忆时,使用只读配置档密钥

当人们应该共享记忆时,使用同一个团队。当记忆不应该混在一起时,使用不同团队。

这就是产品的设计理念:需要连续性时使用一个记忆大脑,需要隐私时建立清晰边界。

安全清单

邀请别人使用前,先检查:

  • 保持控制门户私有
  • 保持 API 密钥私密
  • 对不应写入记忆的工具使用只读密钥
  • 机器丢失或队友离开时轮换密钥
  • 不要把密码、助记词或私钥存成记忆
  • 如果记忆重要,备份 Docker 卷
  • 记住托管 AI 提供商可能会接收记忆文本,用于 embeddings 和验证

Dense-Mem 让 AI 记忆更持久,但不会替你承担保护敏感信息的责任。

为什么这很重要

最好的 AI 设置不是一个聊天窗口,而是一个连接起来的工作空间。

Claude Code 可以学习你的编码规则。Codex 可以召回同一组规则。家庭助手可以记住旅行偏好。工作团队可以保留上个月的决策,而不是每个迭代周期都重新发现一次。

Dense-Mem 给这些工具一层你自己拥有的共享记忆。

试用它,分享它。如果你希望更多人找到这个项目,可以给代码仓库点一个星:

github.com/markhuangai/dense-mem

许可

Article text © 2026 Mark Huang. Licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) unless otherwise noted. 文章文本可在非商业场景下分享或翻译,但需标注原文 URL。商业使用需事先取得书面许可,并清楚引用原始来源。

代码片段、截图、第三方素材和网站源码可能适用单独条款。

建议署名: Based on "用 Traefik 在 Vultr 上安全部署 Dense-Mem" by Mark Huang, originally published at https://markhuang.ai/zh/blog/secure-dense-mem-vultr-traefik.

订阅更新

Go、AI/LLM 和分布式系统的技术文章,绝不滥发。

评论

正在加载评论...