FOSS HANMAN  Top-level Files of tip

Files in the top-level directory from the latest check-in

  • migrations
  • public
  • src
  • templates
  • Cargo.lock
  • Cargo.toml
  • config.toml.example
  • docker-compose.yml
  • Dockerfile
  • LICENSE
  • README.md

HanMan

自托管漫画聚合阅读器,基于 Rust 构建。支持多站点爬取、本地图片存储、管理后台。

功能

  • 后端:Axum + Tokio 异步,SQLite 持久化,SQLx 迁移
  • 爬虫:多站点 CSS 选择器配置、限速(默认 2 req/s)、User-Agent 轮换、自动重试
  • 图片代理:透传 CDN 图片,自动推断 Content-Type,绕过防盗链
  • 管理后台:密码保护,支持手动触发采集任务、查看任务历史
  • 前端:SPA,深色/浅色双主题,响应式,键盘快捷键阅读

快速开始

本地运行

# 需要 Rust >= 1.88
cargo run

# 浏览器访问
open http://127.0.0.1:3000

Docker(推荐生产部署)

# 拉取并启动
docker compose up -d

# 查看日志
docker compose logs -f

配置

默认无需配置文件,通过环境变量覆盖关键参数:

环境变量 说明 默认值
HANMAN_HOST 监听地址 127.0.0.1
HANMAN_PORT 监听端口 3000
HANMAN_ADMIN_PASSWORD 管理后台密码 472618
DATABASE_URL SQLite 路径 sqlite://./data/hanman.db?mode=rwc
RUST_LOG 日志级别 hanman=debug

也可通过 config.toml 文件完整配置(参考 config.toml.example):

[server]
host = "0.0.0.0"
port = 3000
admin_password = "your_password"

[crawler]
scheduler_enabled = true
list_cron = "0 0 */6 * * *"

[sites.nnhm2]
domain = "nnhm2.com"
# ... CSS selectors

目录结构

fos-hanman/
├── src/
│   ├── main.rs              # 入口,服务启动
│   ├── lib.rs               # 模块导出
│   ├── config.rs            # 配置加载(TOML + 环境变量)
│   ├── error.rs             # 统一错误类型
│   ├── models.rs            # 数据结构
│   ├── proxy.rs             # 图片代理
│   ├── parser.rs            # HTML 解析
│   ├── crawler/             # 爬虫(列表/详情/图片下载/调度器)
│   ├── db/                  # 数据库操作(SQLx + SQLite)
│   ├── handlers/            # HTTP 路由处理器
│   └── routes/              # 路由注册 + 管理鉴权中间件
├── migrations/              # SQLx 数据库迁移
├── public/                  # 前端 SPA(HTML/CSS/JS)
├── Dockerfile
├── docker-compose.yml
└── config.toml.example

API

方法 路径 说明
GET /api/health 健康检查
GET /api/comics 漫画列表(分页/搜索/标签)
GET /api/comics/:slug 漫画详情
GET /api/comics/:slug/chapters/:chapter 章节图片
GET /api/proxy-image?url= 图片代理
POST /api/admin/crawl 触发采集(需密码)
GET /api/admin/jobs 任务历史(需密码)

管理接口需要在请求头中携带:X-Admin-Password: <密码>

技术栈

  • Rust 1.88+,edition 2021
  • Axum 0.7 · Tokio 1 · SQLx 0.7 (SQLite) · reqwest 0.12 · scraper 0.18
  • 前端:原生 JS ES Modules,无框架依赖

License

MIT — 详见 LICENSE