群晖 NAS + Calibre-web 折腾记(一)- 初识、体验、安装

2018-05-15 10:34:44 +08:00
 fengyunkkx

电子书管理的需求

最近找到了不少电子书,但是如何方便地在手机、Kindle 上阅读就成了一个问题。数据线传输吧,每次只复制一两本书太费劲。网络传输吧,Kindle 的浏览器体验实在不怎么样。邮件传输吧,Kindle 对文件类型有限制,邮件对文件大小有限制。

目前常用的网上电子书库有亚马逊和小米多看,一个是太花钱,一个是没有想看的书,对个人文档的同步功能均是点到为止,对桌面端的支持都很差。

最近一直在用 Calibre 在电脑上管理图书,那么有没有什么办法,把 Calibre 搬到网上,成为一个网络书库呢?

当然是可以的。

本地管理工具 Calibre,寻找在线替代品

Calibre 作为一款图书管理工具,本身的功能非常齐全,还可以导入豆瓣上的图书元数据,可谓是非常方便了。除了界面有点复古、运行速度比较慢这两个缺点之外,已是图书管理界的佼佼者了。

我以 Calibre 作为关键词寻找优质的在线图书管理服务,很快找到了两个可供选择的服务:Calibre-web 和 COPS,此外,还有一个 BicBucStriim 也是不错的选择。还有 Calibrecontentserver 和 Calibre2OPDS 等服务,这里暂且不提。

经过比较,我得出了以下结论——

作为一个颜控,这三款工具中自然是选择颜值最高最好用的 Calibre-web 了。

NAS 上的 Docker 如果不进行调试,不需要用到任何命令行,全靠 GUI,所以总体而言难度不大。先看看搭建完成后的书库再折腾吧。

尝试在 NAS 上安装 Docker 版本的 Calibre-web

为了避免麻烦,我选择在 NAS 安装 Docker 版本的 Calibre-web。

安装 Docker

首先在套件中心中安装 Docker。

下载 Calibre-web 镜像

然后再注册表中搜索 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 配置起来非常容易,这也是我选择它的一大原因了。然后点击下一步就可以生成容器了。

配置 Calibre-web

当你看到这个容器显示「运行中」,且 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/

39980 次点击
所在节点    NAS
21 条回复
PigRinpoche
2018-05-15 10:40:58 +08:00
标题要改成群晖+,nas 可不是单一指的是群晖吧。挑剔一下
fengyunkkx
2018-05-15 10:43:13 +08:00
@PigRinpoche 有理,改成「群晖 NAS 」了
qwjhb
2018-05-15 10:45:47 +08:00
我用 Windows server 直接开 Calibre 然后打开网络服务就好了=-=
fengyunkkx
2018-05-15 10:51:40 +08:00
@qwjhb 其实 Calibre-web 和 Calibre 关系不大……用这个名字估计是因为需要 Calibre 的数据库吧。

话说回来 Docker 里也有一个完整版的 [Linux Calibre]( https://registry.hub.docker.com/u/aptalca/docker-rdp-calibre/) 带图形界面的软件系统占用真是太高了……舍不得给书库这么多资源。
qwjhb
2018-05-15 10:56:02 +08:00
@fengyunkkx 我主要是考虑稳定性 本来也是 docker 跑 结果极端压榨性能导致不稳定 后来直接 gen8 商 server 了 大不了多耗点电
带来的收益就是运行这些程序很方便 不用折腾(虽然 docker ce 也装着 跑 anki 服务器)
fengyunkkx
2018-05-15 10:58:37 +08:00
@qwjhb 这倒是,不用折腾服务端了,图书管理起来的也方便很多
EV3
2018-05-19 12:01:24 +08:00
正好需要这个 非常感谢 过两天折腾一下看看
xuxanwan
2018-05-23 12:25:43 +08:00
楼主买的是那个型号?有木有推荐的
maleclub
2018-10-05 11:59:18 +08:00
@qwjhb 你好,请教下,白群晖 docker 跑 ankiserver 的话,映射目录要怎么设置?配置文件 production.ini 提示找不到。可以指教下吗?感谢!!!
maleclub
2018-10-05 12:42:44 +08:00
@qwjhb 你好同学,我使用的是这个镜像 lertsenem / anki-server。配置这块可以指教下吗?谢谢
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 的话提前设置好共享 就可以
空文件夹配置文件会自己生成 好像
gzfrank
2018-11-25 20:48:05 +08:00
登录 admin 后变成 502 Bad Gateway,这是什么状况啊??
maleclub
2018-12-24 23:27:08 +08:00
@qwjhb 你好,可以请教下,关于群晖 docker 运行 anki Server 吗?有劳你。谢谢先
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 )
你说“提前设置好共享” 这句不大理是何意思,我比较笨,可以说详细点吗?谢谢
qwjhb
2018-12-25 09:07:17 +08:00
@maleclub 呃 可能是我之前瞎 没注意是群晖 我说的是 windows 下跑的 anki-server 需要设好共享。群晖的有报错提醒吗? anki-server 没有要求权限的吧
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'
```
qwjhb
2018-12-27 10:51:54 +08:00
/volume1/anki 权限错 读写不了文件 指定用户试试?
toyst
2019-09-26 10:20:07 +08:00
不知道数据库大了受不受得了
https://tanst.net
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.
一直提示这个错误
1065353767
2020-06-27 15:18:30 +08:00
为什么我填完数据库地址下一步就会变 500 内部服务器错误,再重启 https://www.v2ex.com/settings 容器就变 502badGateway

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX