# 🛠️ Ops-Assistant 多平台 Bot + 自动化运维一体的私人助理服务:**Runbook 工单执行**、**模块化 OPS 命令**(Cloudflare / CPA / 订阅 / cfdav / 邮箱),带 Web 管理后台。 > 当前 `VERSION` 为 `0.0.1`。项目定位为模块化 OPS 助手。 ## 🆕 框架版更新要点 - **模块化命令框架**:`internal/core/module` 统一命令模板、门控(feature flag / confirm / dry-run)、错误标签(ecode)、结果格式化回传 - **Runbook 执行器增强**(`internal/core/runbook`): - 新增动作:`http.get` / `http.post` / `assert.json`(支持 `expect_success` 严格断言,API 失败不再假阳性) - 目标主机管理(`ops_targets`,默认 seed:hwsg / wjynl) - 任务与步骤全程落库(`ops_jobs` / `ops_job_steps`),Web 后台可查 - **查询类命令结果直接回传**(此前仅回执 job 号) - **CF 模块增强**:DNS 查询支持**传域名自动解析 zone_id**;`dns list / zones / workers list` 结果可读回传;API `success:false` 时任务真失败并回传错误摘要 - **新增模块**:`cpa`(usage 备份/恢复)、`cfdav`、`mail`、`sub`(订阅管理与到期提醒) - **QQ Bot**:AI 命令加载器、每日订阅提醒调度(09:00) - **Web 后台**:模块设置页(CF / CPA / cfdav / AI)、OPS 任务页、渠道管理、审计页 ## ✨ 功能特性 - **多平台接入**:QQ 官方 Bot(WebSocket)、Telegram Bot、飞书(通道层预留) - **OPS 命令**:`/cf` `/cpa` `/cfdav` `/sub` `/mail`,写操作带 dry-run / 确认门控 - **Runbook 自动化**:YAML 定义、步骤编排、断言校验、任务审计 - **Web 管理后台**:模块与渠道配置、任务与审计查看 - **优雅关闭**:SIGTERM/SIGINT 干净退出 ## 📦 快速开始 ### 二进制运行 ```bash cp config.yaml.example config.yaml vi config.yaml # 填入 Bot Token 等 ./ops-assistant ``` ### Docker 运行 ```bash cp config.yaml.example config.yaml && vi config.yaml docker-compose up -d # 或 docker run -d --name ops-assistant -p 9621:9621 \ -v $(pwd)/config.yaml:/app/config.yaml:ro \ -v $(pwd)/data:/app/data \ ouaone/ops-assistant:latest ``` ### 从源码编译 ```bash # 需要 Go 1.22+ make build make build-linux ``` ## ⚙️ 配置说明 ```yaml server: port: 9621 # Web 后台端口 key: "your-secret-key" # 会话密钥 database: path: "./ops.db" # SQLite 数据库路径 admin: username: "admin" # Web 后台用户名 password: "your_password" # 弱密码启动时会告警 telegram: enabled: true token: "YOUR_BOT_TOKEN" qqbot: enabled: false appid: "YOUR_APPID" secret: "YOUR_SECRET" ``` > **模块凭据**(CF API Token、CPA 管理令牌、cfdav 账号等)保存在数据库 `app_settings` 表,通过 Web 后台「模块设置」页配置,**不写入配置文件**;渠道 secrets 在数据库内加密存储(`enc:v1:` 前缀)。 ## 🤖 Bot 与 OPS Bot 主要用于接收 OPS 命令并返回执行结果。支持 QQ Bot、Telegram Bot;具体渠道开关与凭据在 Web 管理后台配置。 ## 🧰 OPS 命令参考 > 需先在 Web 后台启用对应模块开关(如 `enable_module_cf`)并配置凭据。查询类命令**直接回传格式化结果**;写操作回执 job 号,支持 `--dry-run` 预览。 ### Cloudflare(`/cf`) | 命令 | 说明 | |------|------| | `/cf status` | runbook 链路自检 | | `/cf zones` | 列出账号下站点 | | `/cf dns list ` | DNS 记录列表(域名自动解析;🟠 = 已开橙云) | | `/cf dns update ` | 更新记录内容 | | `/cf dnsadd [on/off] [type]` | 新增记录 | | `/cf dnsset ` | 按名设置记录内容 | | `/cf dnsdel ` | 删除记录 | | `/cf dnsproxy on\|off` | 切换橙云/灰云 | | `/cf workers list` | Workers 脚本列表 | ### CPA(CLIProxyAPI 管理) | 命令 | 说明 | |------|------| | `/cpa status` | usage 快照(requests / tokens) | | `/cpa usage backup` | 实时导出 usage 并打包备份(含 sha256/meta) | | `/cpa usage restore <备份包>` | 恢复 usage(import 接口优先,不停服) | ### 其他模块 | 命令 | 说明 | |------|------| | `/cfdav users` | cfdav 用户列表 | | `/cfdav add [admin]` | 新增用户 | | `/cfdav del ` | 删除用户 | | `/mail status` | 邮箱服务状态 | | `/sub add` | 新增订阅(引导式流程) | | `/sub list` | 订阅列表 | | `/sub report [category\|cycle\|due <7\|30\|overdue>]` | 订阅报表 | | `/sub del ` | 删除订阅 | | `/sub cancel` | 取消进行中的新增流程 | | `/ops modules` | 查看模块启用状态 | | `/rate 138 sgd to cny` | 实时货币转换(Google / Visa / Mastercard) | ## 📜 Runbook(自动化工单) `runbooks/*.yaml` 定义自动化任务,由执行器按步骤编排运行: - **动作**:`ssh.exec`(远程目标)、`shell.exec`(本机)、`http.get` / `http.post`、`file.upload` / `file.extract`、`assert.json`、`sleep` - **严格断言**:`assert.json` 支持 `expect_success: true` —— API 返回 `success:false` 时任务判失败,错误码与摘要直接回传给用户(杜绝"执行成功但结果无效"的假阳性) - **结果回传**:查询类命令的 stdout 经模块格式化后直接发回聊天窗口 - **全程审计**:每次执行落库 `ops_jobs` / `ops_job_steps`(rc、stdout/stderr tail、耗时),Web 后台「OPS 任务」页可查 示例(`runbooks/cf_dns_list.yaml`):解析 zone → API 查询 → `assert.json` 校验 `success=true` → 格式化回传。 ## 🌐 Web 管理后台 访问 `http://localhost:9621`: - 🧩 模块设置:CF / CPA / cfdav / AI - 🔌 渠道管理:QQ / Telegram / 飞书 配置与连接测试 - 🧾 OPS 任务与目标主机管理 - 🛡️ 审计日志 ## 🏗️ 项目结构 ``` ops-assistant/ ├── cmd/ │ ├── main.go # 服务入口 │ ├── ops-runner/ # CLI 直跑 runbook(运维侧入口) │ └── runbook_test.go # runbook 联调探针(-tags runbooktest) ├── config/config.go # 配置加载与验证 ├── models/models.go # 数据模型(GORM + AutoMigrate) ├── internal/ │ ├── core/ │ │ ├── command/ # 命令解析 │ │ ├── ecode/ # 错误码与标签 │ │ ├── module/ # 命令模板 / 门控 / 格式化回传 │ │ ├── policy/ # feature flag / confirm / dry-run │ │ ├── registry/ # 模块注册 │ │ ├── runbook/ # 执行器(ssh/shell/http/assert) │ │ ├── ops/ # OPS 服务编排 │ │ └── ai/ # AI 命令加载 │ ├── module/ # 业务模块:cf / cpa / cfdav / mail / sub / rate │ ├── bot/ # Telegram Bot │ ├── qq/ # QQ Bot(WebSocket)+ 订阅提醒调度 │ ├── feishu/ # 飞书适配(预留) │ └── web/ # Web 后台(Gin) ├── runbooks/ # 自动化 runbook(YAML) ├── templates/ # Web 前端页面 ├── config.yaml.example # 配置示例 ├── Dockerfile / docker-compose.yml └── Makefile # 构建 / 版本 / 发布 ``` ## 🔧 开发与发布 ```bash make build # 编译(自动读取 VERSION) make bump-patch # 版本 +1(patch/minor/major 同理) make set-version VERSION=1.2.3 make release-check # 发布前检查(工作区干净 + 版本格式) make package-release # 产出 dist/ 二进制 + sha256 make tag-release # 打 tag 并推送 make docker && make docker-push ``` Runbook 联调探针(不动线上服务,用数据库副本跑): ```bash go build -tags runbooktest -o runbook_test ./cmd ./runbook_test "/cf dns list " ``` ## 📋 技术栈 - **语言**: Go 1.22 - **Web 框架**: Gin · **数据库**: SQLite (GORM) **QQ SDK**: tencent-connect/botgo v0.2.1(WebSocket)· **TG SDK**: go-telegram-bot-api v5 - **自动化**: 自研 runbook 执行器(YAML 编排 + 严格断言 + 任务审计) ## 📄 License MIT