兰鹿 - 基于仓颉语言的漫画归档管理系统
简介
兰鹿是一个全栈 Web 应用,用于管理和阅读数字漫画归档。项目使用仓颉语言重新实现了 LANraragi 的核心功能,并配备了现代化的前端界面。
功能特性
- 归档管理 - 浏览、搜索、组织漫画归档文件
- 在线阅读 - 内置阅读器,支持翻页导航
- 合集支持 - 将多个归档组织为合集(Tankoubon)
- 智能搜索 - 高级搜索和过滤功能
- 插件系统 - 可扩展的元数据和下载插件架构
- 任务管理 - 后台任务处理(扫描、下载、缩略图生成)
- 用户管理 - 多用户支持与身份认证
- 标签系统 - 完善的标签管理,支持多语言
- 系统设置 - 可配置的存储路径、扫描间隔、性能参数
- 双语界面 - 支持中文和英文
技术栈
后端
| 技术 | 说明 |
|---|---|
| 仓颉 (Cangjie) | 华为开发的现代编程语言 |
| Ignite | 仓颉 Web 框架 |
| PostgreSQL | 数据库(兼容 OpenGauss) |
| CJPM | 仓颉包管理器 |
前端
| 技术 | 说明 |
|---|---|
| Next.js 16 | React 框架 |
| TypeScript | 类型安全 |
| Tailwind CSS | 样式框架 |
| Radix UI | 组件库 |
| Axios | HTTP 客户端 |
项目结构(DDD)
lanlu/
├── src/ # 仓颉后端源码
│ ├── main.cj # 应用入口
│ ├── contexts/ # 领域上下文(按业务边界拆分)
│ │ ├── archive/
│ │ │ ├── domain/ # 领域模型与领域规则
│ │ │ ├── infrastructure/ # 持久化与外部实现
│ │ │ │ └── persistence/
│ │ │ └── interfaces/ # 对外接口层
│ │ │ └── http/
│ │ ├── task/
│ │ │ ├── domain/
│ │ │ ├── application/ # 应用服务与用例编排
│ │ │ │ └── runners/ # 各类任务执行器
│ │ │ ├── infrastructure/
│ │ │ │ └── persistence/
│ │ │ └── interfaces/
│ │ │ └── http/
│ │ ├── plugin/
│ │ │ ├── domain/
│ │ │ ├── application/
│ │ │ │ └── runners/
│ │ │ ├── infrastructure/
│ │ │ │ └── persistence/
│ │ │ └── interfaces/
│ │ │ └── http/
│ │ └── asset / category / search / smart_filter / system / tag / tankoubon / user
│ ├── routes/
│ │ └── api/ # API 路由注册
│ ├── infrastructure/ # 跨上下文基础设施
│ │ ├── archivehandler/
│ │ ├── kv/
│ │ ├── middleware/
│ │ └── migrations/
│ │ └── versions/
│ └── shared/ # 通用配置/工具/响应视图
│ ├── config/
│ ├── utils/
│ └── views/
├── frontend/ # Next.js 前端
│ ├── src/
│ │ ├── app/
│ │ ├── components/
│ │ ├── contexts/
│ │ ├── hooks/
│ │ ├── lib/
│ │ └── types/
│ └── messages/
├── plugins/ # Deno 插件目录(Download/Login/Metadata/Script)
├── data/ # 运行时数据目录
│ ├── archive/
│ ├── thumb/
│ ├── plugins/
│ ├── cache/
│ └── logs/
├── docker-compose.yml
├── Dockerfile
├── cjpm.toml
└── .env.example
注:并非每个上下文都严格包含四层目录,按业务复杂度逐步演进。
快速开始
环境要求
- 仓颉 SDK (LTS 版本)
- Node.js 18+
- PostgreSQL 12+
- Docker (可选)
构建后端
# 设置仓颉环境 source cangjie/envsetup.sh # 构建 cjpm build -V
构建前端
cd frontend
npm install
npm run build运行
./target/release/bin/main
访问 http://localhost:8082
Docker 部署(推荐使用 Compose)
请直接使用项目内的 docker-compose.yml,会同时启动:
lanlu:docker.cnb.cool/copurx/lanlu:latestpostgres:postgres:18-alpine
1. 准备数据目录
mkdir -p ./data/archive ./data/thumb ./data/logs ./data/plugins ./data/cache
2. 启动服务
docker compose pull docker compose up -d
3. 查看状态与日志
docker compose ps docker compose logs -f lanlu
4. 访问系统
浏览器打开:http://localhost:8082
注意事项
- 首次启动且数据库
users表为空时,系统会自动创建默认管理员账号。 - 默认管理员账号和密码会写入
./data/logs/system.log。 - 可用以下命令快速定位默认账号密码日志:
grep -nE "已创建默认管理员账户|用户名:|密码:" ./data/logs/system.log- 若数据库中已存在用户,则不会再次自动生成默认管理员账号。
API 文档
主要 API 端点:
| 端点 | 方法 | 说明 |
|---|---|---|
/api/info |
GET | 服务器信息 |
/api/archives |
GET | 归档列表 |
/api/archives/:id |
GET | 归档详情 |
/api/archives/:id/files |
GET | 归档文件列表 |
/api/search |
GET | 搜索归档 |
/api/tags |
GET | 标签列表 |
/api/tankoubons |
GET | 合集列表 |
/api/plugins |
GET | 插件列表 |
搜索语法(/api/search?filter=...)
foo bar:普通关键词(在标题/文件名/标签/简介中模糊匹配)"foo bar":引号内短语匹配-foo:排除词tag$:标签完全匹配(仅匹配完整标签 token;例如artist:abc$不会命中artist:abcd)
致谢
许可证
MIT License