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

一句话总结
云端部署的核心思路就一条:只对外暴露一个 HTTPS 端点,管理界面全部藏在后面。
| 对外公开 | 保持私有 |
|---|---|
AI 客户端访问 https://memory.example.com/mcp | 控制台走 SSH 隧道,绑定 127.0.0.1:8090 |
Traefik 监听 80 和 443 | Postgres、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:
新建一个 Cloud Compute 实例:
| 选项 | 推荐配置 |
|---|---|
| 地区 | 选离你最近的机房 |
| 系统镜像 | Ubuntu 24.04 LTS |
| 规格 | Docker + Postgres + Neo4j 要吃内存,建议至少 4 GB 起步 |
| SSH 密钥 | 务必添加 SSH Key,别用密码登录 |
| 防火墙 | 只放行 SSH、HTTP、HTTPS |
防火墙这样配:
| 端口 | 放行来源 | 用途 |
|---|---|---|
22 | 最好只放行你自己的 IP | SSH 管理 |
80 | 所有来源 | Traefik 用来申请 HTTPS 证书 |
443 | 所有来源 | Dense-Mem 的 HTTPS 公开端点 |
这些端口千万不要对外开放:
8080, 8090, 5432, 7474, 7687它们都是内部管理接口和数据库端口,暴露在公网上就是安全隐患。
第二步:把域名指向服务器

你需要一个域名或者子域名,比如:
memory.example.com添加一条 A 记录:
| DNS 字段 | 填写内容 |
|---|---|
| 名称 | memory |
| 类型 | A |
| 值 | Vultr 服务器的公网 IP |
等 DNS 生效后验证一下:
ping memory.example.comping 出来的 IP 是你的 Vultr 地址就可以继续了。
第三步:SSH 登录服务器
在你自己的电脑上:
ssh root@YOUR_SERVER_IP先把系统更新一下:
apt update
apt upgrade -y然后按 Docker 官方文档安装 Docker,完整流程可以参考 Docker 官网的 Ubuntu 教程,这里直接给命令:
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确认安装成功:
docker compose version第四步:下载 Compose 配置文件
创建应用目录:
mkdir -p /opt/dense-mem
cd /opt/dense-mem下载集成了 Traefik 配置的 Compose 文件:
curl -fsSLo docker-compose.yml \
https://raw.githubusercontent.com/markhuangai/dense-mem/main/examples/docker-compose.expert.yml创建 .env 配置文件:
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打开编辑:
nano .env需要改的地方:
memory.example.com换成你自己的域名[email protected]换成你的邮箱- 所有占位的密码和 token 都要换成真正的密钥
your-ai-provider-api-key换成你的 AI 服务商 API Key- 如果不用 OpenAI,
AI_API_URL换成你用的 OpenAI 兼容接口的地址 AI_API_EMBEDDING_MODEL和AI_API_EMBEDDING_DIMENSIONS要对应同一个 Embedding 模型和维度
生成随机密钥可以用这个命令:
openssl rand -base64 32示例用的是 OpenAI 的 text-embedding-3-large,输出 3072 维向量。如果你用 text-embedding-3-small,维度改成 AI_API_EMBEDDING_DIMENSIONS=1536。注意:在存入重要记忆之前就要定好 Embedding 模型,中途换模型或维度意味着已有记忆得全部重新 Embedding。
第五步:启动 Dense-Mem

拉起整套 HTTPS 服务:
docker compose --profile traefik up -d看看容器都跑起来没有:
docker compose ps测试一下公开的 health 端点:
curl https://memory.example.com/health如果返回的 JSON 里状态是 healthy 或 degraded,说明 HTTPS 路由已经通了。单机部署没开 Redis 的话,显示 degraded 是正常的。
第六步:创建团队和 API Key
创建你的第一个共享记忆团队:
docker compose exec server /app/provision-team --name "primary-memory"命令会输出一个 API Key,找个安全的地方存好。
在每台需要连接的设备上设置这个 Key:
export DENSE_MEM_API_KEY="dm_default_prof_..."第七步:让 Claude Code 连上服务器
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 里加上:
[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 就共享同一个记忆库了。
第九步:控制台只走本地访问

控制台用来管理团队、Profile、密钥和安全设置,绝对不能暴露到公网。
Compose 文件里控制台只绑定在服务器的 127.0.0.1:8090。想从自己电脑上访问,走 SSH 隧道:
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 给这些工具加了一层你自己掌控的共享记忆。
试试看,觉得好用就分享出去,顺便给仓库点个星让更多人发现它:
许可
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.
相关文章

5 分钟试用 Dense-Mem 托管演示
一篇快速教程:使用托管的 Dense-Mem 测试实例,把 Claude Code 和 Codex 接到同一份临时记忆,并观察共享上下文如何让 AI 更聪明地工作。
阅读文章
Dense-Mem 快速开始:让 Claude Code 和 Codex 使用同一份记忆
一篇面向初学者的教程:启动本地 Dense-Mem 服务器,创建第一把 memory key,并把 Claude Code 和 Codex 接到同一个共享 AI 记忆大脑。
阅读文章
别再从零开始教每一个 AI
一篇关于 Dense-Mem 的个人反思:哪些问题把我从静态 skills 和过期文件推向动态共享记忆、只读自动化上下文、导入导出,以及受治理的知识图谱。
阅读文章