BookWeb 是一个使用 Go 语言开发的现代化小说阅读 Web 程序,旨在替代杰奇 1.7 系统,提供更高的性能、更好的可维护性和更丰富的功能。
- 高性能:基于 Go 语言和 httprouter,提供出色的并发处理能力
- 移动端适配:智能识别移动端设备,自动切换模板与路由,完美支持手机访问
- Redis 缓存:可选的 Redis 缓存支持,大幅提升页面响应速度
- 热重载:支持路由配置、插件配置热重载,无需重启即可生效
- 插件系统:灵活的插件架构,支持广告管理、数据库优化、长尾词采集等
- 多模板支持:支持多套前端模板,轻松切换站点风格
- 统一日志:结构化日志系统,支持文件轮换 (Size/Age) 与自动清理
- 完整后台:功能齐全的管理后台,包含文章、用户、配置、日志管理
- 用户系统:支持用户注册、登录、书架、书签等功能
- SEO 友好:可配置的 URL 路由、Sitemap 生成及精细化 SEO 规则
- GZIP 压缩:可选的 GZIP 压缩,减少传输带宽
- ID 转换:支持 ID 算术转换,便于多站点共享数据库
bookweb/
├── admin/ # 后台管理模块
│ ├── admin.go # 后台控制器
│ ├── auth.go # 后台认证
│ └── template/ # 后台模板
├── cmd/ # 命令行工具
│ └── genpwd/ # 密码生成工具
├── config/ # 配置文件目录
│ ├── config.conf # 主配置文件
│ ├── router.conf # 路由配置
│ ├── seo.conf # SEO 规则配置
│ ├── link.conf # 友情链接配置
│ └── plugins.conf # 插件配置
├── controller/ # 前台控制器
├── dao/ # 数据访问层
├── model/ # 数据模型
├── plugin/ # 插件目录
│ ├── ads/ # 广告管理插件
│ ├── db_optimizer/ # 数据库优化插件
│ ├── langtail/ # 长尾词采集插件
│ └── sitemap/ # 网站地图插件
├── router/ # 路由管理
├── service/ # 服务层
├── sql/ # SQL 脚本
├── static/ # 静态资源
├── template/ # 前台模板
├── utils/ # 工具函数
├── files/ # 小说文件存储
├── main.go # 程序入口
└── go.mod # Go 模块定义
用于生成 bcrypt 加密的密码哈希,可用于重置管理员或用户密码。
# 使用默认密码 admin123
go run ./cmd/genpwd/
# 使用自定义密码
go run ./cmd/genpwd/ "你的新密码"输出示例:
Password: admin123
Bcrypt Hash: $2a$10$xxxxx...
SQL: UPDATE admin SET password = '$2a$10$xxxxx...' WHERE username = 'admin';
- Go 1.24+
- MySQL 5.7+
- Redis(可选)
-
克隆项目
git clone https://github.com/cheug0/bookweb.git cd bookweb -
初始化数据库
# 导入数据库结构和初始数据 mysql -u root -p your_database < sql/data.sql mysql -u root -p your_database < sql/admin.sql
-
修改配置文件
编辑
config/config.conf:{ "db": { "driver": "mysql", "host": "localhost", "port": 3306, "user": "your_user", "password": "your_password", "dbname": "your_database" }, "server": { "host": "localhost", "port": 8080 }, "site": { "sitename": "我的小说站", "domain": "localhost:8080", "template": "html" }, "log": { "level": "info", "output": "file", "file_path": "logs/app.log", "max_size": 100, "max_age": 7 } } -
编译运行
go build -o bookweb ./bookweb
-
访问站点
- 前台:
http://localhost:8080 - 后台:
http://localhost:8080/admin(默认账号:admin / admin123)
- 前台:
| 配置项 | 说明 |
|---|---|
db |
数据库连接配置 |
server |
HTTP 服务器配置 |
site.sitename |
站点名称 |
site.domain |
站点域名 |
site.mobile_domain |
移动端域名 |
site.template |
PC 端模板目录 |
site.mobile_template |
移动端模板目录 |
site.admin_path |
后台管理路径 |
site.force_domain |
强制域名跳转 |
site.gzip_enabled |
启用 GZIP 压缩 |
site.id_trans_rule |
ID 转换规则(如 +1000) |
redis |
Redis 缓存配置 |
storage |
存储配置(local/oss) |
log |
日志系统配置 |
支持自定义 URL 模式:
{
"routes": {
"book": "/book_:aid.html",
"read": "/book/:aid/:cid.html",
"sort": "/sort/:sid/:page/"
}
}可配置各页面的 Title、Keywords、Description 模板。
| 插件 | 说明 |
|---|---|
ads |
广告位管理,支持自定义广告槽位 |
db_optimizer |
数据库连接优化 |
langtail |
长尾词采集支持 |
{
"ads": {
"enabled": true,
"slots": {
"header": {
"name": "顶部广告",
"content": "<script>...</script>",
"enabled": true
}
}
},
"langtail": {
"enabled": true,
"fetch_cycle_days": 7,
"cache_seconds": 3600,
"route_pattern": "/books/:lid",
"show_count": 50 // 显示数量限制
}
}- 自动采集:根据小说名自动从百度搜索下拉框采集长尾关键词。
- 智能展示:支持配置显示数量 (
show_count),按最新获取时间排序。 - SEO 优化:自动生成关联长尾词页面,提升站点收录。
模板文件位于 template/ 目录,支持多套模板切换。
项目内置了 Google Fonts (Inter 字体) 的本地化版本,位于 static/css/fonts.css,无需依赖外部网络,加快加载速度。
所有页面均可使用的变量:
| 变量名 | 类型 | 说明 |
|---|---|---|
SiteName |
string | 站点名称 |
SiteDomain |
string | 站点域名 |
IsLogin |
bool | 用户是否已登录 |
Username |
string | 当前登录用户名 |
CurrentTitle |
string | 当前页面推测的 SEO 标题 |
CurrentKeywords |
string | 当前页面 SEO 关键词 |
CurrentDesc |
string | 当前页面 SEO 描述 |
SortLinks |
[]map | 分类导航链接列表 (Caption, Url, Id) |
TopUrl |
string | 排行榜页面 URL |
Analytics |
html | 统计代码 (原样输出) |
可在模板中直接调用的辅助函数:
URL 生成
bookUrl(id): 生成小说详情页 URLreadUrl(aid, cid): 生成章节阅读页 URLsortUrl(sortID, page): 生成分类列表页 URLbookIndexUrl(id): 生成小说目录页 URLlangtailUrl(lid): 生成长尾词落地页 URLcover(id): 获取小说封面图片路径
数据格式化
formatDate(timestamp): 格式化时间戳 (YYYY-MM-DD)formatDateShort(timestamp): 简短日期格式 (MM-DD)formatSize(bytes): 格式化文件大小 (如 1.2万字)safe(html): 输出不转义的 HTML 内容
工具函数
add(a, b): 加法运算minus(a, b): 减法运算mod(a, b): 取模运算ad(slot): 输出指定槽位的广告代码
修改 config.conf 中的 site.template 为对应模板目录名。
- 仪表板:站点统计概览
- 小说管理:小说增删改查
- 用户管理:用户列表、编辑、书架书签管理
- 友情链接:链接管理
- 模块设置:路由、分类、SEO 配置
- 插件管理:插件启用/配置
- 系统设置:站点、数据库、Redis、存储配置
- 安全设置:修改密码、后台入口
- Web 框架:httprouter
- 数据库:MySQL + go-sql-driver
- 缓存:Redis (go-redis/v9)
- 模板:Go html/template
- 其他:UUID、GZIP 中间件
- 使用 MVC 分层架构
- DAO 层使用预编译 SQL 语句
- 支持缓存自动失效
MIT License
欢迎提交 Issue 和 Pull Request!