在完成基于NAS的Podcast订阅管理平台以及密码库之后,我将下一步「私有化」的目标瞄上了自己多年来的精心收藏的数字书库。
由于我主要的阅读工具都是通过Kindle来阅读,很少通过手机或者平板上进行电子书的阅读,因此我从其他渠道下载以及DIY的电子书都是基于Kindle的电子书格式azw3,这种格式虽然在Kindle硬件上可以获得较好的阅读体验,但这也无形中让我个人随身书库的打造带来了相当多的难点,所以如果你也想打造类似的数字书库,那么下载的电子书的文件格式可以选择更为通用的mobi,这样无论是管理还是阅读上都会更为方便。
下面就来介绍下我的个人随身数字书库打造过程吧。
以前我会将下载的azw3格式的电子书经过简单的重命名后,直接保存在电脑的某个目录中。当时的考虑非常简单——将AZW3格式的电子书直接拷贝到kindle的存储空间就可以在设备上阅读了。
这种操作方式最为简单,但也带来了管理上的难题——无法确认kindle中已经保存了哪些书、是否重复等等。之后我开始使用桌面端的电子书管理软件来对书籍进行管理,也就是使用开源的电子书管理器calibre。
calibre的优点在于可以通过刮削器完善书库中的电子书元数据信息,并且通过类似文件同步的方式来实现本地数字书库和kindle的电子书同步以及传输操作。同时calibre还可以实现电子书转换、编辑等操作,可以说是现阶段最为全面的本地化电子书管理工具了。
而通过将电子书导入到calibre中,我逐步建立起一个基于本地电脑的个人电子书数据库。而更大的设想还在后面——我能不能将其变成一个自己专属的电子书书库,并且实现全终端的在公网环境下的阅读甚至管理?
我将实现目标转向了家中的群晖。
我的初期的目标很简单——实现家中局域网内的桌面设备(Windows电脑和Mac)可以访问书库并使用calibre进行管理即可,那么首先就是要将原本存储在电脑中的书库转移到NAS上,当然也需要为此新增一个共享文件夹。
通过群晖的「控制面板」-「共享文件夹」,点击「新建」来创建书库目录(比如说我所创建的这个book目录),这里需要注意的是权限部分,为了方便访问可以给管理员以及访客开启「可读写」权限。
完成之后我们需要为该目录开启局域网内的共享访问,这里回到「控制面板」,然后在「文件服务」中找到「SMB服务」并勾选「启动SMB服务」。然后在「高级设置」里面对最低以及最高的SMB版本进行设置,并点击「应用」。
再回到当前的Windows电脑中打开「网络」,然后在共享的设备中查看是否有NAS这个设备,然后看一下里面是否有新建的这个书库文件夹(如果提示需要验证输入NAS的管理员的账户和密码),如果可以在这个文件夹里新建或者删除文件就表示创建成功。
接下来就是将原本保存在PC上的书库目录拷贝到新建的NAS共享文件夹下面,我这里在book目录下方再创建了一个library目录,然后将之前保存到本地电脑中的书库全部拷贝进去,需要注意是一定要把metadata.db这个文件一并拷贝进去,也是书库数据的关键。
接下来我们打开桌面端的calibre开始切换书库,点击工具栏中的「书库」-「切换/创建书库」,然后导航到网络中NAS下对应的book目录并选择library这个文件夹,并且勾选「使用当前现有的书库位置作为新的位置」并点击确定,如果前面设置正常,你将会看到和之前本地书库一样的书籍列表,只不过这时候的书库的位置被转移到了局域网中的NAS上。
仅仅只是让书库放在NAS上通过SMB进行目录共享,也只能通过局域网中的桌面设备(Windows电脑或者Mac电脑)进行访问。显然我希望的是实现全终端的访问(这当然包括手机以及平板设备),而要想实现这个目标,就需要为NAS上的虚拟书库生成为OPDS的目录结构。
在下载镜像之前,我们需要对目标的文件目录进行权限上的修改,这里需要用到的除了之前我们存放虚拟书库的book目录之外,还需要一个存放配置文件的目录,这里我在docker文件夹下创建了一个calibre目录。
接下来打开群晖的Docker,在侧栏中点击注册表并搜索「Calibre-web」,并选择搜索结果中出现的「linuxserver/calibre-web」这个镜像,双击进行下载并等待下载完毕。
在「映像」中找到双击刚刚下载的「linuxserver/calibre-web」,双击开始创建容器。
在设置页面中点击高级设置,在「卷-添加文件夹」中选择书库目录(比我我的路径是book/library),转载路径输入/books,然后再添加一个配置文件路径(比如我的是docker/calibre),转载路径为/config。
切换到端口设置选项卡,在本地端口上填入和容器端口一致的8083端口,完成之后选择点击「应用」并启动容器。
显然我们看电子书不可能仅仅只在家中局域网环境内,我们更希望书库可以「随时随地」都可以被访问,因此这里我们需要解决的就是公网访问问题,这里除了使用DDNS之外,我选择了更稳定的frp内网穿透。
而在NAS上创建frp内网穿透服务,一般用得比较多的是使用Docker镜像,考虑灵活以及稳定性上,我这里选择通过计划任务来实现。
在群晖的Filestation打开frpc文件夹,使用文本编辑器打开并添加一段新的配置项目(如图)并保存。
在打开「控制面板-计划任务」,点击「新增-计划的任务-用户定义的脚本」。
在创建任务选项卡输入任务名称,用户账号可以选择root(或者其他管理员账号),然后再切换到「任务设置」中,在「用户定义的脚本」中输入:
nohup/volume1/docker/frpc/frpc-c/volume1/docker/frpc/frpc.ini&在「计划」中设定任务排期(随便填写)点击保存。
回到「计划任务」页选中新建的任务并点击「设置」,勾选「保存输入结果」并将其保存到和frp相同的目录并点击确定。
这样我们就可以在非家中局域网的环境下,通过浏览器和各种应用来访问自己的在线书库了。
现在,我的私人数字书库已经基本搭建完毕,可以通过浏览器在任何地方管理书库,但我希望可以不仅仅只是通过浏览器来进行远程管理和访问,而希望即便是在公司的PC上也能管理家中的书库,甚至可以直接在手机上打开书库并下载书籍。
因此我需要解决的问题是如何在外网上安全访问到家中群晖的文件目录。
然后在「文件服务」中切换到「FTP」选项卡,然后勾选「启动SFTP服务」并设置和前面相同的端口号。
如果不考虑网页端管理,实际上我们在外网PC上依旧可以通过calibre软件进行管理,但这需要将群晖上相应的路径挂载到文件资源管理器上,这里我通过的是SFTP协议进行挂载。
将远程文件路径通过sftp协议挂载到文件资源管理器,在Windows上最方便的当然是raidrive。创建驱动器时选择NAS下面的SFTP,然后在地址栏输入frp映射的公网IP以及映射的端口,输入NAS的账号和密码并挂载。成功后你就可以在网络位置上看到新挂载的盘符了。
打开calibre然后选择「书库」-「切换/创建书库」,定位到raidrive生成的新驱动器下的书库目录(我自己的路径是:X:\book\library)并将其添加为新的书库目录,这时候你就可以看到calibre可以全部载入NAS上的书库,并且实现外网直接通过管理。
挂载到访达之后,打开Mac上的calibre,同样是「书库」-「切换/创建书库」,这里选择刚刚挂载上去的群晖文件目录下的「book/library」并且选择「使用当前现有的书库位置作为新的位置」,如果设置恰当,你同样可以在calibre看到NAS的书库列表,当然管理/增添书等操作也不在话下。
移动端访问书库则要简单一些,实际上就是使用第三方App读取生成的OPDS地址来实现在线的书库访问,在iOS平台我选择的是kyreader这款App,主要是这款应用满足我的几个需求:可以基于OPDS访问书库,同时支持解析awz3格式的电子书。
打开书库,在最新添加中就可以看到你的书库目录了,这里我选择一本azw3格式的书,然后点击下载就可以下载到手机中,直接点击阅读就可以用kyreader进行阅读了。唯一的缺点就是并不支持阅读进度同步(显然这个要求有些太难了)。
相比iOS端,在Android上访问书库并且阅读AWZ3格式的书反而更加麻烦一些,原因是单纯的电子书阅读器在对azw3格式的电子书文件存在解析问题(会识别为bin数据文件),因此在Android上需要通过两款应用来实现我的需求。
然后在应用首页点击右上角的「connect」-「toContentServer」并输入书库的用户名和密码完成书库的连接。
实际上FBReader就是用来解析azw3格式的电子书,点击侧栏的「选择文件」,然后定位到calibrecompanion的文件目录就可以看到刚才下载的电子书文件了,这时候选中就可以进行阅读了,和iOS平台类似,在Android平台同样不支持阅读进度的同步。
通过以上的一系列的操作,我终于实现了基于私有云的个人随身电子书库的搭建和外网访问,实现了个人书库的随身设备阅读访问。相比Podcast以及密码管理的私有云搭建,工具更多也更为复杂,但依然不失为个人书库的云端管理解决方案之一。