用于跟踪个人图书馆的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