群晖 NAS + Calibre-web 折腾记(一)- 初识、体验、安装 - V2EX
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 40624 次点击
    这是一个创建于 2717 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电子书管理的需求

    最近找到了不少电子书,但是如何方便地在手机、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 内部服务器错误,再重启 settings 容器就变 502badGateway
    zzm88104
        21
    zzm88104  
       2022-08-14 12:46:43 +08:00
    同 502
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3164 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:18 PVG 19:18 LAX 04:18 JFK 07:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86