拆解Grimmory技术栈Spring BootAngularMariaDB自托管图书库架构深度解析【免费下载链接】grimmoryA self-hosted library for your ebooks, comics, and audiobooks项目地址: https://gitcode.com/gh_mirrors/gr/grimmoryGrimmory 是一个自托管图书库self-hosted library帮你把电子书、漫画和有声书统一管起来智能书架、自动元数据抓取、浏览器内阅读器、Kobo/OPDS 设备同步一应俱全。它的技术架构由三大支柱撑起——Spring Boot 4 后端、Angular 22 前端、MariaDB 数据库再通过多阶段 Docker 构建打成单一镜像一键部署。这篇文章带你从整体架构到每个模块逐层拆解这套自托管电子书管理方案的工程细节 项目全景一屏看懂三大核心组件Grimmory 采用经典的前后端分离 统一打包架构仓库目录结构一目了然组件技术选型职责后端Java 25 Spring Boot 4.1 Hibernate ORM 7HTTP API、鉴权、元数据、文件处理、后台任务前端Angular 22 TypeScript Tailwind CSS单页应用SPA阅读器、书架管理、设置数据库MariaDB 11.4 Flyway书目、用户、进度、审计日志等结构化数据部署多阶段 Docker 构建前端产物打进后端 jar单容器 单端口交付关键入口文件后端启动类BookloreApplication.java后端构建脚本build.gradle.kts前端依赖清单package.json生产镜像定义Dockerfile 值得注意的设计构建时 Angular 的dist产物会被 Gradle 拷贝进 Spring Boot 的static目录最终只有一个 jar 在跑无需 Nginx 反代前端静态资源运维成本极低。后端架构Spring Boot 4 的现代化服务端后端是整套系统的心脏模块划分清晰backend/src/main/java/org/booklore/下按controller/service/repository/model分层共 50 个 Controller 覆盖书籍、书架、Kobo、OPDS、Komga、元数据等全部领域。核心框架栈Spring Boot 4.1.1 Java 25启用了语言预览特性--enable-preview并发模型使用虚拟线程——Tomcat 平台线程上限仅 10真正的并发交给虚拟线程处理这在 application.yaml 中有明确注释Spring Data JPA Hibernate 7.4所有数据访问走 JPA 仓库方法官方约定禁止随意引入原生 SQLSpring Security OIDC支持本地账号和 OIDC 登录如 PocketID还有远程代理头鉴权forward auth模式WebSocket STOMP向前端实时推送元数据进度、任务状态等事件Caffeine 缓存 springdoc OpenAPI热数据缓存、可按需开启 API 文档API_DOCS_ENABLEDtrue多媒体处理能力才是灵魂作为自托管图书库Grimmory 后端集成了大量硬核格式处理库能力依赖库PDF 渲染/解析pdfium4j按目标平台分发原生库支持交叉编译EPUB 解析epub4j项目自维护 fork有声书元数据M4B/MP3/OPUSjaudiotaggerCBR 漫画压缩包junrar commons-compress文件类型嗅探Apache TikaKobo KEPUB 转换容器内置 kepubify 二进制音频探测容器内置 ffprobe源自 static-ffmpeg这套组合拳让丢一个 EPUB 进去封面、简介、评分自动齐活的元数据流程成为可能——数据源包括 Google Books、Open Library 和 Amazon详见后端开发文档 backend/DEVELOPMENT.md。前端架构Angular 22 单页应用的工程实践前端采用Angular 22 TypeScript功能以 feature-based 方式组织在frontend/src/app/features/下目录即文档book/书库、readers/阅读器、metadata/元数据、settings/设置、stats/统计等。几个亮点四大内置阅读器ebook-readerFoliate.js 驱动、pdf-readerembedpdf/WASM、cbx-reader漫画、audiobook-player全部跑在浏览器里支持标注、高亮和进度同步状态管理TanStack Query 管理服务端缓存RxJS 处理流式数据实时通信stomp/rx-stomp 订阅后端 WebSocket 事件PWA 支持Angular Service Workerngsw-config.json 完整的 Web App Manifest离线可访问国际化21 种语言的 JSON 词条位于 frontend/src/i18n/通过 Crowdin 协作翻译质量保障Vitest 单测 Playwright E2Eplaywright/login-and-books.spec.ts数据库架构MariaDB Flyway 版本化迁移生产环境使用MariaDB 11.4Docker Compose 中采用 linuxserver 镜像测试环境切换为 H2 内存库。Grimmory 使用Flyway管理全部表结构变更迁移脚本位于backend/src/main/resources/db/migration/已积累100 个带版本号的 SQL 文件如V106__Add_physical_book_support.sql、V118__Create_pdf_annotations_table.sql每次升级容器Flyway 自动增量执行新脚本——升级不丢数据这是自托管项目长期维护的刚需数据模型覆盖书籍、书架、阅读进度、Kobo 同步状态、审计日志、OIDC 用户映射等 390 个实体模型文件一键部署多阶段 Docker 构建流水线Dockerfile 是一条教科书级的四段式流水线frontend-buildnode:24-alpine pnpm 离线安装依赖构建 Angular 生产包backend-buildgradle:9.5.1-jdk25-alpine执行bootJar并把前端dist注入 jar工具层从static-ffmpeg摘出ffprobe按 CPU 架构amd64/arm64拉取kepubify二进制运行层eclipse-temurin:25-jre-alpine作为最终基底只装libstdc、libarchive等最小依赖暴露6060 端口生产镜像还内置了 JVM 调优参数Shenandoah GC、字符串去重、60% 内存上限和健康检查/api/v1/healthcheck。官方提供了三套部署方案可按环境任选Docker Composedeploy/compose/docker-compose.ymlKubernetes Helmdeploy/helm/grimmory/Chart.yamlPodman Quadletdeploy/podman/quadlet/README.md最快上手三步部署自托管图书库准备.env填写数据库地址与账号示例见仓库 README复制并修改 docker-compose.yml挂载./books书库、./bookdrop自动导入目录执行docker compose up -d打开http://localhost:6060创建管理员账号支持格式一览EPUB / MOBI / AZW3 / FB2电子书、PDF、CBZ / CBR / CB7漫画、M4B / MP3 / OPUS有声书。若需 OIDC 登录可参考 docs/OIDC-Setup-With-PocketID.md。总结为什么这套架构值得参考维度设计取舍部署极简前后端打进一个 jar单容器 单端口无 Nginx数据可靠Flyway 版本化迁移升级零风险格式全能8 种多媒体格式处理库 原生二进制工具可扩展本地/OIDC/代理鉴权三模式支持 NFS 网络存储模式高性能Java 25 虚拟线程 Caffeine 缓存 前端虚拟滚动Grimmory 证明了一件事自托管图书库不一定要重——Spring Boot Angular MariaDB 的黄金组合配上克制的打包策略就能交付一个开箱即用的家庭数字图书馆 如果你想动手研究可以从 backend/DEVELOPMENT.md 和 frontend/DEVELOPMENT.md 入手官方文档也随源码完整提供。【免费下载链接】grimmoryA self-hosted library for your ebooks, comics, and audiobooks项目地址: https://gitcode.com/gh_mirrors/gr/grimmory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Atlas 300V 24G部署YOLO实战:从CANN转换到推理优化 1. 先弄明白:Atlas 300V 24G到底算什么东西1.1 名字拆解:300V是什么定位Atlas 300V 24G的完整身份,是华为昇腾(Ascend)系列里的一张AI推理加速卡,挂在Atlas 300系列产品线下,其中“V”代表产品代… · 2026/9/25 5:03:22
dht11-sensor积木使用手册:如何用1个积木读取实时温湿度?8个引脚选择指南一次讲清 dht11-sensor积木使用手册:如何用1个积木读取实时温湿度?8个引脚选择指南一次讲清 【免费下载链接】CupCode_DHT11温湿度模块 源师兄扩展项目: DHT11 | 由源师兄组织创建,兼容ohcode和cupcode平台 项目地址: https://gitcode.com/yuanshixi… · 2026/9/25 5:03:22
有孔虫化石形态测量与气候重建:Python数据分析全流程 简介:这份资源面向古生物学、地球科学与气候学领域的科研人员、学生及数据分析从业者,围绕有孔虫化石形态测量数据的气候重建与群落结构评估展开。内容基于377个地质时间点、每点约2000个个体的测量记录,涵盖大小、面积、形状因子、伸长率、球… · 2026/9/25 5:03:22
阅读笔记:《云计算关键领域安全指南v5》 云计算是一种运营模型和一组技术,用于通过对计算、网络、存储等资源的抽象来管理共享资源池。云计算能够实现通过网络访问可扩展且具有弹性的可共享的物理或虚拟资源池,并可按需进行自助式资源调配和管理。云可以由几乎任何计算资源组成,从处… · 2026/9/25 5:36:09
OpenShell Release Canary 实战指南:发布工件的最后一道冒烟关卡 【免费下载链接】OpenShell OpenShell is the safe, private runtime for autonomous AI agents. 项目地址: https://gitcode.com/gh_mirrors/op/OpenShell 点击查看 免费下载 OpenShell 的 Release Canary(工作流定义位于 .github/workflows/release-c… · 2026/9/25 5:36:09
Agent技能管理实战:从Prompt堆砌到结构化技能编排 做Agent开发也有小半年了,我最大的感受是:大多数人不是被模型能力卡住的,而是被“技能管理”卡住的。你让Agent做的事越多,它的行为就越不可控,Prompt越堆越长,到最后修一个bug能扯出一串连锁问题。这个项目… · 2026/9/25 5:36:09
【电路设计】常开和常闭开关/接触器 如何选? 在电路设计中经常碰见常开和常闭的开关或者接触器,本文将会简要按照我的理解说明一下常开,常闭的选择依据。常开常闭其实在正常的工况下没有什么过大的区别,但是在某些故障场景,常开和常闭就是非常重要的选择。常开:在… · 2026/9/25 5:35:56
工具调用已足够,现在基于 pkg/testing/README.md 及其源码完成文章编写。 编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 <output文章>
Dart S… · 2026/9/25 5:35:50
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37