V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
fengyunkkx
V2EX  ›  NAS

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

  •  
  •   fengyunkkx · 2018-05-15 10:34:44 +08:00 · 39990 次点击
    这是一个创建于 2390 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电子书管理的需求

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

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

    最近一直在用 Calibre 在电脑上管理图书,那么有没有什么办法,把 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,所以总体而言难度不大。先看看搭建完成后的书库再折腾吧。

    12

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

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

    安装 Docker

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

    01

    下载 Calibre-web 镜像

    然后再注册表中搜索 calibre,可以找到多个 Calibre-web 的镜像。我们选择 janeczku/calibre-web 这个镜像(原因后面再提,这个是群晖 NAS 上最好用的镜像了)。

    双击下载镜像,然后等待下载完毕。

    02

    新建书库

    在下载镜像的过程中,你可以到「控制面板 - 共享文件夹」中新建一个 books 文件夹。

    然后在「 File Station - books 」下建立一个 calibre 目录。

    当然你也可以选择建在其他的目录下。不过这里不建议直接用根目录作为书库目录,主要是权限问题。

    设置权限

    建完 books/calibre 目录后,需要给他们分配足够的权限,保证 calibre-web 可以顺利运行。

    依然在「控制面板」中,右键 books 共享文件夹,在「 books - 权限」选项卡中,给 http 用户组 777 权限,也就是勾选「管理、读取、写入」,并「应用到这个文件夹、子文件夹及文件」。

    11

    然后右键 calibre 目录,在「属性 - 常规」选项卡中,检查一下 http 用户组是否有读写权限。(如果是灰色的,点击「高级选项 - 使继承权限显式化」,就可以修改了。)

    此外,还需要给用户分配权限,在「用户群组」的 http 用户组,点击「编辑 - 权限」,将 books 目录和 docker 目录的权限改为可读写。这一步不是必须的,但是这样不容易碰到额外的问题。

    10

    值得一提的是,如果你曾在套件中心里安装过 COPS 等服务,这个文件夹的「拥有者」可能会变成 root,需要改成你目前登录的用户,并应用到子文件夹。

    配置容器

    这时候镜像应该已经下载完毕了。

    在「映像」里,双击刚刚下载好的「 janeczku/calibre-web:latest 」会显示创建容器界面。

    03

    点击高级设置,要配置两个地方,一个是「卷 - 添加文件夹」,选择刚刚建立的 calibre 目录,确定。

    04

    然后在「装载路径」里输入「/books/calibre 」,第一个 / 不能省略。

    装载路径代表的是 docker 内的路径,也就是说,把外部的目录映射到 docker 内,从而让 docker 可以读取外部的文件。

    05

    还需要在「端口设置」里修改「本地端口」,由于对外的 80 端口通常会被运营商封掉,可以设置为 8083 端口,这样对以后的外网访问也比较方便。

    443 端口是 https,如果你没有 https 证书,这个设不设置都一样。

    06

    「 janeczku/calibre-web:latest 」这个 Docker 配置起来非常容易,这也是我选择它的一大原因了。然后点击下一步就可以生成容器了。

    配置 Calibre-web

    当你看到这个容器显示「运行中」,且 CPU 占用逐渐下降,说明已经启动完成了。

    07

    你可以访问 「 NAS 的内网 IP 」:8083,比如 192.168.1.188:8083,就可以进入 Calibre-web 的界面了。

    08

    这里会让你填写 Calibre 数据库的位置,如果前面的文件夹权限没有问题,这一步你可以填写 /books/calibre,然后直接下一步(这里的所有选项后面都可以修改)。

    理论上 Calibre-web 会自动新建一个数据库。如果不能新建或者报错,你需要在桌面版的 Calibre 里,在电脑上新建一个空白书库,然后把该目录下的 metadata.db 数据库文件,复制一份到 /books/calibre 目录下,这样应该不会出现问题。

    注意,这里的数据库跟 MySQL 之类的没有半毛钱关系,全靠 Calibre 桌面版生成的 metadata.db 文件,这也会造成同步方面的一些问题,这里暂且不提。

    正常情况下就能进入 Calibre-web 的主界面了,默认账户是 admin,默认密码是 admin123。进入主界面后可以设置新用户等,可以给每个用户分配不同的权限,设置为中文界面,都是图形化操作,非常简单。

    09

    如果显示 DB location is not valid, please enter correct path,那么问题有点大,你可能需要检查一下文件夹的权限是不是有问题,当前用户是否有该目录的读写权限等(出现这个问题的最大可能是镜像本身的问题,这个问题是我在使用 linuxserver/calibre-web 时出现的,这个镜像无法读取本地文件)。

    12

    到这里位置,书库应该已经搭建完毕了。总体难度并不是很大,跟着一步一步做就不会出什么问题。

    由于这个书库是我个人使用的,比较担心版权问题,因此不做传播,如果对 Calibre-web 感兴趣,可以看看 柠檬图书馆 这个网页,也是基于 Calibre-web 搭建的。

    如果还碰到了其他的问题,参考这份 janeczku/calibre-web:latest 的 Docker 文档 可以解决大部分难题,这篇教程也是在各种英文文档的帮助下写出来的。所以喜欢折腾的人一定不能怕看文档。

    其实相比第一次搭建,Calibre-web 的最大难题是后期的维护工作,这个放在下一章再讲。

    个人博客传送门: http://ifoxfactory.com/2018/05/15/Synology-NAS-with-Calibre-web-one/

    21 条回复    2022-08-14 12:46:43 +08:00
    PigRinpoche
        1
    PigRinpoche  
       2018-05-15 10:40:58 +08:00 via Android
    标题要改成群晖+,nas 可不是单一指的是群晖吧。挑剔一下
    fengyunkkx
        2
    fengyunkkx  
    OP
       2018-05-15 10:43:13 +08:00
    @PigRinpoche 有理,改成「群晖 NAS 」了
    qwjhb
        3
    qwjhb  
       2018-05-15 10:45:47 +08:00
    我用 Windows server 直接开 Calibre 然后打开网络服务就好了=-=
    fengyunkkx
        4
    fengyunkkx  
    OP
       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
        5
    qwjhb  
       2018-05-15 10:56:02 +08:00
    @fengyunkkx 我主要是考虑稳定性 本来也是 docker 跑 结果极端压榨性能导致不稳定 后来直接 gen8 商 server 了 大不了多耗点电
    带来的收益就是运行这些程序很方便 不用折腾(虽然 docker ce 也装着 跑 anki 服务器)
    fengyunkkx
        6
    fengyunkkx  
    OP
       2018-05-15 10:58:37 +08:00
    @qwjhb 这倒是,不用折腾服务端了,图书管理起来的也方便很多
    EV3
        7
    EV3  
       2018-05-19 12:01:24 +08:00 via Android
    正好需要这个 非常感谢 过两天折腾一下看看
    xuxanwan
        8
    xuxanwan  
       2018-05-23 12:25:43 +08:00 via Android
    楼主买的是那个型号?有木有推荐的
    maleclub
        9
    maleclub  
       2018-10-05 11:59:18 +08:00
    @qwjhb 你好,请教下,白群晖 docker 跑 ankiserver 的话,映射目录要怎么设置?配置文件 production.ini 提示找不到。可以指教下吗?感谢!!!
    maleclub
        10
    maleclub  
       2018-10-05 12:42:44 +08:00
    @qwjhb 你好同学,我使用的是这个镜像 lertsenem / anki-server。配置这块可以指教下吗?谢谢
    qwjhb
        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 的话提前设置好共享 就可以
    空文件夹配置文件会自己生成 好像
    gzfrank
        12
    gzfrank  
       2018-11-25 20:48:05 +08:00
    登录 admin 后变成 502 Bad Gateway,这是什么状况啊??
    maleclub
        13
    maleclub  
       2018-12-24 23:27:08 +08:00
    @qwjhb 你好,可以请教下,关于群晖 docker 运行 anki Server 吗?有劳你。谢谢先
    maleclub
        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 )
    你说“提前设置好共享” 这句不大理是何意思,我比较笨,可以说详细点吗?谢谢
    qwjhb
        15
    qwjhb  
       2018-12-25 09:07:17 +08:00
    @maleclub 呃 可能是我之前瞎 没注意是群晖 我说的是 windows 下跑的 anki-server 需要设好共享。群晖的有报错提醒吗? anki-server 没有要求权限的吧
    maleclub
        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'
    ```
    qwjhb
        17
    qwjhb  
       2018-12-27 10:51:54 +08:00
    /volume1/anki 权限错 读写不了文件 指定用户试试?
    toyst
        18
    toyst  
       2019-09-26 10:20:07 +08:00
    不知道数据库大了受不受得了
    https://tanst.net
    TuBuFei
        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.
    一直提示这个错误
    1065353767
        20
    1065353767  
       2020-06-27 15:18:30 +08:00
    为什么我填完数据库地址下一步就会变 500 内部服务器错误,再重启 https://www.v2ex.com/settings 容器就变 502badGateway
    zzm88104
        21
    zzm88104  
       2022-08-14 12:46:43 +08:00
    同 502
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:22 · PVG 23:22 · LAX 07:22 · JFK 10:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.