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

11 KiB
Raw Blame History

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

十三、兼容双模式方案

目标是兼容:

  • 模式 AWindows 桌面版
  • 模式 BWeb 后台 + 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 双模式并行一段时间

这是当前成本、风险、可维护性三者之间最平衡的方案。