拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker部署OpenDots完整指南:3个compose文件和2个随机密钥搭建生产级AI同事环境

Docker部署OpenDots完整指南:3个compose文件和2个随机密钥搭建生产级AI同事环境

Docker部署OpenDots完整指南:3个compose文件和2个随机密钥搭建生产级AI同事环境

【免费下载链接】OpenDotsYour always-on AI coworkers that move between text, calls, and Slack.项目地址: https://gitcode.com/gh_mirrors/op/OpenDots

OpenDots 是一款常驻在线的开源 AI 同事(AI coworker)模板,让每个 AI Agent(称为 Dot)拥有独立的工作空间、浏览器和记忆,可在文本聊天、语音通话和 Slack 之间无缝切换。本文带你用 Docker 部署 OpenDots,只需理解3 个 compose 文件和2 个随机密钥,即可搭出一套带容器隔离、数据持久化的生产级 AI Agent 环境。

OpenDots 是一个可完全自托管的模板,而非托管产品:你运行应用并配置自己的模型与对话服务。

OpenDots 是什么:你的 AI 同事团队

在动手之前,先花 30 秒了解你要部署的东西:

  • Spaces:文档空间。AI 同事产出的草稿经你批准后,会保存为可编辑的页面,形成可搜索的知识库。
  • Specialist Dots:每个 Dot 是一个有名字、角色和权限的 AI 同事,比如研究员、写作者。
  • Dot 专属电脑:每个 Dot 可以拥有一台自己的容器化"电脑",含独立浏览器配置文件、工作区文件和终端,文件在重启后依然保留。

一个典型的 Spaces 协作流程是:向 AI 同事提问 → 它浏览网页并起草内容 → 你审核批准 → 草稿变成可编辑的页面:

3个compose文件分别负责什么?

OpenDots 仓库根目录提供了三个 Docker Compose 文件,分工非常清晰:

文件作用启动的服务
compose.yml核心应用app(Web + API,端口 4310)+browser(只读浏览器服务,端口 4311,内部网络)
compose.computers.yml给 Dot 配电脑computer-image(构建目标)+computer-supervisor(监督者,端口 4312)
compose.computers-app.yml全容器化叠加层让app通过服务 DNS 直连监督者,无需宿主端口

三个文件的设计逻辑:

  1. compose.yml是"必选项"。app服务基于 Dockerfile 的app阶段构建(Node.js 24 生产镜像,以非 root 用户运行),数据存入opendots-data命名卷,重启不丢数据。浏览器服务则刻意做了加固:只读文件系统、tmpfs 临时目录、丢弃所有能力(cap_drop: ALL)、no-new-privileges。
  2. compose.computers.yml是"进阶项"。监督者(supervisor)会为每个 Dot 动态创建一台独立电脑容器,文件和浏览器配置文件各用独立命名卷持久化。注意:只有监督者挂载 Docker socket,Web 应用和 Dot 的电脑都拿不到它——这是有意的最小权限设计。
  3. compose.computers-app.yml是"叠加层"(overlay)。当你的应用也跑在容器里时,它把应用接入computer-control内部网络,并移除宿主端口。叠加层必须最后加载。

2个随机密钥:安全部署的底线

官方文档 docs/SETUP.md 明确要求:在.env中为OWNER_TOKEN和BROWSER_SECRET设置不同的、至少 24 位的随机密钥。compose.yml 中带有${VAR:?...}语法,密钥缺失时容器会直接拒绝启动,从机制上杜绝裸奔。

变量作用要求
OWNER_TOKEN应用访问令牌,外部绑定(如 Slack)必需≥24 位随机字符串
BROWSER_SECRET应用与浏览器服务之间的共享密钥≥24 位随机字符串,与上一条不同
INTELLIGENCE_API_KEY/OPENAI_API_KEY等对话持久化与模型服务的凭据只保存在服务器端.env,切勿提交

生成随机密钥的推荐方式:

openssl rand -hex 32

如果还要启用"Dot 电脑"功能,则额外增加两把随机密钥:COMPUTER_SUPERVISOR_TOKEN(授权生命周期操作)和COMPUTER_TOKEN(主密钥,应用会为每个 Dot 派生出独立的子凭据,主密钥本身从不下发到任何电脑容器)。两把必须不同,详细说明见 docs/COMPUTERS.md。

一键启动步骤

1. 获取代码并配置 .env

git clone https://gitcode.com/gh_mirrors/op/OpenDots cd OpenDots cp .env.example .env

编辑.env,至少填入OWNER_TOKEN、BROWSER_SECRET,以及你的模型凭据(OPENAI_API_KEY、OPENAI_MODEL)和对话服务凭据(INTELLIGENCE_API_KEY)。完整变量清单见 docs/SETUP.md。

2. 启动核心应用

docker compose up --build -d

然后打开http://localhost:4310即可。注意app的端口只绑定回环地址(127.0.0.1),浏览器服务不发布任何宿主端口——这是模板内置的安全边界。

3. 停服务但保留数据

docker compose down

数据在opendots-data卷里,随时可以再up恢复。

4.(进阶)启动全容器化 + Dot 电脑

如果希望应用、浏览器、监督者全部跑在容器里,按顺序加载三个文件:

docker compose -f compose.yml -f compose.computers.yml -f compose.computers-app.yml build computer-image computer-supervisor app browser docker compose -f compose.yml -f compose.computers.yml -f compose.computers-app.yml up -d app browser computer-supervisor

启动后在 Web 界面打开某个 Dot 的Computer面板,启用所需能力并点击 Start,它就有了专属的浏览器、文件系统和终端。

生产环境部署检查清单

  • 🔒HTTPS 反向代理:远程托管时务必配置 HTTPS 代理,并把APP_ORIGIN设为与代理完全一致的浏览器源。
  • 💾备份双层数据:SQLite(opendots-data卷)存页面与工作区元数据;对话历史存于 Intelligence 项目,只拷 SQLite 不算完整备份。
  • 🧠凭据只在服务器:模型、语音、浏览器密钥一律放服务端.env,严禁提交到代码库。
  • 🛡️信任级别:Dot 电脑是标准 Docker 容器隔离(共享宿主内核);Shell 权限意味着容器内可执行程序与联网,请运行在与之匹配的机器上。更多边界说明见 SECURITY.md。
  • 📌镜像锁定:电脑服务基于 deployment/computers/ 中固定的 OpenBot 源码修订构建(非latest浮动标签),升级需连同其补丁一起评审。

部署后如何验证?

  1. 打开http://localhost:4310,确认能看到设置界面而非报错。
  2. 创建一个 Dot 和一个 Space,发起聊天,确认模型正常回复。
  3. 若启用了电脑服务:写一个文件到某台电脑,停掉再启动,确认文件仍在(验证持久化)。
  4. 在两台不同 Dot 的电脑间互相验证看不到对方的文件(验证隔离)。

常见问题速查

现象原因与处理
容器启动即退出,提示Set a 24+ character....env缺少随机密钥或长度不足 24 位
电脑服务状态不可用可能 Docker daemon 未运行、镜像未构建、凭据不一致,或应用无法访问返回的地址;先确认docker compose ps全部健康
换了 namespace 后找不到旧电脑COMPUTER_NAMESPACE决定容器与卷的命名,请保持稳定且每套部署唯一
改了环境变量没生效改完.env后必须重启服务

总结

整套 Docker 部署的精髓可以浓缩为一句话:用 compose.yml 拉起核心,用两个 24 位随机密钥守住安全底线,需要"真电脑"时再叠加 compose.computers.yml 与 compose.computers-app.yml。

完成部署后,你的 AI 同事就能开始工作:浏览网页、撰写草稿、保存为 Spaces 页面,甚至可以打电话。想继续探索 Slack 接入、语音通话与自动学习功能,请阅读官方文档 docs/SETUP.md 和 docs/COMPUTERS.md。

【免费下载链接】OpenDotsYour always-on AI coworkers that move between text, calls, and Slack.项目地址: https://gitcode.com/gh_mirrors/op/OpenDots

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表