本内容來源于@什麼值得買APP,觀點僅代表作者本人 |作者:LifeIsKillingMe
今天繼續跟大家分享一下NAS折騰的曆程,去年年底入了瑞芯RK3588的Rock 5b開發闆,因為是16GB的頂配版,是以可玩性非常不錯,可以在上面加裝傳感器,安裝各種各樣的Docker容器,實作各式複雜的功能。
安裝了OpenMediaVault(簡稱OMV)之後,主要使用的是裝駁在開發闆上的西數SN350固态硬碟作為存儲。我會将下載下傳的電影放在smb存儲中,然後通過海美迪電視盒子區域網路播放。
不久前有幸在張大媽衆測中了一個麥沃的K35262C的雙盤位陣列盒,加裝了兩個1TB的機械硬碟組成了RAID0,因為RAID0傳輸效率最高,适合對于資料安全完整性要求不高的場景。評測文寫完了,多出來的2TB存儲空間沒法充分利用,有點浪費,于是想着趁此機會嘗試搭建豆瓣自動追影系統。
這裡記述一下整個過程作為備份,供大家參考,我把期間遇到的問題和解決方法也特意标出了。内容較多全文近7000字,我懶得分成系列文章了,搞來搞去就是賺個幾塊錢的金币,大家看起來也麻煩。
自動追劇觀影的幾個方案
我在站内浏覽了大量相關方案的文章,國内玩家使用較多比較主流的就是這三種,NASTools、Video-Tools、Movie Robot。我自己嘗試了前兩個,因為Movie Robot需付費才能使用,價格還不便宜,是以直接放棄了。
NASTools自動化程度很高,UI界面很清晰,但是3.0.0版本之後需要綁定某些PT站點登入才能實作所有功能,對于不玩PT的玩家很不友好。我安裝了2.9.1的版本Docker不斷重新開機,無法正常使用。
Video-Tools沒有圖形界面,作者更新不頻繁,遇到問題自行解決需要一定技術能力。我安裝直接失敗,盲猜大概Video-Tools不支援ARM64架構?
是以幹脆還是嘗試了下外國的幾個開源方案的組合,也就是flaresolverr+jackett+qbittorrent+chinesesubfinder+radarr+sonarr+jellyfin。看起來比較多,其實裝起來還挺友善的。
NAS中預建相關檔案夾
首先在OMV中檢視我的存儲共享檔案夾的絕對位址是:/srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share。我這裡把所有視訊檔案、系統檔案都放到了同一個共享目錄中,友善管理。PUTTY裡登入到開發闆Debian系統,在共享檔案夾中建立所需檔案夾:
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/jackett
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/qbittorrent
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/radarr
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/tv
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/animation
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/movie
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/other
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/vr
mkdir -p /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/game
大家可以根據自己情況修改相關指令。
這裡還遇到一個問題,Docker鏡像在預設網絡設定下載下傳不了,修改為軟路由又出現路由錯誤。
這是因為軟路由Openwrt安裝在同一台主控端下,配置為macvlan模式,預設容器和主控端無法直接通訊,網上找到的方法,添加一個子網口和相關路由,使得二者可以直接通訊:
sudo ip link add foobar link enP4p65s0 type macvlan mode bridge
sudo ip addr add 192.168.1.252/32 dev foobar
sudo ip link set foobar up
sudo ip route add 192.168.1.111/32 dev foobar
這裡enp7s0是實體網卡的名字,192.168.1.252/32是新建立的子網口IP位址,192.168.1.111/32是使用macvlan的IP位址,這裡就是軟路由的IP位址。
改完之後再Pull Image就沒問題了,但是注意主控端重新開機後這一設定不會儲存,需要添加為開機腳本。
安裝Flaresolverr
flaresolverr 主要作用:用于一些indexer無法通過jackett通路cloudflare的問題,允許使用者通路網站而無需輸入驗證碼。
docker run -d
--name=flaresolverr
-p 8191:8191
-e LOG_LEVEL=info
-e TEST_URL=https://www.baidu.com
--restart unless-stopped
ghcr.io/flaresolverr/flaresolverr:latest
執行完指令等待容器啟動完成,浏覽器通路8191端口,出現以下字樣說明配置成功。
安裝Jackett
Jackett是一款開源的搜尋發現軟體。它提供了一個靈活的引擎,以搜尋跨多個網絡流媒體源及位于網絡之外的大型私人托管源。
docker run -d
--name=jackett
-e PUID=1000
-e PGID=1000
-e TZ=Asia/Shanghai
-e AUTO_UPDATE=true
-p 9117:9117
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/jackett:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
--restart unless-stopped
lscr.io/linuxserver/jackett:latest
在配置中設定管理者密碼。
将之前FlareSolverr的位址填入并儲存。
下面比較繁瑣的一步就是添加Indexer,國内Public的站點比較少,國外站點挺多,實測也能下載下傳。
國内Private站點大家可以點進去看看是否開放注冊。
安裝qbittorrent
qbittorrent是方案中用來BT下載下傳的工具。
docker run -d
--name=qbittorrent
-e PUID=1000
-e PGID=1000
-e TZ=Asia/Shanghai
-e WEBUI_PORT=8081
-p 8081:8081
-p 6881:6881
-p 6881:6881/udp
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/qbittorrent:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
--restart unless-stopped
docker.io/linuxserver/qbittorrent:latest
浏覽器通路8081端口,使用者名admin,密碼adminadmin登入。
這裡建議修改幾個設定,啟用UPnP,修改6881端口為随機端口,因為我發現某些網站會封禁6881端口。
網上搜尋找到Trackers清單拷到框内。其他設定可以酌情修改,比如同時下載下傳的作業數量,實測不少作業下載下傳速度為0也算是active downloads,這個參數可以提高一點。
同時勾選選項-進階中的總是向同級的所有Tracker彙報。
安裝radarr
Radarr配合Jackett,可以友善地對電影查詢下載下傳,同時Radarr的電影海報牆也能省去我們管理電影的麻煩。
docker run -d
--name=radarr
-e PUID=1000
-e PGID=1000
-e TZ=Asia/Shanghai
-p 7878:7878
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/radarr:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/tv:/tv
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/animation:/animation
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/movie:/movie
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/other:/other
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/vr:/vr
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/game:/game
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
--restart unless-stopped
docker.io/linuxserver/radarr:latest
浏覽器通路7878端口,可将界面UI語言改成中文,在媒體管理裡添加根目錄,除了Download檔案夾以外,其他目錄都要添加。
添加qBittorrent下載下傳用戶端。
添加索引器,URL為Jackett中的Copy Torznab Feed的内容,在Jackett同一頁面裡還可以查到API Key,一并填入。
然後可以嘗試手工搜尋電影,看看有沒有問題:
安裝sonarr
sonarr用于下載下傳美劇,因為最近都用網飛看劇了,暫時沒有安裝,方法和radarr基本相同。注意sonarr不支援中文。
docker run -d
--name=sonarr
-e PUID=1000
-e PGID=1000
-e TZ=Asia/Shanghai
-p 8989:8989
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/sonarr:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/tv:/tv
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/animation:/animation
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/movie:/movie
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/other:/other
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/vr:/vr
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/game:/game
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
--restart unless-stopped
docker.io/linuxserver/sonarr:latest
安裝jellyfin
Jellyfin是一個自由軟體媒體系統,它讓您能夠控制管理和流媒體。它是專有Emby和Plex的替代方案,可以通過多個應用程式從專用伺服器向最終使用者裝置提供媒體。Jellyfin是Emby 3.5.2版本的派生版本,并移植到.NET Core架構,以實作完全的跨平台支援。
docker run -d
--name=jellyfin
-e PUID=1000
-e PGID=1000
-e TZ=Asia/Shanghai
-e JELLYFIN_PublishedServerUrl=修改為自己的IP位址
-p 8096:8096
-p 8920:8920
-p 7359:7359/udp
-p 1900:1900/udp
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/jellyfin:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/tv:/tv
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/animation:/animation
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/movie:/movie
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/other:/other
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/vr:/vr
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/game:/game
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
--device /dev/dri:/dev/dri
--restart unless-stopped
nyanmisaka/jellyfin:latest
安裝完成後通路8096端口,完成賬号等簡單配置即可實作電影牆效果。
其他可以酌情設定,比如利用MetaShark來更新電影中繼資料。
發現linux系統對中文的字型支援的不好,ass字幕的Jellyfin支援也不是很好,顯示為方格,解決方法如下:
找到設定-字幕選擇下面的選項
強制字型為微軟雅黑:下載下傳msyh.woff2字型檔案拷貝到共享檔案夾中。
設定->控制台->播放
如果嘗試以上方法字幕依然顯示不正常,可以在Jellyfin的docker中直接安裝字幕檔案:
#列出容器ID
docker ps
#進入容器
docker exec -it 容器ID /bin/bash
#安裝字型
apt update
apt install fonts-noto-cjk-extra
我是做了這步後終于字幕顯示正常了。
Jellyfin在手機和電視盒子上都有相應的APP,簡單配置後即可使用。
安裝chinesesubfinder
Jellyfin裡自帶下載下傳字幕的插件:
安裝完成後需要重新開機jellyfin伺服器,然後就可以通過點選電影旁邊的三個點,調出字幕下載下傳界面。
上述截圖選自站内分享文章,我實測Open Subtitles都搜不出字幕,僅供大家參考,建議還是安裝chinesesubfinder。
docker run -d
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/appdata/chinesesubfinder:/config
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources:/media
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/tv:/tv
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/animation:/animation
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/movie:/movie
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/other:/other
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/vr:/vr
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/game:/game
-v /srv/dev-disk-by-uuid-1a88bf67-49bf-4d91-87b6-84017962a7b5/share/resources/downloads:/downloads
-e PUID=1000
-e PGID=1000
-e PERMS=true `# 是否重設/media權限`
-e TZ=Asia/Shanghai `# 時區`
-e UMASK=022 `# 權限掩碼`
-p 19035:19035
-p 19037:19037 `# webui 的視訊清單讀取圖檔用,務必設定不要暴露到外網`
--name chinesesubfinder
--hostname chinesesubfinder
--log-driver "json-file"
--log-opt "max-size=100m" `# 限制docker控制台日志大小,可自行調整`
allanpk716/chinesesubfinder:v0.53.3
浏覽器通路19035端口,在裡面選擇Jellyfin。
預設是6小時自動掃描媒體庫,也可以自己手動更新緩存手工點選下載下傳字幕。
實測不少電影還是找不到字幕,建議在字幕源設定裡添加其他網站的API。
自動下載下傳字幕的效果是這樣的,然後在Jellyfin裡電影播放界面點選cc按鈕即可加載中文字幕。
安裝RSSHUB
如果按照我的教程操作到這步,已經基本完成自動追劇系統搭建了,但是我的目的是要自動下載下傳豆瓣我想看裡的片單,因為這幾十年來所有觀影記錄都儲存在豆瓣裡,還有1199部想看但是還沒有看的影視作品,任重而道遠。
這裡就要請出RSSHUB了,RSSHub是一個開源、簡單易用、易于擴充的RSS生成器,可以給任何奇奇怪怪的内容生成 RSS 訂閱源。RSSHub借助于開源社群的力量快速發展中,目前已适配數百家網站的上千項内容,可以配合浏覽器擴充RSSHub Radar (opens new window)和移動端輔助App RSSBud (opens new window)(iOS) 與 RSSAid (opens new window)(Android) 使用。
可以通過vercel線上搭建RSSHub,但是實測更容易被豆瓣的反爬機制發現被封,還是通過Docker本地搭建靠譜。
運作下面的指令下載下傳 RSSHub 鏡像
$ docker pull diygod/rsshub
然後運作 RSSHub 即可
$ docker run -d --name rsshub -p 1200:1200 diygod/rsshub
此時浏覽器打開1200端口,似乎看不出什麼。研究一下RSSHUB裡關于豆瓣的訂閱文檔。
按照頁面中的文法,調取豆瓣自己想看的電影清單應該是這個URL。pagesCount參數是顯示的頁數。
http://192.168.1.66:1200/douban/people/32XXXXX/wish/pagesCount=200
後面的操作就簡單了,到Radarr中的清單裡添加自定義清單,指定為從這個URL抓取資訊。
随後回到Rararr的電影首頁裡,就可以看到已經在自動監控清單裡的電影了。不過這個用電影名字比對的方式準确性一般,如果有名字相同或類似的電影往往容易找錯電影,我這裡就莫名出現了不少情色片。
沒過多久,就可以注意到qbittorrent頁面添加了大量電影開始下載下傳了。因為我想看的電影大多都是舊片,種子較少,下載下傳速度一般,而我的設定又是2160p高清片源優先......不過NAS可以24小時挂機下載下傳。
Radarr電影下載下傳完成/更新提醒
本來我是想通過微信提醒Radarr電影下載下傳完成的,也找到了相關的項目腳本。
Oscar1011/XarrNotifyScripts
這個項目需要依托企業微信應用,但是現在企業微信應用要求在受信任IP位址中使用,自己搭建伺服器非常繁瑣,得不償失。碰巧發現IOS裡有個APP “LunaSea”也可以實作通知的功能,需要在美國App Store中下載下傳。
在Radarr的設定-安全-API秘鑰中擷取API的值。
手機上進到LunaSea裡Radarr的設定Connection Details裡。
分别填入Host位址和API值,測試通過。
這樣即可在手機APP裡檢視管理Radarr中的電影作業了。
而要想實作實時通知功能,需要用到Radarr通知連接配接裡的Webhook。
在LunaSea裡打開Settings-Notifications,點選Radarr裡的Device按鈕,會自動将URL拷貝至剪貼闆。
回到Radarr的設定-通知連接配接-添加連接配接Webhook,将之前的URL填入,方式為POST,即可完成配置。
如此一旦抓取或者下載下傳完新電影,都會手機通知我,非常友善。
總結
至此豆瓣自動追影追劇系統搭建完成,因為其間安裝配置的Docker比較多,最好提前安裝好Portainer友善管理這些容器。雖然操作略顯繁瑣,但是用到的都是開源方案,自由度比較高,友善自行DIY,建議大家點贊收藏此文,以防日後需要。謝謝大家支援!