本文Ivon示範使用Docker部署Sonarr + Jackett + qBittorrent + Jellyfin + LunaSea的過程。
目標是在Linux伺服器,透過Docker架設Sonarr,跑自動BT動漫影片下載服務,並透過Jellyfin影片伺服器串流播放。
這樣的話,就可以建立自動追劇、追新番的服務了。
Sonarr為專門下載電視劇和動漫的服務,由於架設過程類似,Radarr(下載電影)、Lidarr(下載音樂)、Readarr(下載電子書)的用戶也可以參考之。
1. Sonarr用途為何,以及準備項目#
Sonarr為一款開源的BT下載管理器,支援Linux/Windows/macOS,提供非官方Docker映像檔。
為什麼叫做Sonarr?其實Sonarr以前叫Nzbdrone,用來下載nzb檔(P2P專用的檔案格式),後來也能下載torrent檔案。sonar本身是聲納的意思,加二個r可能是為了取個搞笑的特別名字。於是乎類似Sonarr的軟體都依循此字尾重複的取名規則。
現在Sonarr支援下載Usenet與BT種子資源,我用比較常見的BT當例子。
用Sonarr好處在哪?試想過去手動下載BT種子的流程:到特定網站手動取得.torrent
檔案,再手動開啟BT客戶端,開始下載做種,事後還要手動整理檔案。
在安裝Sonarr後一切就可以自動化了,省去了手動找torrent檔案的麻煩,直接在網頁介面搜尋即可。Sonarr可以跟BT下載軟體協同作戰,自動搜尋網路種子,自動取得電視劇的資訊,再自動分類下載後的內容。
那麼Sonarr扮演的具體角色為何?請看RapidSeedbox製作的原理圖:Sonarr透過類似RSS的索引服務,找網路上的種子檔案,並將其傳給BT下載軟體。
Sonarr可視作下載BT影片的「控制中心」,集中追蹤BT種子,自動按照畫質、語言、特定集數的搜尋條件去找種子,並在下載後自動將影片分類到各個資料夾。
要讓控制中心正常運作,需要加入索引服務讓Sonarr搜尋網路資源,接著Sonarr才能呼叫BT軟體執行下載任務。
為此要準備:
種子索引器(Indexer):我使用Jackett做索引方案,整合了許多BT索引器。Jackett本身是代理服務,將Sonarr的查詢字串轉譯為http請求,查詢種子追蹤器網站之後再將結果傳回Sonarr。
BT下載軟體:Sonarr支援搭配uTorrent、qBittorrent、Deluge、Flood使用,我選擇qBittorrent。這篇文章我會把BT軟體容器化,並用網頁存取,無須在本機安裝BT軟體。
Sonarr:控制中心本體,架起來後用網頁存取。其實Sonarr有很多分支版,功能大同小異,最常見的是Radarr、Lidarr、Readarr,linuxserver.io多半有打包好的Docker映像檔。這裡使用的Sonarr是專門下載電視劇和動漫之用。
(選擇性)商業VPN服務:讓電腦或Docker容器連上VPN再行下載BT,降低被片商抓到載盜版的機率。推薦Mullvad或ProtonVPN,搭配 Gluetun讓容器走VPN連線。
(選擇性)Jellyfin:影音伺服器軟體, 這篇我有講過裝法。雖說BT下載的影片會直接進到硬碟資料夾,可直接任意播放器開啟觀看,我們何不進一步將用途擴充呢?建設一個串流伺服器,BT下載的影片,交給Jellyfin立即掃描整理,就可以透過其他裝置串流觀賞。
2. 以docker-compose部署Sonarr#
我使用linuxserver.io打包的Docker映像檔,這裡要跑3個服務協同作戰:
一、Sonarr:服務本體
二、Jackett:索引服務
三、qBittorrent:BT下載服務
安裝 Docker
依序建立三個服務存放資料的目錄
cd ~
mkdir sonarr jackett qbittorrent
- 進入Sonarr目錄
cd sonarr
- 撰寫docker-compose,使用一般使用者跑服務(UID:1000,GID:1000),時區設定為
Asia/Taipei
。qBittorrent的下載目錄跟Sonarr共用。
version: '3'
services:
sonarr:
container_name: sonarr
restart: unless-stopped
ports:
- 8989:8989
volumes:
# Sonarr設定檔目錄
- /home/user/sonarr/config:/config
- /home/user/sonarr/tv:/tv
# Sonarr下載目錄
- /home/user/sonarr/downloads:/downloads
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei
image: lscr.io/linuxserver/sonarr:latest
jackett:
container_name: jackett
restart: unless-stopped
ports:
- 9117:9117
volumes:
- /home/user/jackett/config:/config
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei
image: lscr.io/linuxserver/jackett:latest
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei
## qBittorrent的網頁介面通訊埠
- WEBUI_PORT=8080
volumes:
- /home/user/qbittorrent/config:/config
- /home/user/sonarr/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: unless-stopped
- 啟動全部服務
docker compose up -d
注意:下面將一律用網頁存取服務,本機的話就是localhost
。如果您是從另一部裝置存取,那麼網址就要打該機器的IP,例如192.168.0.11
。
3. 設定索引器Jackett#
先到Jackett設定要使用的索引。可以添加多個索引,比方說我中英文字幕的影片都能接受,就把英語系與中文系的加入。
瀏覽器開啟:
http://localhost:9117
點選Add Indexer按鈕
勾選三個動漫索引器:Anime Tosho(英文)、Anime Time(英文)、Simple Anime(中文),點選Add Selected
保持這個頁面開著。
4. 設定BT軟體qBittorrent#
- 相關文章: qBittorrent操作教學
- 開啟WebUI:
http://localhost:8080
註:qBittorrent Docker版可能會遇到unauthorized錯誤,解決方法見此
- 關閉容器服務
cd ~/sonarr
docker compose down
- 找到
~/qbittorrent/config/qBittorrent/qBittorrent.conf
,在末尾加入
WebUI\HostHeaderValidation=false
WebUI\CSRFProtection=false
- 重新啟動容器服務
docker compose up -d
登入網頁界面,預設帳號admin,密碼請看docker log訊息裡隨機產生的數字
點選Tools → Options → WebUI → Languages,設定語言為中文。再於「驗證」處修改預設帳號密碼。
在「連線」與「速率」頁面,自行估量網路性能,設定下載與上傳數。
保持此頁面開著。
5. 設定Sonarr的追蹤內容#
本節連線的時候可能需要填寫伺服器區域IP或容器的IP。用docker ps
查看全部容器的名稱,再用docker inspect "容器名稱" | grep "IPAddress"
取得特定容器的IP。
開啟Sonarr網頁介面:http://localhost:8989
點選左邊的Settings
依序設定:
5.1. Media management#
下載目錄的命名規則。如果要搭配Jellyfin串流影片,則這裡的設定就很重要,有助於Jellyfin爬取到正確影片資訊。
接著設定下載的root folder,指向/downloads
。每部動畫自動新增一個資料夾存放。
切換到General → Security,Authentication選Login Page,設定帳號密碼。
5.2. Profiles#
點選Language Profiles。
我設定優先度依序為日文、英文、中文。這樣Sonarr就會優先搜尋日語版影片,而不會抓到配音版。
5.3. Indexer#
由於我有3個索引,每個索引都要手動添加一次
點選使用Torznab協定
回到Jackett網頁,點選索引器旁邊的
Copy Torznab Feed
複製網址,還有右上角的API Key。回到Sonarr頁面,在網址貼上Copy Torznab Feed網址和API Key。記得網址的
localhost
要改成Jackett容器的區域IP如圖勾選Categories,設定TV/Anime
點選Test按鈕,確認能否正常連線,再按Save
以此類推,將3個索引器新增上去。
5.4. Download Client#
列表選取qBittorrent
填入qBittorrent的容器IP(同樣要使用Docker容器的IP),以及WebUI的帳號密碼
點選Test,確認能否正常連線,後按Save。
6. 實際下載動漫影片#
回到Sonarr首頁,直接搜尋動漫。透過 TVDB可以找到更精確的電視劇名稱,英文為佳
直接模糊搜尋名字也可以,比方說"spy family"
點選加入監測列表,設定搜尋1080p畫質的影片
預設是搜尋整季的,旁邊的書籤符號代表追蹤的集數。
之後Sonarr就會開始搜尋種子。按照我上面的Profile語言設定,搜尋到影片的應該是日語版為主,有的則是內嵌多國字幕的版本。
找到種子後會自動新增下載任務,傳給qBittorrent。
qBittorrent的網頁界面也可以繼續、暫停下載任務。
Sonarr首頁會顯示進度條,綠色代表下載完成,藍色代表下載中,紅色代表缺少集數,橘色代表缺少集數且尚未監測。
下載後,開啟對應的硬碟目錄
/home/user/sonarr/downloads
,影片就可以看了。
7. 如果Sonarr找不到種子可下載#
排除種子全死光的情況下
參考 官方文件的建議
試著新增更多索引器;或者降低畫質搜尋需求,設定為Any,無魚蝦也好。
或者回歸手動下載:到Jackett網頁介面直接搜尋.torrent
檔案,往往可以找到更多結果。下載後上傳到qBittorrent的網頁介面。
8. 透過Jellyfin串流影片#
Sonarr的下載目錄可以新增到Jellyfin掃描整理,並串流到手機、電視觀看。
參見 Jellyfin架設過程,將Sonarr的下載目錄掛載進Jellyfin
volumes:
- "/home/user/Movies:/Movies:ro"
- "/home/user/sonarr/downloads:/sonarr:ro"
再於Jellyfin的後台,設定類型為電視劇,掃描即可。
9. 用LunaSea手機控制Sonarr下載進度#
Sonarr有提供手機版網頁
若是需要通知功能的,除了利用qBittorrent的電子郵件通知外,還可以考慮用 LunaSea。