运维

更新、备份与故障定位

更新提醒与执行更新严格分离,运行状态以健康检查和事件审计为准,恢复操作始终建立在可验证备份上。

更新

只提示,不自动更新

控制台发现新版本时只显示小黄点。管理员点击、查看更新说明并确认后才执行更新,不再有后台自动下载或自动切换逻辑。

一键安装版本

重复执行安装命令。脚本下载对应完整包、校验 SHA-256、备份数据库和运行文件、切换、重启并健康检查。

控制台 Release 更新

后端执行完整 Release 流程,探活失败时恢复旧版本。仅显示按钮而无后端更新器的旧版不能自更新。

Docker / 源码

容器由编排系统重建;源码 checkout 重新构建前后端。两者都不在运行进程内替换裸二进制。

下载加速

直连 GitHub 拉不动时,「版本与更新」里可以选一条公共加速线路:自动会实测直连和各条镜像后挑一条(直连可用就优先直连),也可以固定选一条或强制直连。加速只用于安装包本身——校验清单始终优先直连,版本检查走 GitHub API 不经过镜像,安装前仍然逐字节核对 SHA-256。任何一条线路失败都会自动回落直连。

# 一键安装的升级命令与首次安装相同
curl -fsSL https://raw.githubusercontent.com/SuInk/Diana/main/scripts/install.sh | sudo sh
更新前

确认数据目录和备份目录有足够空间。数据库正在高频写入时,备份需同时保留 WAL/SHM,或先通过应用提供的备份流程生成一致快照。

由服务管理器托管时

launchd 的 KeepAlive 和 systemd 的 Restart= 会在服务退出后立刻把它拉起来。更新器识别到自己被托管后就不再自行启动新实例,改为在换完文件后请管理器重启一次(launchctl kickstart -k / systemctl restart),由管理器串行地停旧起新,避免两个实例抢同一个监听端口、后启动的报 address already in use 退出。一键安装脚本会把 DIANA_SERVICE_MANAGERDIANA_SERVICE_LABELDIANA_SERVICE_DOMAIN 写进服务环境;自建部署可以自行设置,或设 DIANA_SERVICE_MANAGER=none 让更新器自己负责重启。

日常运行

健康检查、日志和备份

健康检查GET /api/health无需登录,用于进程与编排探活。
登录状态GET /api/auth/status确认管理员会话和首次启动状态。
实时事件GET /api/events/streamSSE 断开时前端应退回轮询。
安装日志logs/包含服务输出与启动失败信息。
应用日志logs/diana.log支持控制台筛选和下载。
SQLitedata/diana.db配置、消息、记忆、任务与审计主库。

升级临时备份最多保留本次的一份,创建前清除旧备份,健康检查成功后自动删除;失败或安装后未启动时保留。源码更新脚本在构建和文件替换成功后删除临时备份,仍需手动重启。清理失败会记录警告。下表指自行维护的数据备份,不属于自动清理范围。

建议备份周期

范围周期保留
SQLite 一致性快照每日,并在每次更新前至少 7 个日备份和 4 个周备份
运行配置与密钥配置变更后加密保存,限制读取权限
历史媒体按业务需求结合容量淘汰和隐私期限
恢复演练每月记录恢复耗时和缺失项

故障排查

先看事件原因,再看模型调用链

机器人在线,但群里不回复

从事件明细读取确定性原因:群启用、回复时间、屏蔽账号、群等级、机器人抑制、显式 @、触发词和主动回复结果。打开调试模式后,再核对模型收到的上下文与结构化判断。

引用机器人消息并 @,却被忽略

运行版本必须包含“显式 @ 优先于引用”的路由逻辑。OneBot 事件中应有 at segment;后端先识别显式 @,只有没有 @ 的引用才进入主动回复语义判断。

视觉模型看不清截图或小字

确认视觉职责绑定了经过真实图片测试的模型、原图未被缩放、图片未被 token 预算裁掉。文本密集图片使用 OCR 与原图双证据。

群管理显示 not found 或缺少群

检查 OneBot 连接与 get_group_list 响应。在线时应显示机器人加入的全部群;只有连接不可用才回退本地配置。

主动回复候选长期显示等待处理

候选应该直接进入语义判断,最长等待 60 秒后写入明确结果。持续卡住通常表示意图模型超时、队列消费者未运行或运行版本未包含新逻辑。

更新后健康检查失败

检查端口冲突、数据库权限、前端目录和二进制架构。安装器备份位于 .installer/backups;控制台更新备份位于 .diana-updates

开发与发布

本地验证和 CI 门槛

# Go 与格式检查
gofmt -l .
git diff --check
go test ./...

# 前端生产构建
cd frontend-next
npm ci
npm run build

# 文档预览(站点用无扩展名地址,需要支持 clean URL 的服务器)
cd ..
npx serve docs

CI 覆盖 Linux amd64/arm64、Darwin amd64/arm64、Windows amd64 和 Docker。版本发布从已合并的默认分支打标签,Release 仅提供各平台完整包、SHA256SUMS 和自更新清单 latest.json,不再单独上传裸二进制。Release 说明必须写清更新点、兼容影响、验证方式与升级注意事项。

GitHub Pages

站点位于 docs/,没有构建时依赖。默认分支的文档或一键脚本更新后,GitHub Actions 上传静态 artifact 并部署 Pages。页面之间用无扩展名地址(/deploy 而不是 /deploy.html),GitHub Pages 会自动解析到对应的 .html;本地预览要用支持这一行为的服务器,python3 -m http.server 会 404。