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 直连监督者,无需宿主端口 |
三个文件的设计逻辑:
- compose.yml是"必选项"。
app服务基于 Dockerfile 的app阶段构建(Node.js 24 生产镜像,以非 root 用户运行),数据存入opendots-data命名卷,重启不丢数据。浏览器服务则刻意做了加固:只读文件系统、tmpfs 临时目录、丢弃所有能力(cap_drop: ALL)、no-new-privileges。 - compose.computers.yml是"进阶项"。监督者(supervisor)会为每个 Dot 动态创建一台独立电脑容器,文件和浏览器配置文件各用独立命名卷持久化。注意:只有监督者挂载 Docker socket,Web 应用和 Dot 的电脑都拿不到它——这是有意的最小权限设计。
- 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浮动标签),升级需连同其补丁一起评审。
部署后如何验证?
- 打开
http://localhost:4310,确认能看到设置界面而非报错。 - 创建一个 Dot 和一个 Space,发起聊天,确认模型正常回复。
- 若启用了电脑服务:写一个文件到某台电脑,停掉再启动,确认文件仍在(验证持久化)。
- 在两台不同 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),仅供参考