跳转到主要内容

用 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 Key 控制记忆访问权限用 Team 和 Profile 隔离家庭、个人、工作记忆

本地跑 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 记忆
控制台管理密钥和团队,但只对内开放

这套方案适合个人、家庭或小团队——想要一台自己的记忆服务器,又不想从零搭平台。

第一步:创建 Vultr 服务器

通过推荐链接进入 Vultr:

注册 Vultr 或创建服务器

新建一个 Cloud Compute 实例:

选项推荐配置
地区选离你最近的机房
系统镜像Ubuntu 24.04 LTS
规格Docker + Postgres + Neo4j 要吃内存,建议至少 4 GB 起步
SSH 密钥务必添加 SSH Key,别用密码登录
防火墙只放行 SSH、HTTP、HTTPS

防火墙这样配:

端口放行来源用途
22最好只放行你自己的 IPSSH 管理
80所有来源Traefik 用来申请 HTTPS 证书
443所有来源Dense-Mem 的 HTTPS 公开端点

这些端口千万不要对外开放:

8080, 8090, 5432, 7474, 7687

它们都是内部管理接口和数据库端口,暴露在公网上就是安全隐患。

第二步:把域名指向服务器

域名通过 DNS 解析指向云服务器
域名通过 DNS 解析指向云服务器

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

memory.example.com

添加一条 A 记录:

DNS 字段填写内容
名称memory
类型A
Vultr 服务器的公网 IP

等 DNS 生效后验证一下:

bash
ping memory.example.com

ping 出来的 IP 是你的 Vultr 地址就可以继续了。

第三步:SSH 登录服务器

在你自己的电脑上:

bash
ssh root@YOUR_SERVER_IP

先把系统更新一下:

bash
apt update
apt upgrade -y

然后按 Docker 官方文档安装 Docker,完整流程可以参考 Docker 官网的 Ubuntu 教程,这里直接给命令:

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

第四步:下载 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 换成你的 AI 服务商 API Key
  • 如果不用 OpenAI,AI_API_URL 换成你用的 OpenAI 兼容接口的地址
  • 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。

第五步:启动 Dense-Mem

公网 HTTPS 流量经过 Traefik 边缘网关后到达后端的 Dense-Mem
公网 HTTPS 流量经过 Traefik 边缘网关后到达后端的 Dense-Mem

拉起整套 HTTPS 服务:

bash
docker compose --profile traefik up -d

看看容器都跑起来没有:

bash
docker compose ps

测试一下公开的 health 端点:

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

如果返回的 JSON 里状态是 healthydegraded,说明 HTTPS 路由已经通了。单机部署没开 Redis 的话,显示 degraded 是正常的。

第六步:创建团队和 API Key

创建你的第一个共享记忆团队:

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

命令会输出一个 API Key,找个安全的地方存好。

在每台需要连接的设备上设置这个 Key:

bash
export DENSE_MEM_API_KEY="dm_default_prof_..."

第七步:让 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 部署,你还记得什么?

第八步:把 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 就共享同一个记忆库了。

第九步:控制台只走本地访问

通过 SSH 隧道本地访问控制台,公网只能到达记忆 API
通过 SSH 隧道本地访问控制台,公网只能到达记忆 API

控制台用来管理团队、Profile、密钥和安全设置,绝对不能暴露到公网。

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 团队,成员用不同 Profile 区分
工作每个工作组或项目单独一个团队
自动化工具只需要查不需要写的工具,给只读 Profile 的 Key

需要共享记忆就放同一个团队,不想混在一起就拆成不同团队。

这就是 Dense-Mem 的设计思路:要连贯性就给一个记忆库,要隐私就划清边界。

安全检查清单

邀请别人用之前,先过一遍这些:

  • 控制台不要暴露到公网
  • API Key 保管好,别泄露
  • 只读工具给只读 Key
  • 设备丢了或有人退出团队,及时轮换 Key
  • 不要把密码、助记词、私钥这类东西存进记忆
  • 记忆重要的话,记得备份 Docker Volume
  • 用的 AI 服务商可能会收到记忆文本来做 Embedding 和校验,心里要有数

Dense-Mem 让 AI 记忆更持久,但保护敏感信息的责任还是在你自己身上。

为什么要这么做

最好的 AI 工作流不是开一个聊天窗口,而是把各个工具连起来。

Claude Code 可以记住你的编码规范,Codex 也能调用同样的规则。家庭助手记得旅行偏好,工作团队能找回上个月的决策,而不是每个 Sprint 都重新讨论一遍。

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.