Files
dobotai-platform/deploy/dobotai-dingtalk/README.md
T

5.3 KiB
Raw Blame History

DobotAI Docker部署(阿里云RDS)

定位

DobotAI是钉钉渠道编排与交付服务。Docker只运行应用容器dobotai-dingtalk;数据库唯一使用已有的阿里云RDS PostgreSQL。

钉钉 Stream
   ↓
dobotai-dingtalk 容器
   ├─ 阿里云RDS PostgreSQL:Turn、会话、反馈、管理员、覆盖判定
   └─ 既有WeKnora:Agent、检索、知识、模型

禁止创建或使用:

dobotai-postgres 容器
dobotai-postgres-data 数据卷
本地PostgreSQL作为DobotAI目标数据库

架构与目录

宿主机
├── dobotai-dingtalk                 唯一应用容器,host网络
├── /opt/dobotai/container/          Compose、RDS检查器、SQL迁移、启动脚本
├── /opt/dobotai/config/dobotai.env  0600,RDS/WeKnora/钉钉配置
├── /opt/dobotai/secrets/            0700,DobotAI SecretStore
└── /opt/dobotai/backups/            发布前RDS备份记录,不保存Docker数据库卷

阿里云RDS
└── DobotAI专用PostgreSQL数据库

应用使用network_mode: host,因此通过RDS私网地址访问云数据库、通过127.0.0.1:8080访问宿主机现有WeKnora。不会开放新的数据库端口;应用HTTP仍由DOBOTAI_LISTEN_ADDR=127.0.0.1:8090约束。

安装

克隆完整仓库后,只执行:

sudo bash ./install-docker.sh

根脚本自动:

检查或安装Docker Engine和Docker Compose v2(APT系统)
以当前Git提交构建 dobotai-dingtalk:local-<Git短SHA>
创建 /opt/dobotai/{container,config,secrets,backups}
复制应用Compose、RDS检查器和21个SQL迁移
生成权限0600的应用环境模板
安装三条短命令

它不会连接、创建或修改RDS,也不会启动未配置的钉钉应用。

配置、RDS检查与启动

安装后执行:

sudo dobotai-dingtalk-configure

配置器分字段录入阿里云RDS(主机、端口、数据库名、账号、密码),自动组装连接串;WeKnora和钉钉凭证密钥不回显,环境文件原子写入且权限0600。

DOBOTAI_TENANT_KEY不是WeKnora Agent租户键。它是DobotAI内部数据隔离键,首次安装时自动生成并固定保存;配置器不会要求填写或改动它。WeKnora侧只需要填写实际的两个Agent ID。

配置器会要求两个不同的WeKnora Agent ID,并自动生成DOBOTAI_AGENT_BINDINGS={"dingtalk:*":"快速问答Agent ID"}。DOBOTAI_INGRESS_TOKEN是保护本机POST /v1/qa内部接口的Bearer Token,不用于钉钉或WeKnora;同样由安装器自动生成。

配置 示例 作用
DATABASE_URL postgres://USER:***@rds-endpoint:5432/dobotai?sslmode=require DobotAI专用阿里云RDS PostgreSQL
WEKNORA_BASE_URL http://127.0.0.1:8080 宿主机既有WeKnora
WEKNORA_API_KEY <你的WeKnora API Key> DobotAI专用Key
DOBOTAI_QUICK_AGENT_ID <快速问答Agent ID> 默认快速问答实际调用的Agent
DOBOTAI_REASONING_AGENT_ID <智能推理Agent ID> /think和持续智能推理实际调用的Agent
DINGTALK_CLIENT_ID dingxxxxxxxx 钉钉AppKey
DINGTALK_CLIENT_SECRET <你的钉钉 AppSecret> 钉钉AppSecret

配置器另含可选的“回答图片外发OSS”整组录入(Endpoint、Region、Bucket、AK、SK、稳定外发基础地址):全部留空即禁用该功能;任一项填写则六项必填、密钥不回显。禁止把OSS凭据写入Git或命令行。

保存后脚本自动执行以下RDS门禁:

1. 使用RDS连接串执行 pg_isready
2. 检查DobotAI核心表
3. 数据库没有任何public表:按000001~000021初始化
4. 所有核心表存在:判定正常,不执行任何DDL
5. 部分表、缺表或非空异常库:拒绝初始化和启动
6. RDS通过后才启动 dobotai-dingtalk 并检查 /healthz

这保证不会把已有RDS表误当成空库重建,也不会把半成品或错误库静默升级。

日常命令

# 重新检查RDS并启动/升级应用
sudo dobotai-dingtalk-start

# 交互更新RDS、WeKnora、钉钉配置后启动
sudo dobotai-dingtalk-configure

# 仅首位管理员且无有效管理员时使用
sudo dobotai-dingtalk-bind-admin

# 健康与版本
curl --noproxy '*' -fsS http://127.0.0.1:8090/healthz
curl --noproxy '*' -fsS http://127.0.0.1:8090/version

升级与回滚

应用升级仅替换dobotai-dingtalk镜像。启动前再次检查RDS;健康失败时恢复上一应用镜像(如存在)。RDS不是容器资产,不能被docker compose down、镜像替换或本机卷操作影响。

RDS有实际数据时,数据库备份、SQL变更与恢复应在阿里云RDS发布流程中完成并验证;不要把应用镜像回滚误当成数据库回滚。

首位管理员

应用和钉钉Stream运行后:

sudo dobotai-dingtalk-bind-admin

终端会显示10分钟有效的六码;候选管理员私聊机器人:

/setting <六码绑定码>

已有有效管理员时绑定命令会拒绝,避免提权。

不执行的操作

不创建本地PostgreSQL容器或数据卷
不迁移、删除或覆盖现有本地 dobotai-test-postgres
不创建、删除或重置阿里云RDS数据库
不把RDS连接串、Token、钉钉凭据写入Git、命令行或日志
不重建WeKnora、Neo4j、Redis、Elasticsearch