logo
0
0
WeChat Login

Lanlu

兰鹿 - 基于仓颉语言的漫画归档管理系统

类型CNBGiteaGitHub
服务CNB BuildGitea BuildGitHub Build
扩展CNB BuildGitea ExtensionGitHub Extension

简介

兰鹿是一个全栈 Web 应用,用于管理和阅读数字漫画归档。项目使用仓颉语言重新实现了 LANraragi 的核心功能,并配备了现代化的前端界面。

功能特性

  • 归档管理 - 浏览、搜索、组织漫画归档文件
  • 在线阅读 - 内置阅读器,支持翻页导航
  • 合集支持 - 将多个归档组织为合集(Tankoubon)
  • 智能搜索 - 高级搜索和过滤功能
  • 插件系统 - 可扩展的元数据和下载插件架构
  • 任务管理 - 后台任务处理(扫描、下载、缩略图生成)
  • 用户管理 - 多用户支持与身份认证
  • 标签系统 - 完善的标签管理,支持多语言
  • 系统设置 - 可配置的存储路径、扫描间隔、性能参数
  • 双语界面 - 支持中文和英文

技术栈

后端

技术说明
仓颉 (Cangjie)华为开发的现代编程语言
Ignite仓颉 Web 框架
PostgreSQL数据库(兼容 OpenGauss)
CJPM仓颉包管理器

前端

技术说明
Next.js 16React 框架
TypeScript类型安全
Tailwind CSS样式框架
Radix UI组件库
AxiosHTTP 客户端

项目结构(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 20+
  • pnpm 10+(或使用 Corepack)
  • PostgreSQL 12+
  • Docker (可选)

构建后端

# 设置仓颉环境 source cangjie/envsetup.sh # 构建 cjpm build -V

构建前端

cd frontend corepack enable pnpm install --frozen-lockfile pnpm run build

运行

./target/release/bin/main

访问 http://localhost:8082

Docker 部署(推荐使用 Compose)

请直接使用项目内的 docker-compose.yml,会同时启动:

  • lanludocker.cnb.cool/copurx/lanlu:latest
  • postgrespostgres: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/infoGET服务器信息
/api/searchGET搜索/分页获取归档列表
/api/search/randomGET随机归档
/api/archives/:id/metadataGET归档详情/元数据
/api/archives/:id/filesGET归档文件列表
/api/tagsGET标签列表
/api/tankoubonsGET合集列表
/api/admin/pluginsGET插件列表(管理员)

搜索语法(/api/search?filter=...

  • foo bar:普通关键词(在标题/文件名/标签/简介中模糊匹配)
  • "foo bar":引号内短语匹配
  • -foo:排除词
  • tag$:标签完全匹配(仅匹配完整标签 token;例如 artist:abc$ 不会命中 artist:abcd

致谢

许可证

MIT License

About

No description, topics, or website provided.
Language
TypeScript96.7%
JavaScript2.6%
CSS0.5%
Dockerfile0.2%