这篇文章就介绍使用Docker Compose来打造一个个人的家庭影院。
基本的Workflow是这样的:
- 本体就是Sonarr和Radarr,Sonarr是找剧的,Radarr是找电影的
- 他们俩从哪找片呢,从indexers,这个indexer就可以理解为片源,但是indexer多了就需要东西管理,这时引入了Prowlarr,它可以连接Sonarr和Radarr,以后只需要在Prowlarr添加indexers,然后就可以自动同步到Sonarr和Radarr了
- 找到了片源需要下载器,默认用qBittorrent,我看了下也可以使用Aria2和Transmission
- 最后一个Bazarr是用来管理字幕的
服务端配置好之后,再使用客户端就可以看电影了。
部署
-
创建以下文件夹结构
/media ├── config │ ├── bazarr │ ├── prowlarr │ ├── qbittorrent │ ├── radarr │ └── sonarr ├── docker-compose.yml ├── downloads └── library ├── movies └── tv -
创建docker网络
mediadocker network create media -
编辑
docker-compose.ymlservices: sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr environment: - PUID=1000 - PGID=1000 - TZ=America/Toronto volumes: - ./config/sonarr:/config - ./downloads:/downloads - ./library/tv:/tv ports: - "8989:8989" networks: - media restart: unless-stopped radarr: image: lscr.io/linuxserver/radarr:latest container_name: radarr environment: - PUID=1000 - PGID=1000 - TZ=America/Toronto volumes: - ./config/radarr:/config - ./downloads:/downloads - ./library/movies:/movies ports: - "7878:7878" networks: - media restart: unless-stopped prowlarr: image: lscr.io/linuxserver/prowlarr:latest container_name: prowlarr environment: - PUID=1000 - PGID=1000 - TZ=America/Toronto volumes: - ./config/prowlarr:/config ports: - "9696:9696" networks: - media restart: unless-stopped bazarr: image: lscr.io/linuxserver/bazarr:latest container_name: bazarr environment: - PUID=1000 - PGID=1000 - TZ=America/Toronto volumes: - ./config/bazarr:/config - ./downloads:/downloads - ./library/movies:/movies - ./library/tv:/tv ports: - "6767:6767" networks: - media restart: unless-stopped flaresolverr: image: ghcr.io/flaresolverr/flaresolverr:latest container_name: flaresolverr environment: - PUID=1000 - PGID=1000 - LOG_LEVEL=info - TZ=America/Toronto networks: - media restart: unless-stopped qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID=1000 - PGID=1000 - TZ=America/Toronto - WEBUI_PORT=8080 volumes: - ./config/qbittorrent:/config - ./downloads:/downloads ports: - "9090:8080" - "6881:6881" - "6881:6881/udp" networks: - media restart: unless-stopped networks: media: external: true
配置
qBittorrent
-
打开qBittorrent,如果显示
Unauthorized:-
由于我的服务是部署在Debian小主机上的,只有命令行,我从Windows上访问qBittorrent的话会收到限制,可能默认设置了不允许外部访问,需要修改配置文件
-
首先关掉容器
docker compose down -
打开
/config/qbittorrent/qBittorrent/qBittorrent.conf[Preferences] WebUI\Address=0.0.0.0 WebUI\CSRFProtection=false WebUI\HostHeaderValidation=false WebUI\ServerDomains=* WebUI\Username=admin把
WebUI\Address改为0.0.0.0 -
重启容器
docker compose up -d -
查看logs,可以得到一个初始密码
docker logs qbittorrent --tail 50 -
然后在浏览器中输入admin和初始密码即可登录
-
登陆后在齿轮⚙ → WebUI → Authentication可以修改用户名和密码,然后就不用管配置文件了
-
Prowlarr
-
左侧栏第一个Indexers,添加Indexer,可以先添加几个免费的试试,比如EZTV和YTS
-
添加1337x的时候会显示blocked by CloudFlare Protection,这时候就需要FlareSolverr
- Settings → Indexers添加Index,使用FlareSolverr,由于在同一个Docker网络下,Host可以填
http://flaresolverr:8191/ - tag填写
1337x - 再回去添加Indexer,最下面的tag也填写
1337x,这样再测试连接就成功了
- Settings → Indexers添加Index,使用FlareSolverr,由于在同一个Docker网络下,Host可以填
-
我们先登录Sonarr和Radarr,设置用户名和密码(就会得到用户的API Key),然后在Prowlarr的Settings → Apps添加Sonarr和Radarr
Name: Sonarr Sync Level: Full Sync Prowlarr Server: http://prowlarr:9696 Sonarr Server: http://sonarr:8989 API Key: xxxName: Radarr Sync Level: Full Sync Prowlarr Server: http://prowlarr:9696 Radarr Server: http://radarr:7878 API Key: xxx -
在Settings → Download Clients添加qBittorrent下载器
Name: qBittorrent Enable: true Host: qbittorrent Port: 8080 Username: xxx Password: xxx
Sonarr / Radarr
- 和Prowlarr相同,分别进入Settings → Download Clients,添加刚才的qBittorrent下载器
Bazarr
- Bazarr好像都不需要身份认证,在Settings可以绑定Sonnar和Radarr,同样地,Address写容器名即可
- 在Settings → Languages → Language Filter添加简体中文
- Embedded Tracks Language开启
- 创建一个简体中文的Profile
- 默认Profile都设置为简体中文
- 在Settings → Providers中添加字幕源,可以使用
zimuku和OpenSubtitles.com(这个需要注册用户)
找电影
全部配置好之后剩下的事情就很简单了,基本步骤就是:
- 如果想找电影,就去Radarr直接搜电影名称,同理电视剧就去Sonarr找
- 加入愿望单
- 加入后就会自动连接qBittorrent帮我们下载
- 下载完后视频文件就在挂载的文件夹了
看电影
Infuse
- 我
目前使用已经不使用了,Infuse来看电影,通过SMB来访问服务器上挂载的文件夹,然后本地观看 - 优点是本地硬件解码,降低了我的miniPC的硬件压力
- 缺点是刮削没有Jellyfin强,没有账号管理功能,因此没有观看进度记忆功能
- 好像只能应用在苹果设备,iPhone,iPad,MacBook或者Apple TV
Jellyfin
-
Jellyfin的好处就是刮削能力比较强,能够显示完整的电影封面,演员信息,还支持多账号,管理每个人不同的观影记录等等
-
我第一次用Jellyfin的时候看电影非常卡,我以为是至少要需要独立显卡才能撑得起来,后来发现我N100 miniPC带的核显已经完全足够了,可以使用
nyanmisaka/jellyfin:latest这个镜像 -
如果需要添加Jellyfin,可以在
config文件夹下先创建jellyfin,然后修改docker-compose.yml,加入jellyfin: image: nyanmisaka/jellyfin:latest container_name: jellyfin user: "1000:1000" environment: - TZ=America/Toronto volumes: - ./config/jellyfin:/config - ./library:/media ports: - "8096:8096" networks: - media restart: unless-stopped -
之后在Sonarr / Radarr的Settings → Connections可以添加Jellyfin,主要作用是下载完成后可以通知Jellyfin刷新一遍
-
配置完成后,整个流程就打通了,在Radarr中搜索电影 → 点击 → qb在后台下载电影本体,Bazarr在后台下载字幕 → 下载完毕后通知Jellyfin,我们直接打开Jellyfin就可以观看了。有时候觉得这一套流程还是很繁琐,要在这干点事儿再去另外的地方干点事儿,有什么办法能把Sonarr和Radarr整合呢?就是JellySeerr
Jellyseerr
-
我觉得Jellyseerr的前端界面非常精美,他主要作用就是整合了剧和电影,用户点击之后它调用Radarr和Sonarr来下载,Radarr和Sonarr是Jellyseerr的后端
-
这时候我已经换成k3s部署了,这是Jellyseerr的部署文件
apiVersion: v1 kind: Service metadata: name: jellyseerr namespace: media spec: ports: - name: http port: 5055 targetPort: 5055 protocol: TCP selector: app: jellyseerr --- apiVersion: apps/v1 kind: Deployment metadata: name: jellyseerr namespace: media spec: replicas: 1 selector: matchLabels: app: jellyseerr strategy: type: Recreate template: metadata: labels: app: jellyseerr spec: containers: - name: jellyseerr image: fallenbagel/jellyseerr:latest env: - name: LOG_LEVEL value: "info" - name: TZ value: "America/Toronto" - name: PUID value: "1000" - name: PGID value: "1000" ports: - containerPort: 5055 livenessProbe: httpGet: path: /status port: 5055 initialDelaySeconds: 10 periodSeconds: 30 readinessProbe: httpGet: path: /status port: 5055 initialDelaySeconds: 10 periodSeconds: 30 resources: limits: memory: "1Gi" requests: memory: "256Mi" volumeMounts: - name: config mountPath: /app/config volumes: - name: config hostPath: path: /home/kyxie/k3s/apps/media/config/jellyseerr type: DirectoryOrCreate
Jellyfin Media Player
-
当然浏览器的解码能力还是比不上电脑自身的,我们可以在电脑上安装
jellyfin-media-player,这会使用电脑本地解码,效果比浏览器解码更好 -
MacBook可以使用HomeBrew下载
brew install --cask jellyfin-media-player注意不是App Store自带的Jellyfin Mobile