用于跟踪个人图书馆的BookLogr
什么是 BookLogr ?
BookLogr是一款网络应用,旨在帮助您轻松管理个人图书馆。这项自托管服务可确保您完全控制数据,提供安全且私密的方式来跟踪您拥有、阅读或希望阅读的所有书籍。您也可以选择向公众自豪地展示您的图书馆,与您的朋友和家人分享。

官方给的重要的提示:
- 该项目正在积极开发中。
- 预计会出现错误和重大变化。
BookLogr 和 Calibre 不同,并不提供书籍管理,而是类似于豆瓣的书影音档案,帮助用户收纳和归档自己的书籍,可以创建书单, 记录读书笔记,在阅读过程中,还可以对书籍进行打分、并写评论。这不仅有助于个人记录,也能与其他用户分享你的阅读体验。
BookLogr 跟老苏之前介绍过的 Koillection 或者 Ryot 有一定的相似之处。
构建镜像
官方没有提供镜像,但是 API 和认证服务提供了 Dockerfile,前端则没有,老苏只是为了体验一下,没有像往常采用多阶段构建,而是采用了开发模式构建
认证服务
构建镜像的基本命令如下👇
| 1 | # 拉取源代码 | 
API 服务
构建镜像的基本命令如下👇
| 1 | # 拉取源代码 | 
前端
需要准备一个 Dockerfile 文件,这是一个以开发模式运行的容器,包含了运行所需要的库
| 1 | # 使用 Node.js 作为基础镜像 | 
构建镜像的基本命令如下👇
| 1 | # 假设你当前在 booklogr 目录, 需要进入子目录 | 
顺便提一句,老苏所有折腾过的
dockerfile都上传到了Github:https://github.com/wbsu2003/Dockerfile/
反向代理
API 服务采用了 Python Flask 开发,所以又遇到了我们熟悉的跨域问题
| 1 | Access to XMLHttpRequest at 'http://192.168.0.197:5004/v1/books' from origin 'http://192.168.0.197:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. | 
没有找到相关的设置,所以还是使用 npm 来解决。由于不涉及公网访问,本文还是采用了 tailscale + npm 方案
文章传送门:用自定义域名访问tailscale节点
假设我们访问地址如下:
| 域名 | 局域网地址 | 备注 | 
|---|---|---|
| book.xxsu.cf | http://192.168.0.197:5173 | 前端 web的访问地址 | 
| api.xxsu.cf | http://192.168.0.197:5004 | API服务的访问地址 | 
| auth.xxsu.cf | http://192.168.0.197:5003 | 认证服务的访问地址 | 
前端在 npm 中的设置,另外两个服务除了域名和端口,其他是一样的

SSL 中照例都勾选了

API 服务和认证服务的设置到此就结束了,但是前端 Web 还有个关键的步骤,需要在 Advanced 中填入下面的内容
| 1 | location /v1 { | 

这段代码的作用就是:
- 为所有 /v1开头的请求设置CORS头,允许来自https://book.xxsu.cf的跨域请求;
- 将所有这些请求代理到本地的 5004端口服务,也就是API服务;
所以你要根据自己的域名和 IP 进行修改
安装
因为涉及到多个容器,所以采用 docker-compose 方式安装
env.txt
首先要准备一个 env.txt 文件
| 1 | FLASK_APP=api.app | 
做个简单说明:
- DATABASE_URL:如果数据库的相关设置做了修改,这里也要跟着变;
- AUTH_SECRET_KEY:随机字符串;
- AUTH_ALLOW_REGISTRATION:是否允许未经身份验证的用户注册账户;
- AUTH_REQUIRE_VERIFICATION:当允许注册时,是否求用户验证其电子邮件地址;
- GOOGLE_CLIENT_ID:如果您想允许使用- Google进行身份验证,请将其更改为您自己的- Google客户端- ID,如果你不使用,保留默认就可以,千万别注释,会导致页面白屏;
- GOOGLE_CLIENT_SECRET:- Google客户端密钥;
- POSTGRES_USER:数据库用户;
- POSTGRES_PASSWORD:数据库用户对应的密码;
- POSTGRES_DB:数据库库名;
- VITE_API_ENDPOINT:- booklogr API服务的- URL;
- VITE_AUTH_API_URL:认证服务的- URL;
- VITE_GOOGLE_CLIENT_ID:需跟- GOOGLE_CLIENT_ID一致;
- VITE_DISABLE_HOMEPAGE:删除主页并直接重定向到登录页面或库(如果您已经登录)。
更多环境变量的说明,请参考官方的 wiki:https://github.com/Mozzo1000/booklogr/wiki/ENV-variables
docker-compose.yml
将下面的内容保存为 docker-compose.yml 文件
| 1 | services: | 
然后执行下面的命令
| 1 | # 新建文件夹 booklogr 和 子目录 | 
文件结构如下

如果一切正常,应该有 5 个容器

运行
在浏览器中输入 https://book.xxsu.cf 就能看到主界面

第一次需要 Register 自己的账号

如果显示需要验证码,不用管它,直接 Login 就行

登录成功后的主界面

搜索一本书
需要将
openlibrary.org加入到科学网的黑名单,否则是搜不到内容的

点 Add to list 将书加入书单

可以选择阅读状态

添加成功会有提示

在 My Library  中进入相应的状态,可以找到添加的书籍

在 Profile 中查看

点 Open Library 会跳转到相应的网站
Open Library是一个开放的、可编辑的图书馆目录,旨在为每本出版过的书籍创建一个网页。截至2018年10月,该平台已经收录了超过36万本书籍。这个项目类似于维基百科,用户可以自由地编辑和贡献内容。

下拉可以借阅

随便翻一翻

如果看书完了,可以 Set as finished,然后可以打分,并分享到 Mastodon

还可以写Notes

Add note

随便写点啥

在书库里会有相应的显示

参考文档
Mozzo1000/booklogr: A simple, self-hosted service to keep track of your personal library 📚
地址:https://github.com/Mozzo1000/booklogrBookLogr
地址:https://demo.booklogr.appHome · Mozzo1000/booklogr Wiki
地址:https://github.com/Mozzo1000/booklogr/wikiinternetarchive/openlibrary: One webpage for every book ever published!
地址:https://github.com/internetarchive/openlibrary
