在完成基於 NAS 的 Podcast 訂閱管理平臺以及密碼庫之後,我將下一步「私有化」的目標瞄上了自己多年來的精心收藏的數字書庫。
我自己閱讀的電子書除了從 Kindle 商店購買書籍之外,還有就是從第三方渠道下載以及自己 DIY 的電子書了。以前這些自制的電子書都被我放在電腦的某個檔案目錄中,而隨著時間的推移,這些電子書檔案越來越多,如何對這些數字檔案進行高效的管理成為我心中的一大難題。
由於我主要的閱讀工具都是透過 Kindle 來閱讀,很少透過手機或者平板上進行電子書的閱讀,因此我從其他渠道下載以及 DIY 的電子書都是基於 Kindle 的電子書格式 azw3,這種格式雖然在 Kindle 硬體上可以獲得較好的閱讀體驗,但這也無形中讓我個人隨身書庫的打造帶來了相當多的難點,所以如果你也想打造類似的數字書庫,那麼下載的電子書的檔案格式可以選擇更為通用的 mobi,這樣無論是管理還是閱讀上都會更為方便。
下面就來介紹下我的個人隨身數字書庫打造過程吧。
使用工具來管理自己的電子書庫
以前我會將下載的 azw3 格式的電子書經過簡單的重新命名後,直接儲存在電腦的某個目錄中。當時的考慮非常簡單——將 AZW3 格式的電子書直接複製到 kindle 的儲存空間就可以在裝置上閱讀了。
這種操作方式最為簡單,但也帶來了管理上的難題——無法確認 kindle 中已經儲存了哪些書、是否重複等等。之後我開始使用桌面端的電子書管理軟體來對書籍進行管理,也就是使用開源的電子書管理器 calibre。
calibre 的優點在於可以透過刮削器完善書庫中的電子書元資料資訊,並且透過類似檔案同步的方式來實現本地數字書庫和 kindle 的電子書同步以及傳輸操作。同時 calibre 還可以實現電子書轉換、編輯等操作,可以說是現階段最為全面的本地化電子書管理工具了。
而透過將電子書匯入到 calibre 中,我逐步建立起一個基於本地電腦的個人電子書資料庫。而更大的設想還在後面——我能不能將其變成一個自己專屬的電子書書庫,並且實現全終端的在公網環境下的閱讀甚至管理?
我將實現目標轉向了家中的群暉。
基於 NAS 構建線上書庫做好第一步:將本地書庫轉移到 NAS 上
我的初期的目標很簡單——實現家中區域網內的桌面裝置(Windows 電腦和 Mac )可以訪問書庫並使用 calibre 進行管理即可,那麼首先就是要將原本儲存在電腦中的書庫轉移到 NAS 上,當然也需要為此新增一個共享資料夾。
接下來就是將原本儲存在 PC 上的書庫目錄複製到新建的 NAS 共享資料夾下面,我這裡在 book 目錄下方再建立了一個library目錄,然後將之前儲存到本地電腦中的書庫全部複製進去,需要注意是一定要把 metadata.db 這個檔案一併複製進去,也是書庫資料的關鍵。
接下來我們開啟桌面端的 calibre 開始切換書庫,點選工具欄中的「書庫」-「切換/建立書庫」,然後導航到網路中 NAS 下對應的 book 目錄並選擇library這個資料夾,並且勾選「使用當前現有的書庫位置作為新的位置」並點選確定,如果前面設定正常,你將會看到和之前本地書庫一樣的書籍列表,只不過這時候的書庫的位置被轉移到了區域網中的 NAS 上。
使用 calibre web 的 Docker 映象構建書庫資料庫
僅僅只是讓書庫放在 NAS 上透過 SMB 進行目錄共享,也只能透過區域網中的桌面裝置(Windows 電腦或者 Mac 電腦)進行訪問。顯然我希望的是實現全終端的訪問(這當然包括手機以及平板裝置),而要想實現這個目標,就需要為 NAS 上的虛擬書庫生成為 OPDS 的目錄結構。
OPDS 全稱為 Open Publication Distribution System,即開放出版物發行系統,透過這個系統我們就可以透過 App 或者網頁瀏覽器來對虛擬書庫進行管理和訪問,而不再需要透過檔案目錄訪問的形式來管理你的書庫。而要想生成 OPDS,我們就需要使用基於 calibre 的 web 分享服務,這裡我選擇的依舊是我們熟悉的 「Calibre-web」,只不過這次選擇了一個新的 Docker 映象版本(其實是此前我派介紹的映象版本有點太老了)。
在下載映象之前,我們需要對目標的檔案目錄進行許可權上的修改,這裡需要用到的除了之前我們存放虛擬書庫的 book 目錄之外,還需要一個存放配置檔案的目錄,這裡我在 docker 資料夾下建立了一個 calibre 目錄。
下面還是在 File station 中,選擇 book 目錄以及剛剛建立的 docker/calibre 並右擊屬性,在「許可權」選項卡中選擇 「Everyone」使用者組並點選「編輯」,選擇所有的許可權並授予全部許可權(全部控制),如果有 http 使用者組也可以以此類推進行許可權設定,這一步的設定主要是為了方便後續生成的應用容器可以正常讀寫該目錄。
在「映像」中找到雙擊剛剛下載的「linuxserver/calibre-web」,雙擊開始建立容器。
在設定頁面中點選高階設定,在「卷-新增資料夾」中選擇書庫目錄(比我我的路徑是book/library),轉載路徑輸入/books,然後再新增一個配置檔案路徑(比如我的是 docker/calibre),轉載路徑為 /config。
啟動後在瀏覽器中輸入http://你的 NAS ip:8083 進入設定頁面,這裡會要求你首先填入書庫的路徑,這裡輸入 /books 後點擊 submit 完成設定,需要說明的是如果出現相關錯誤提示,可以在回到 File station 中檢查 books 資料夾是否給「Everyone」提供了「全部控制」許可權。
然後你再訪問http://你的 NAS ip:8083,這時應該會直接進入到登入頁面,在 Username 這裡輸入 admin,在 Password 這裡輸入 admin123 完成登入,如果看到首頁上都是你收藏的書則表示 Calibre-web 已經成功建立你的線上書庫了!
這裡我們可以檢驗下 OPDS 是否建立成功,在瀏覽器的位址列輸入 http://你的 NAS ip:8083/opds 回車,如果彈出登入頁面則表示目錄建立成功。
讓 NAS 上的數字書庫可以在公網訪問
顯然我們看電子書不可能僅僅只在家中區域網環境內,我們更希望書庫可以「隨時隨地」都可以被訪問,因此這裡我們需要解決的就是公網訪問問題,這裡除了使用 DDNS 之外,我選擇了更穩定的 frp 內網穿透。
而在 NAS 上建立 frp 內網穿透服務,一般用得比較多的是使用 Docker 映象,考慮靈活以及穩定性上,我這裡選擇透過計劃任務來實現。
首先在群暉的 docker 目錄下建立 frpc 資料夾,在 frp 的 GitHub 主頁上下載對應版本的 frp 包(這裡選擇的是 Linux amd64 位版本),然後完全解壓縮將 frpc 檔案幾個 frpc.ini 檔案複製到 frpc 資料夾中。
在群暉的 File station 開啟 frpc 資料夾,使用文字編輯器開啟並新增一段新的配置專案(如圖)並儲存。
在建立任務選項卡輸入任務名稱,使用者賬號可以選擇 root(或者其他管理員賬號),然後再切換到「任務設定」中,在「使用者定義的指令碼」中輸入:
最後在「計劃任務」頁中選中 frpc 任務並點選執行。這是再使用http://<對映的公網 ip>:<對映的埠地址>訪問 calibre web,如果能顯示 calibre web 的登入頁面即表示內網穿透成功。
這樣我們就可以在非家中區域網的環境下,透過瀏覽器和各種應用來訪問自己的線上書庫了。
在多個平臺訪問和管理私人書庫
現在,我的私人數字書庫已經基本搭建完畢,可以透過瀏覽器在任何地方管理書庫,但我希望可以不僅僅只是透過瀏覽器來進行遠端管理和訪問,而希望即便是在公司的 PC 上也能管理家中的書庫,甚至可以直接在手機上開啟書庫並下載書籍。
因此我需要解決的問題是如何在外網上安全訪問到家中群暉的檔案目錄。
由於配置上的問題,最終我選擇的依舊是透過 SSH / sftp 方式來實現遠端的登入訪問,首先在群暉中開啟「控制面板」-「終端機和 SNMP」,勾選「啟動 SSH 功能」並設定一個埠(最好不是 22)。
然後在「檔案服務」中切換到 「FTP」 選項卡,然後勾選 「啟動 SFTP 服務」並設定和前面相同的埠號。
最後增加一條 frpc 的配置,同樣是開啟 frpc.ini 並新增下面的一段配置並儲存,最後重啟 frpc 服務使其生效。至於確認是否成功則可以在外網的電腦透過 SSH 終端嘗試是否可以登入。
在 PC 上管理 NAS 上的書庫
如果不考慮網頁端管理,實際上我們在外網 PC 上依舊可以透過 calibre 軟體進行管理,但這需要將群暉上相應的路徑掛載到檔案資源管理器上,這裡我透過的是 SFTP 協議進行掛載。
將遠端檔案路徑透過 sftp 協議掛載到檔案資源管理器,在 Windows 上最方便的當然是 raidrive。建立驅動器時選擇 NAS 下面的 SFTP,然後在位址列輸入 frp 對映的公網 IP 以及對映的埠,輸入 NAS 的賬號和密碼並掛載。成功後你就可以在網路位置上看到新掛載的碟符了。
開啟 calibre 然後選擇「書庫」-「切換/建立書庫」,定位到 raidrive 生成的新驅動器下的書庫目錄(我自己的路徑是:X:\book\library)並將其新增為新的書庫目錄,這時候你就可以看到 calibre 可以全部載入 NAS 上的書庫,並且實現外網直接透過管理。
在 Mac 上管理 NAS 上的書庫
和 Windows 類似,我們依舊選擇的是將群暉的檔案目錄透過 SFTP 對映到本地的驅動器路徑中,這裡我選擇的工具則是 cloudmounter ,使用的辦法可以參考支援 macOS / Windows,一站式網盤管理工具:CloudMounter。
掛載到訪達之後,開啟 Mac 上的 calibre,同樣是「書庫」-「切換/建立書庫」,這裡選擇剛剛掛載上去的群暉檔案目錄下的 「book/library」並且選擇「使用當前現有的書庫位置作為新的位置」,如果設定恰當,你同樣可以在 calibre 看到 NAS 的書庫列表,當然管理/增添書等操作也不在話下。
在 iPhone/iPad 打開個人數字書庫
移動端訪問書庫則要簡單一些,實際上就是使用第三方 App 讀取生成的 OPDS 地址來實現線上的書庫訪問,在 iOS 平臺我選擇的是 kyreader 這款 App,主要是這款應用滿足我的幾個需求:可以基於 OPDS 訪問書庫,同時支援解析 awz3 格式的電子書。
開啟 kyreader 後直接點選中間的「目錄」來新增書庫,輸入你的書庫名以及對應的 URL(http://<對映的公網 ip>:<對映的埠地址>/opds)並新增。然後在彈出的賬戶驗證中輸入 calibre web 的使用者名稱以及密碼,點選確認後就可以將個人書庫新增到目錄中了。
在 Android 裝置上打開個人數字書庫
相比 iOS 端,在 Android 上訪問書庫並且閱讀 AWZ3 格式的書反而更加麻煩一些,原因是單純的電子書閱讀器在對 azw3 格式的電子書檔案存在解析問題(會識別為 bin 資料檔案),因此在 Android 上需要透過兩款應用來實現我的需求。
首先我需要使用這款名為 calibre companion 的應用來實現書庫的連線,開啟應用點選右上角的 「setting」 進入 「Connecting to calibre」,在 「Content server connection」-「IP address and Port or URL」中輸入書庫映射出的公網 ip 和埠號。
calibre companion 連線到書庫後並不提供書籍的閱讀,因此點選書籍後只會提供meta資料顯示或者下載,點選下載之後會將書庫的電子書檔案儲存到 calibre companion 目錄下,這時候就需要要使用另一款電子書閱讀器FBReader進行電子書閱讀。
實際上 FBReader 就是用來解析 azw3 格式的電子書,點選側欄的「選擇檔案」,然後定位到 calibre companion 的檔案目錄就可以看到剛才下載的電子書檔案了,這時候選中就可以進行閱讀了,和 iOS 平臺類似,在 Android 平臺同樣不支援閱讀進度的同步。
結語
透過以上的一系列的操作,我終於實現了基於私有云的個人隨身電子書庫的搭建和外網訪問,實現了個人書庫的隨身裝置閱讀訪問。相比 Podcast 以及密碼管理的私有云搭建,工具更多也更為複雜,但依然不失為個人書庫的雲端管理解決方案之一。