兰鹿 - 基于仓颉语言的漫画归档管理系统
| 类型 | CNB | Gitea | GitHub |
|---|---|---|---|
| 服务 | |||
| 扩展 |
兰鹿是一个全栈 Web 应用,用于管理和阅读数字漫画归档。项目使用仓颉语言重新实现了 LANraragi 的核心功能,并配备了现代化的前端界面。
- 归档管理 - 浏览、搜索、组织漫画归档文件
- 在线阅读 - 内置阅读器,支持翻页导航
- 合集支持 - 将多个归档组织为合集(Tankoubon)
- 智能搜索 - 高级搜索和过滤功能
- 插件系统 - 可扩展的元数据和下载插件架构
- 任务管理 - 后台任务处理(扫描、下载、缩略图生成)
- 用户管理 - 多用户支持与身份认证
- 标签系统 - 完善的标签管理,支持多语言
- 系统设置 - 可配置的存储路径、扫描间隔、性能参数
- 双语界面 - 支持中文和英文
| 技术 | 说明 |
|---|---|
| 仓颉 (Cangjie) | 华为开发的现代编程语言 |
| Ignite | 仓颉 Web 框架 |
| PostgreSQL | 数据库(兼容 OpenGauss) |
| CJPM | 仓颉包管理器 |
| 技术 | 说明 |
|---|---|
| Next.js 16 | React 框架 |
| TypeScript | 类型安全 |
| Tailwind CSS | 样式框架 |
| Radix UI | 组件库 |
| Axios | HTTP 客户端 |
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 20+
- pnpm 10+(或使用 Corepack)
- PostgreSQL 12+
- Docker (可选)
# 设置仓颉环境
source cangjie/envsetup.sh
# 构建
cjpm build -Vcd frontend
corepack enable
pnpm install --frozen-lockfile
pnpm run build./target/release/bin/main访问 http://localhost:8082
请直接使用项目内的 docker-compose.yml,会同时启动:
lanlu:docker.cnb.cool/copurx/lanlu:latestpostgres:postgres:18-alpine
mkdir -p ./data/archive ./data/thumb ./data/logs ./data/plugins ./data/cachedocker compose pull
docker compose up -ddocker compose ps
docker compose logs -f lanlu浏览器打开:http://localhost:8082
- 首次启动且数据库
users表为空时,系统会自动创建默认管理员账号。 - 默认管理员账号和密码会写入
./data/logs/system.log。 - 可用以下命令快速定位默认账号密码日志:
grep -nE "已创建默认管理员账户|用户名:|密码:" ./data/logs/system.log- 若数据库中已存在用户,则不会再次自动生成默认管理员账号。
主要 API 端点:
| 端点 | 方法 | 说明 |
|---|---|---|
/api/info |
GET | 服务器信息 |
/api/search |
GET | 搜索/分页获取归档列表 |
/api/search/random |
GET | 随机归档 |
/api/archives/:id/metadata |
GET | 归档详情/元数据 |
/api/archives/:id/files |
GET | 归档文件列表 |
/api/tags |
GET | 标签列表 |
/api/tankoubons |
GET | 合集列表 |
/api/admin/plugins |
GET | 插件列表(管理员) |
foo bar:普通关键词(在标题/文件名/标签/简介中模糊匹配)"foo bar":引号内短语匹配-foo:排除词tag$:标签完全匹配(仅匹配完整标签 token;例如artist:abc$不会命中artist:abcd)
MIT License