为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客
群晖NAS教程(十一)、利用Docker搭建个人图书馆(calibre-web)
个人图书馆(calibre-web)是超级棒的一个个人图书馆软件,可以像群晖的video station那样使用挂刷器来管理和观看图书,特别棒。
一、下载calibre-web镜像
在群晖docker套件中搜索calibre,选择第二个下载,之所以选这个,是因为它拥有图书格式转换的功能。
然后慢慢等待镜像下载好。
二、配置calibre启动参数
在群晖上创建文件夹config和books,分别挂载到docker镜像的磁盘/calibre-web/config和/books,不清楚的可以看镜像介绍,很easy。这里在群晖创建的两个文件夹,权限一定要给足,让任何人都可以访问,如果在群晖上操作不方便,可以考虑ssh连接群晖使用chmod -R 777来操作。
映射端口:
在启动环境变量增加两个PUID和PGID,这个有点难说明白,就默认按照截图写吧,表示登录admin用户的权限。
把初始化的metadata.db文件拷贝到上面步骤创建的config文件夹下,我的是e-book/library/config。
如果不知道metadata.db怎么获得,可以在win11上安装calibre,安装过程中会提示选择书库的目录,就在这个下面。
安装好启动即可,默认用户名密码是:admin/admin123。
数据库配置,如果你是安装我的步骤选的,把metadata.db复制到了config目录下,那么这里填写/calibre-web/config就行。
下面我们简单配置一下calibre,选择右上角的设置按钮,然后选功能配置,把启用上传打上勾。
三、配置豆瓣挂刷器
在群晖docker套件中,打开calibre的后台命令窗口,找到scholar.py文件,我们在同目录下增量豆瓣的py文件。
执行命令如下:
#回到上一级目录
cd ../
# 寻找scholar.py文件
find -name scholar.py
# 进入到scholar.py文件所在路径
cd ./app/cps/metadata_provider/
# 新增一个Newdouban.py文件
vi Newdouban.py
Newdouban.py内容如下,文件是从calibre原始镜像仓库拷贝过来的:
import re
import time
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
from urllib.parse import urlparse, unquote
from lxml import etree
from functools import lru_cache
from cps.services.Metadata import Metadata
DOUBAN_SEARCH_JSON_URL = "https://www.douban.com/j/search"
DOUBAN_BOOK_CAT = "1001"
DOUBAN_BOOK_CACHE_SIZE = 500 # 最大缓存数量
DOUBAN_CONCURRENCY_SIZE = 5 # 并发查询数
DEFAULT_HEADERS = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3573.0 Safari/537.36'
}
PROVIDER_NAME = "New Douban Books"
PROVIDER_ID = "new_douban"
class NewDouban(Metadata):
__name__ = PROVIDER_NAME
__id__ = PROVIDER_ID
def __init__(self):
self.searcher = DoubanBookSearcher()
super().__init__()
def search(self, query, generic_cover=""):
if self.active:
return self.searcher.search_books(query)
class DoubanBookSearcher:
def __init__(self):
self.book_loader = DoubanBookLoader()
self.thread_pool = ThreadPoolExecutor(max_workers=10, thread_name_prefix='douban_async')
def calc_url(self, href):
query = urlparse(href).query
params = {
item.split('=')[0]: item.split('=')[1] for item in query.split('&')}
url = unquote(params['url