快轉到主要內容

Sonarr使用教學:免費下載電視劇/電影/動漫,自架BT種子管理服務

Linux系統 Self-hosting自架 Torrent Anime
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

本文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軟體執行下載任務。

為此要準備:

  1. 種子索引器(Indexer):我使用Jackett做索引方案,整合了許多BT索引器。Jackett本身是代理服務,將Sonarr的查詢字串轉譯為http請求,查詢種子追蹤器網站之後再將結果傳回Sonarr。

  2. BT下載軟體:Sonarr支援搭配uTorrent、qBittorrent、Deluge、Flood使用,我選擇qBittorrent。這篇文章我會把BT軟體容器化,並用網頁存取,無須在本機安裝BT軟體。

  3. Sonarr:控制中心本體,架起來後用網頁存取。其實Sonarr有很多分支版,功能大同小異,最常見的是Radarr、Lidarr、Readarr,linuxserver.io多半有打包好的Docker映像檔。這裡使用的Sonarr是專門下載電視劇和動漫之用。

  4. (選擇性)商業VPN服務:讓電腦或Docker容器連上VPN再行下載BT,降低被片商抓到載盜版的機率。推薦Mullvad或ProtonVPN,搭配 Gluetun讓容器走VPN連線。

  5. (選擇性)Jellyfin:影音伺服器軟體, 這篇我有講過裝法。雖說BT下載的影片會直接進到硬碟資料夾,可直接任意播放器開啟觀看,我們何不進一步將用途擴充呢?建設一個串流伺服器,BT下載的影片,交給Jellyfin立即掃描整理,就可以透過其他裝置串流觀賞。

  6. (選擇性)內網穿透軟體:例如 TailScale ZeroTier,讓我們可以遠端操控Sonarr與相關服務。

2. 以docker-compose部署Sonarr
#

我使用linuxserver.io打包的Docker映像檔,這裡要跑3個服務協同作戰:

一、Sonarr:服務本體

二、Jackett:索引服務

三、qBittorrent:BT下載服務

  1. 安裝 Docker

  2. 依序建立三個服務存放資料的目錄

cd ~
mkdir sonarr jackett qbittorrent
  1. 進入Sonarr目錄
cd sonarr
  1. 撰寫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
  1. 啟動全部服務
docker compose up -d

注意:下面將一律用網頁存取服務,本機的話就是localhost。如果您是從另一部裝置存取,那麼網址就要打該機器的IP,例如192.168.0.11

3. 設定索引器Jackett
#

先到Jackett設定要使用的索引。可以添加多個索引,比方說我中英文字幕的影片都能接受,就把英語系與中文系的加入。

  1. 瀏覽器開啟:http://localhost:9117

  2. 點選Add Indexer按鈕

  3. 勾選三個動漫索引器:Anime Tosho(英文)、Anime Time(英文)、Simple Anime(中文),點選Add Selected

保持這個頁面開著。

4. 設定BT軟體qBittorrent
#

  1. 開啟WebUI:http://localhost:8080
註:qBittorrent Docker版可能會遇到unauthorized錯誤,解決方法見此
  1. 關閉容器服務
cd ~/sonarr
docker compose down
  1. 找到~/qbittorrent/config/qBittorrent/qBittorrent.conf,在末尾加入
WebUI\HostHeaderValidation=false
WebUI\CSRFProtection=false
  1. 重新啟動容器服務
docker compose up -d
  1. 登入網頁界面,預設帳號admin,密碼請看docker log訊息裡隨機產生的數字

  2. 點選Tools → Options → WebUI → Languages,設定語言為中文。再於「驗證」處修改預設帳號密碼。

  3. 在「連線」與「速率」頁面,自行估量網路性能,設定下載與上傳數。

保持此頁面開著。

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個索引,每個索引都要手動添加一次

  1. 點選使用Torznab協定

  2. 回到Jackett網頁,點選索引器旁邊的Copy Torznab Feed複製網址,還有右上角的API Key。

  3. 回到Sonarr頁面,在網址貼上Copy Torznab Feed網址和API Key。記得網址的localhost要改成Jackett容器的區域IP

  4. 如圖勾選Categories,設定TV/Anime

  5. 點選Test按鈕,確認能否正常連線,再按Save

  6. 以此類推,將3個索引器新增上去。

5.4. Download Client
#

  1. 列表選取qBittorrent

  2. 填入qBittorrent的容器IP(同樣要使用Docker容器的IP),以及WebUI的帳號密碼

  3. 點選Test,確認能否正常連線,後按Save。

6. 實際下載動漫影片
#

  1. 回到Sonarr首頁,直接搜尋動漫。透過 TVDB可以找到更精確的電視劇名稱,英文為佳

  2. 直接模糊搜尋名字也可以,比方說"spy family"

  3. 點選加入監測列表,設定搜尋1080p畫質的影片

  4. 預設是搜尋整季的,旁邊的書籤符號代表追蹤的集數。

  5. 之後Sonarr就會開始搜尋種子。按照我上面的Profile語言設定,搜尋到影片的應該是日語版為主,有的則是內嵌多國字幕的版本。

  6. 找到種子後會自動新增下載任務,傳給qBittorrent。

  7. qBittorrent的網頁界面也可以繼續、暫停下載任務。

  8. Sonarr首頁會顯示進度條,綠色代表下載完成,藍色代表下載中,紅色代表缺少集數,橘色代表缺少集數且尚未監測。

  9. 下載後,開啟對應的硬碟目錄/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

參考資料
#

相關文章

AniGamerPlus使用教學,下載巴哈姆特動畫瘋的影片與彈幕離線觀看
Linux系統 Self-hosting自架 Anime
使用ZeroTier + VNC架設免費Linux遠端桌面
Linux系統 Self-hosting自架 Remote Desktop ZeroTier VNC
架設Nextcloud個人雲端硬碟 + 網頁版LibreOffice教學 (docker-compose + ZeroTier內網穿透)
Linux系統 Self-hosting自架 Nextcloud LibreOffice Media Server

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。