最近找到了不少电子书,但是如何方便地在手机、Kindle 上阅读就成了一个问题。数据线传输吧,每次只复制一两本书太费劲。网络传输吧,Kindle 的浏览器体验实在不怎么样。邮件传输吧,Kindle 对文件类型有限制,邮件对文件大小有限制。
目前常用的网上电子书库有亚马逊和小米多看,一个是太花钱,一个是没有想看的书,对个人文档的同步功能均是点到为止,对桌面端的支持都很差。
最近一直在用 Calibre 在电脑上管理图书,那么有没有什么办法,把 Calibre 搬到网上,成为一个网络书库呢?
当然是可以的。
Calibre 作为一款图书管理工具,本身的功能非常齐全,还可以导入豆瓣上的图书元数据,可谓是非常方便了。除了界面有点复古、运行速度比较慢这两个缺点之外,已是图书管理界的佼佼者了。
我以 Calibre 作为关键词寻找优质的在线图书管理服务,很快找到了两个可供选择的服务:Calibre-web 和 COPS,此外,还有一个 BicBucStriim 也是不错的选择。还有 Calibrecontentserver 和 Calibre2OPDS 等服务,这里暂且不提。
经过比较,我得出了以下结论——
Calibre-web 是用 python 写的服务端,界面美观,功能全面,有原作者提供的现成 Docker 可以用,不过有不少人评论服务不是很稳定。
COPS 的全称是 Calibre OPDS (and HTML) Php Server,简陋但是功能丰富,支持 OPDS,相比 Calibre-web 不需要 Python 环境,服务相对比较稳定。
BicBusStriim 简洁但对元数据支持一般,作为基础的存储服务足够了。
作为一个颜控,这三款工具中自然是选择颜值最高最好用的 Calibre-web 了。
NAS 上的 Docker 如果不进行调试,不需要用到任何命令行,全靠 GUI,所以总体而言难度不大。先看看搭建完成后的书库再折腾吧。
为了避免麻烦,我选择在 NAS 安装 Docker 版本的 Calibre-web。
首先在套件中心中安装 Docker。
然后再注册表中搜索 calibre,可以找到多个 Calibre-web 的镜像。我们选择 janeczku/calibre-web 这个镜像(原因后面再提,这个是群晖 NAS 上最好用的镜像了)。
双击下载镜像,然后等待下载完毕。
在下载镜像的过程中,你可以到「控制面板 - 共享文件夹」中新建一个 books 文件夹。
然后在「 File Station - books 」下建立一个 calibre 目录。
当然你也可以选择建在其他的目录下。不过这里不建议直接用根目录作为书库目录,主要是权限问题。
建完 books/calibre 目录后,需要给他们分配足够的权限,保证 calibre-web 可以顺利运行。
依然在「控制面板」中,右键 books 共享文件夹,在「 books - 权限」选项卡中,给 http 用户组 777 权限,也就是勾选「管理、读取、写入」,并「应用到这个文件夹、子文件夹及文件」。
然后右键 calibre 目录,在「属性 - 常规」选项卡中,检查一下 http 用户组是否有读写权限。(如果是灰色的,点击「高级选项 - 使继承权限显式化」,就可以修改了。)
此外,还需要给用户分配权限,在「用户群组」的 http 用户组,点击「编辑 - 权限」,将 books 目录和 docker 目录的权限改为可读写。这一步不是必须的,但是这样不容易碰到额外的问题。
值得一提的是,如果你曾在套件中心里安装过 COPS 等服务,这个文件夹的「拥有者」可能会变成 root,需要改成你目前登录的用户,并应用到子文件夹。
这时候镜像应该已经下载完毕了。
在「映像」里,双击刚刚下载好的「 janeczku/calibre-web:latest 」会显示创建容器界面。
点击高级设置,要配置两个地方,一个是「卷 - 添加文件夹」,选择刚刚建立的 calibre 目录,确定。
然后在「装载路径」里输入「/books/calibre 」,第一个 /
不能省略。
装载路径代表的是 docker 内的路径,也就是说,把外部的目录映射到 docker 内,从而让 docker 可以读取外部的文件。
还需要在「端口设置」里修改「本地端口」,由于对外的 80 端口通常会被运营商封掉,可以设置为 8083 端口,这样对以后的外网访问也比较方便。
443 端口是 https,如果你没有 https 证书,这个设不设置都一样。
「 janeczku/calibre-web:latest 」这个 Docker 配置起来非常容易,这也是我选择它的一大原因了。然后点击下一步就可以生成容器了。
当你看到这个容器显示「运行中」,且 CPU 占用逐渐下降,说明已经启动完成了。
你可以访问 「 NAS 的内网 IP 」:8083
,比如 192.168.1.188:8083
,就可以进入 Calibre-web 的界面了。
这里会让你填写 Calibre 数据库的位置,如果前面的文件夹权限没有问题,这一步你可以填写 /books/calibre
,然后直接下一步(这里的所有选项后面都可以修改)。
理论上 Calibre-web 会自动新建一个数据库。如果不能新建或者报错,你需要在桌面版的 Calibre 里,在电脑上新建一个空白书库,然后把该目录下的 metadata.db 数据库文件,复制一份到 /books/calibre 目录下,这样应该不会出现问题。
注意,这里的数据库跟 MySQL 之类的没有半毛钱关系,全靠 Calibre 桌面版生成的 metadata.db 文件,这也会造成同步方面的一些问题,这里暂且不提。
正常情况下就能进入 Calibre-web 的主界面了,默认账户是 admin,默认密码是 admin123。进入主界面后可以设置新用户等,可以给每个用户分配不同的权限,设置为中文界面,都是图形化操作,非常简单。
如果显示 DB location is not valid, please enter correct path
,那么问题有点大,你可能需要检查一下文件夹的权限是不是有问题,当前用户是否有该目录的读写权限等(出现这个问题的最大可能是镜像本身的问题,这个问题是我在使用 linuxserver/calibre-web 时出现的,这个镜像无法读取本地文件)。
到这里位置,书库应该已经搭建完毕了。总体难度并不是很大,跟着一步一步做就不会出什么问题。
由于这个书库是我个人使用的,比较担心版权问题,因此不做传播,如果对 Calibre-web 感兴趣,可以看看 柠檬图书馆 这个网页,也是基于 Calibre-web 搭建的。
如果还碰到了其他的问题,参考这份 janeczku/calibre-web:latest 的 Docker 文档 可以解决大部分难题,这篇教程也是在各种英文文档的帮助下写出来的。所以喜欢折腾的人一定不能怕看文档。
其实相比第一次搭建,Calibre-web 的最大难题是后期的维护工作,这个放在下一章再讲。
个人博客传送门: http://ifoxfactory.com/2018/05/15/Synology-NAS-with-Calibre-web-one/
1
PigRinpoche 2018-05-15 10:40:58 +08:00 via Android
标题要改成群晖+,nas 可不是单一指的是群晖吧。挑剔一下
|
2
fengyunkkx OP @PigRinpoche 有理,改成「群晖 NAS 」了
|
3
qwjhb 2018-05-15 10:45:47 +08:00
我用 Windows server 直接开 Calibre 然后打开网络服务就好了=-=
|
4
fengyunkkx OP @qwjhb 其实 Calibre-web 和 Calibre 关系不大……用这个名字估计是因为需要 Calibre 的数据库吧。
话说回来 Docker 里也有一个完整版的 [Linux Calibre]( https://registry.hub.docker.com/u/aptalca/docker-rdp-calibre/) 带图形界面的软件系统占用真是太高了……舍不得给书库这么多资源。 |
5
qwjhb 2018-05-15 10:56:02 +08:00
@fengyunkkx 我主要是考虑稳定性 本来也是 docker 跑 结果极端压榨性能导致不稳定 后来直接 gen8 商 server 了 大不了多耗点电
带来的收益就是运行这些程序很方便 不用折腾(虽然 docker ce 也装着 跑 anki 服务器) |
6
fengyunkkx OP @qwjhb 这倒是,不用折腾服务端了,图书管理起来的也方便很多
|
7
EV3 2018-05-19 12:01:24 +08:00 via Android
正好需要这个 非常感谢 过两天折腾一下看看
|
8
xuxanwan 2018-05-23 12:25:43 +08:00 via Android
楼主买的是那个型号?有木有推荐的
|
9
maleclub 2018-10-05 11:59:18 +08:00
@qwjhb 你好,请教下,白群晖 docker 跑 ankiserver 的话,映射目录要怎么设置?配置文件 production.ini 提示找不到。可以指教下吗?感谢!!!
|
11
qwjhb 2018-10-14 23:07:36 +08:00
@maleclub
docker run -it -p 27701:27701 -v /tmp:/anki lertsenem/anki-server /tmp 改成自己的目录 docker ce 的话提前设置好共享 就可以 空文件夹配置文件会自己生成 好像 |
12
gzfrank 2018-11-25 20:48:05 +08:00
登录 admin 后变成 502 Bad Gateway,这是什么状况啊??
|
14
maleclub 2018-12-24 23:50:12 +08:00
@qwjhb
docker run -it -p 27701:27701 -v /tmp:/anki lertsenem/anki-server /tmp 改成我新的共享文件夹,操作好几次都失败,是不是因为共享文件夹带 ACL 权限的关系?该怎么处理? 我使用群晖自带的 docker ( 查了是 Docker version 17.05.0-ce, build 9f07f0e-synology ) 你说“提前设置好共享” 这句不大理是何意思,我比较笨,可以说详细点吗?谢谢 |
15
qwjhb 2018-12-25 09:07:17 +08:00
@maleclub 呃 可能是我之前瞎 没注意是群晖 我说的是 windows 下跑的 anki-server 需要设好共享。群晖的有报错提醒吗? anki-server 没有要求权限的吧
|
16
maleclub 2018-12-26 23:58:38 +08:00
@qwjhb 老哥,能帮我看下吗?感谢你。日志输入如下。有劳你了
```bash $ docker run -it --name AnkiServer -p 27701:27701 -v /volume1/anki:/anki lertsenem/anki-server # 日志输出如下 Missing 'production.ini' in anki root dir: adding... cp: can't stat '/anki/production.ini': Permission denied Missing 'collections' in anki root dir: adding... cp: can't stat '/anki/collections': Permission denied Missing 'auth.db' in anki root dir: adding... cp: can't stat '/anki/auth.db': Permission denied Traceback (most recent call last): File "/usr/bin/paster", line 11, in <module> sys.exit(run()) File "/usr/lib/python2.7/site-packages/paste/script/command.py", line 102, in run invoke(command, command_name, options, args[1:]) File "/usr/lib/python2.7/site-packages/paste/script/command.py", line 141, in invoke exit_code = runner.run(args) File "/usr/lib/python2.7/site-packages/paste/script/command.py", line 236, in run result = self.command() File "/usr/lib/python2.7/site-packages/paste/script/serve.py", line 282, in command relative_to=base, global_conf=vars) File "/usr/lib/python2.7/site-packages/paste/script/serve.py", line 324, in loadserver relative_to=relative_to, **kw) File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 255, in loadserver return loadobj(SERVER, uri, name=name, **kw) File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 271, in loadobj global_conf=global_conf) File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext global_conf=global_conf) File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 317, in _loadconfig loader = ConfigLoader(path) File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 393, in __init__ with open(filename) as f: IOError: [Errno 13] Permission denied: '/anki/production.ini' ``` |
17
qwjhb 2018-12-27 10:51:54 +08:00
/volume1/anki 权限错 读写不了文件 指定用户试试?
|
18
toyst 2019-09-26 10:20:07 +08:00
不知道数据库大了受不受得了
https://tanst.net |
19
TuBuFei 2019-10-02 20:36:52 +08:00
您好,请问一下,为什么我给了所有权限,但是也是死活不行呢???
Forbidden You don't have the permission to access the requested resource. It is either read-protected or not readable by the server. 一直提示这个错误 |
20
1065353767 2020-06-27 15:18:30 +08:00
为什么我填完数据库地址下一步就会变 500 内部服务器错误,再重启 https://www.v2ex.com/settings 容器就变 502badGateway
|
21
zzm88104 2022-08-14 12:46:43 +08:00
同 502
|