Files
getDomain/docs/04_domainCheck_WebLinux改造总体方案.md
Your Name 32efff1670 dev
2026-04-16 13:05:07 +08:00

605 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# domainCheck Web/Linux 改造总体方案
## 一、目标结论
本项目建议采用“双轨过渡”方案:
- `现阶段`:保持当前 `Windows 桌面版` 不变,继续测试、验收、修正业务规则
- `目标形态`:新增一套 `轻量 Web 管理后台 + Linux 后端 API + Linux 检测 Worker`
- `过渡策略`:桌面版与 Web 版共用同一套数据库、Redis、检测规则与任务模型逐步把控制面迁移到 Web
本方案的核心原则:
- 不推倒重做现有检测核心
- 不在当前大型 `admin` 项目里硬改主线
- 新建一套轻量 Web 管理后台,只覆盖 `domainCheck` 真实需要的页面
- 将桌面端中的“配置、任务控制、日志查询、导入导出”逐步抽为后端 API
- 将检测执行从 GUI 进程迁移为 Linux 常驻 Worker
---
## 二、为什么采用这条路线
### 1. 当前桌面版的价值仍然存在
当前桌面版已经完成了以下高价值资产:
- 域名导入、待检测任务创建、检测结果写库
- 免费检测链路与付费检测链路
- Wayback 优化策略
- 代理池、多线程、命中即停、缓存
- 域名筛选、导出、批量更新
- 现有数据库结构与状态体系
这些能力不应废弃,后续 Web 化应尽量复用。
### 2. Linux 长期最优形态不是桌面打包工具
Linux 更适合:
- 跑 PostgreSQL / Redis
- 跑 API 服务
- 跑常驻 Worker
- 跑定时任务与日志分析
Linux 不适合长期承载 PySide6 桌面 GUI 作为运营入口。
### 3. 轻量 Web 后台比继续清理现有 admin 更可控
当前 `admin` 项目本质上是一个成熟后台壳,但它:
- 带有原业务的大量历史模块
- 接口风格偏向既有 ThinkPHP 体系
- 动态菜单、权限、接口命名、Token 机制均带旧耦合
因此更适合“参考其基础能力”,而不是作为 `domainCheck` 的长期主线代码仓。
---
## 三、目标架构
建议拆成 4 层:
### 1. Web 管理后台
技术建议:
- `Vue 3`
- `Vite`
- `Element Plus`
- `Pinia`
- `Vue Router`
职责:
- 登录
- 系统设置
- 域名导入
- 检测控制
- 域名筛选
- 导出
- 日志诊断
说明:
- Web 端只做“控制面”和“展示面”
- 不直接承担检测执行
### 2. 后端 API 服务
技术建议:
- 延续当前 Python 技术栈,优先考虑 `FastAPI`
职责:
- 用户登录鉴权
- 配置读写
- 导入任务接口
- 检测控制接口
- 域名筛选查询接口
- 导出任务接口
- 日志诊断接口
- Worker 状态汇总接口
### 3. Linux 检测 Worker
技术建议:
- Python 常驻服务
- 无 GUI
- systemd 托管
职责:
- 从数据库或任务表领取待检测域名
- 按配置顺序执行免费检测与付费检测
- 写回检测结果与黑名单信息
- 汇报运行状态、进度、异常、代理池状态
### 4. 数据与基础设施层
- `PostgreSQL`
- `Redis`
- 日志文件
- 可选对象存储或文件目录用于导出文件
---
## 四、推荐的总体模块划分
### 1. `domain-web`
前端项目,负责:
- 登录页
- 仪表盘
- 系统设置
- 域名管理
- 检测控制台
- 日志诊断页
### 2. `domain-api`
后端 API 服务,负责:
- `auth`
- `settings`
- `domains`
- `detect`
- `exports`
- `logs`
- `diagnostics`
### 3. `domain-worker`
检测 Worker负责
- 检测任务轮询
- 并发检测
- 代理使用
- 日志写入
- 运行状态上报
### 4. `domain-core`
可复用核心库,负责:
- 数据库访问
- 状态码定义
- 检测器封装
- 导入、筛选、导出服务
- 配置对象
- 公共异常与日志工具
说明:
- 当前 `domainCheck` 的大部分核心逻辑,后续应逐步沉淀到这一层
- 这是兼容桌面版与 Web/Linux 双模式的关键
---
## 五、页面范围
第一期轻量 Web 后台建议只做以下页面:
### 1. 登录
- 用户登录
- Token 持久化
- 退出登录
### 2. 系统设置
- 数据库连接信息只读或隐藏
- 检测选项配置
- 检测顺序调整
- 代理池配置
- 允许直连开关
- 线程数配置
- 聚名 / 聚查 Cookie 管理
- 敏感词配置管理
### 3. 域名导入
- 上传 TXT
- 导入结果反馈
- 导入失败明细
- 自动建待检测任务
### 4. 检测控制
- 启动检测
- 停止检测
- Worker 在线状态
- 当前线程数
- 当前代理状态
- 当前任务进度
### 5. 域名筛选
- 注册状态
- 检测状态
- 使用状态
- 是否备案
- 备案年份
- 快照年份
- backlink > 10
- 关键词、域名、首页网址
- 分页列表
### 6. 导出
- 导出 TXT
- 导出 CSV/Excel
- 导出当前页 / 指定页数 / 全部
- 导出任务记录
### 7. 日志诊断
- Worker 运行日志
- API 错误日志
- 最近异常摘要
- 一键诊断分析
---
## 六、后端拆分建议
后端改动不是重写业务,而是“服务化”。
### 1. 可直接复用的部分
- 检测器逻辑
- 状态码与状态映射
- 域名导入核心逻辑
- 筛选 SQL 逻辑
- 导出逻辑
- Wayback 优化逻辑
- 代理池逻辑
- 数据库表结构
### 2. 需要抽离成 service 的部分
- 系统设置读写
- 检测选项配置读写
- 线程数配置读写
- 代理配置读写
- Cookie 配置读写
- 域名导入服务
- 域名筛选服务
- 导出服务
- 日志读取与诊断服务
### 3. 需要从 GUI 中搬出的部分
- 检测启动/停止逻辑
- 运行状态展示逻辑
- 配置变更监听
- GUI 信号槽驱动的线程控制
### 4. 需要新增的部分
- API 鉴权
- API 返回结构统一
- Worker 心跳机制
- 导出任务记录
- 日志分析接口
- 远程诊断接口
---
## 七、并发架构建议
当前并发能力可以复用,但调度外壳要改。
### 1. 保留的能力
- 域名级多线程检测
- 检测顺序控制
- Wayback 小并发与命中即停
- 代理池共享
- 失败重试
- 结果落库
### 2. 要调整的实现方式
从:
- `QThread + GUI 信号 + 本地窗口状态`
迁移为:
- `Worker 线程池 + 服务状态上报 + API 查询`
### 3. 推荐并发模型
- 单 Worker 实例维护一个检测线程池
- Worker 从 `detect_tasks` 拉取待处理任务
- 每个域名仍按当前检测顺序串行执行单域名步骤
- 多域名并行执行
- Wayback 继续保留单域名内部的小并发与缓存机制
### 4. 推荐的任务状态流转
- `待检测`
- `检测中`
- `检测完成`
- `检测失败`
- `已拉黑`
同时保留任务表:
- `status = pending`
- `status = running`
- `status = completed`
- `status = failed`
---
## 八、免费与付费检测执行策略
这部分建议沿用当前已确认规则:
- 先跑免费项
- 免费项全部跑完且仍非黑名单,才跑付费项
- 付费项默认为:
- 聚查
- 桔子
检测顺序默认建议:
1. 检查注册
2. 百度 site
3. 360 site
4. 站长之家
5. 爱站
6. 时光机
7. 聚查
8. 桔子
说明:
- Web 后台允许运营勾选与调整顺序
- 但后端执行器应保留“付费项后置”的保护规则
---
## 九、代理架构建议
### 1. 保留现有能力
- 多代理池 URL
- 允许直连开关
- 抽样代理测试
- 可用代理数展示
### 2. Linux 后端建议新增
- 代理池刷新冷却时间
- 空池失败退避
- 低水位自动补池
- 按检测步骤控制是否优先直连
- 代理池健康状态缓存
### 3. 建议策略
- 生产环境:优先代理,谨慎直连
- 测试环境:允许直连兜底,减少空转
- 国内服务器:优先使用国内代理池
---
## 十、日志与诊断架构建议
### 1. 日志来源
- API 服务日志
- Worker 日志
- 导入日志
- 导出日志
- 代理池测试日志
### 2. 日志能力
- Web 页面查看最近日志
- 关键词过滤
- 失败任务聚合
- 一键下载诊断包
### 3. 诊断接口
建议后续提供:
- `POST /diagnostics/analyze`
- `GET /diagnostics/latest`
- `GET /logs/worker`
- `GET /logs/api`
### 4. 上传分析内容建议
- 最近 300 到 500 行日志
- 当前系统配置快照
- Worker 状态快照
- 数据库统计摘要
---
## 十一、认证与权限建议
第一期建议做轻量权限:
- `admin`
- `operator`
说明:
- `admin` 可修改系统配置、代理、Cookie、敏感词
- `operator` 只能导入、查看、筛选、导出、启动检测
建议使用:
- JWT 或简单 Token
- Redis 存储会话
不建议第一期就上过重 RBAC。
---
## 十二、数据库策略建议
当前数据库可继续使用,不建议第一期大改表结构。
建议新增或补强的表可以是:
- `sys_users`
- `sys_login_logs`
- `export_tasks`
- `worker_heartbeats`
- `diagnostic_reports`
现有核心表继续复用:
- `domains`
- `detect_tasks`
- `domain_detections`
- `domain_blacklist`
- `sensitive_words`
---
## 十三、兼容双模式方案
目标是兼容:
- `模式 A`Windows 桌面版
- `模式 B`Web 后台 + Linux Worker
兼容方式:
- 共用同一套数据库
- 共用同一套 Redis
- 共用同一套状态码与检测规则
- 共用同一套导入、筛选、导出核心服务
建议:
- 桌面版在过渡期继续可用
- Web 版逐步接管日常运营
- 最终桌面版只保留给管理员或完全退役
---
## 十四、实施阶段建议
### 第一阶段:方案冻结
周期建议:`2-3 天`
产出:
- 页面清单
- API 清单
- 数据模型确认
- 迁移边界确认
### 第二阶段:后端服务化
周期建议:`7-12 天`
产出:
- 登录鉴权
- 配置接口
- 域名查询接口
- 导入接口
- 导出接口
- 检测控制接口
- 日志接口
### 第三阶段Worker Linux 化
周期建议:`5-8 天`
产出:
- 无 GUI Worker
- systemd 启动方案
- 心跳上报
- 任务轮询
- 并发检测
### 第四阶段Web 后台一期
周期建议:`7-10 天`
产出:
- 登录
- 系统设置
- 域名导入
- 检测控制
- 域名筛选
- 导出
- 日志诊断
### 第五阶段:联调与回归
周期建议:`5-7 天`
产出:
- API 联调
- Worker 联调
- 真实域名回归
- 性能参数调整
---
## 十五、周期评估
如果基于当前项目逐步演进:
- `较顺利``3-4 周`
- `稳妥完整``4-6 周`
前提:
- 当前桌面版继续测试,不同时大规模重构
- Web 后台走轻量方案,不做额外复杂业务
- 检测核心尽量复用,不重写规则
---
## 十六、风险点
### 1. GUI 与业务逻辑仍有部分耦合
需要持续把 GUI 里的逻辑搬到 service 层。
### 2. 代理池资源仍是实际瓶颈
Linux 化不会自动解决代理池不足问题,只能让调度更稳。
### 3. 第三方站点反爬与返回结构变动
百度、360、站长、爱站、聚查、桔子都可能发生变化需要留维护预算。
### 4. Wayback 首次大域名扫描仍可能耗时较高
虽然当前已优化很多,但超大域名首次拉 CDX 列表仍是客观成本。
---
## 十七、最终建议
建议现在就按以下路径推进:
1. 当前桌面版继续测试,不做大方向替换
2. 新建轻量 Web 后台项目,不在现有 `admin` 大仓上继续主线开发
3. 新建 API 服务层,承接配置、任务、导入、筛选、导出、日志能力
4. 将检测端逐步改造成 Linux 常驻 Worker
5. 保持桌面版与 Web/Linux 双模式并行一段时间
这是当前成本、风险、可维护性三者之间最平衡的方案。