跳过正文
Background Image
  1. Posts/

瑞士小鸡(1) 看片

目录

瑞士小鸡(1)——构造一个流水线看片服务
#

如果手上有一台NAS,或者一台闲置的服务器,可以用来部署一套自动追番、追剧的服务。因为没钱买nas以及公网问题,一台服务器(最好是海外的)会更方便。

准备工作
#

目录结构如下,可以提前创建好分类目录,其他的目录启动后自然会被docker映射创建:

./my-chick/
├── Caddyfile
├── docker-compose.yml
└── data/
    ├── torrents/
    │   ├── tv/
    │   └── movie/
    └── media/
        ├── anime/
        ├── movie/
        └── tv/

使用的docker-compose.yml如下:

services:
  ani-rss:
    image: wushuo894/ani-rss:latest
    container_name: ani-rss
    # 自定义 DNS
    dns: 8.8.8.8
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
      - UMASK=022
      - PORT=7789
      - CONFIG=/config
    volumes:
      - ./ani-rss/config:/config
      - ./data/media/anime:/data/media/anime
    restart: always
    network_mode: host

  qBittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: qBittorrent
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
      - WEBUI_PORT=8080
    volumes:
      - ./qBittorrent/config:/config
      - ./data/torrents:/data/torrents
      - ./data/media/anime:/data/media/anime # ani rss是原地做种,不是硬链接,需要映射目录
    restart: always
    network_mode: host

  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    network_mode: host
    volumes:
      - ./jellyfin/config:/config
      - ./jellyfin/cache:/cache
      - ./data/media:/data/media
    restart: always
    # Optional - may be necessary for docker healthcheck to pass if running in host network mode
    extra_hosts:
      - 'host.docker.internal:host-gateway'

  jellyseerr:
    image: ghcr.io/fallenbagel/jellyseerr:latest
    init: true
    container_name: jellyseerr
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
      - LOG_LEVEL=info
      - PORT=5055 #optional
    network_mode: host
    volumes:
      - ./seerr/config:/app/config
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
      start_period: 20s
      timeout: 3s
      interval: 15s
      retries: 3
    restart: always

  sonarr:
    image: ghcr.io/linuxserver/sonarr:latest
    container_name: sonarr
    network_mode: host
    volumes:
      - ./data:/data
      - ./xarr/sonarr_config:/config
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
    restart: always

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    network_mode: host
    volumes:
      - ./data:/data
      - ./xarr/radarr_config:/config
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
    restart: always

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    network_mode: host
    volumes:
      - ./xarr/prowlarr_config:/config
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles
    restart: always

  FlareSolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    network_mode: host
    restart: always
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Los_Angeles

docker compose up -d启动后,下面进行各个组件的配置。

下载器
#

这里用qBittorrent举例,新的qBittorrent初次启动会有一个随机密码,我们先查看docker日志获取密码,进行登录后在web ui修改密码,方便其他组件访问。设置默认下载目录为/data/torrents

流媒体
#

这里用jellyfin举例。

访问web地址,配置初步设置。

  • 插件
    • 存储库添加以下三个
      • 官方:https://sgp1.mirror.jellyfin.org/files/plugin/manifest.json
      • bangumi:https://jellyfin-plugin-bangumi.pages.dev/repository.json
      • 字幕(用处不大):https://github.com/91270/MeiamSubtitles.Release/raw/main/Plugin/manifest-stable.json
    • 重启或者等一会,搜索并安装插件,然后重启
      • anidb
      • open subtitles
      • shooter 和 thunder,这俩是射手字幕和迅雷影音
  • 媒体库
    • 节目/tv
      • 追番: /data/media/anime, 元数据下载器把anidb置顶
      • 追剧: /data/media/tv, 元数据下载器不用动
    • 电影/movie
      • 追片: /data/media/movie, 元数据下载器不用动

追番
#

我们使用ani-rss来方便地进行番剧的订阅、自动下载和管理。

登录ani-rss的web ui,配置一下。

  • 下载设置的工具配置好qBittorrent的地址和密码,测试一下
  • 保存位置
    • 番剧:/data/media/anime/${themoviedbName}/Season ${seasonFormat},这样方便后续根据tmdb元信息自动刮削
    • 剧场版:/data/media/movie/${themoviedbName}
  • 基本设置
    • 添加订阅:打开TMDB标题自动刮削
    • 重命名设置:模板用${themoviedbName} S${seasonFormat}E${episodeFormat},只打开自动重命名 (下载剧场版的时候单独配置一下重命名模板,上面的模板必须要有集数没办法)
    • bangumi:根据指引设置一下app授权自动获取
    • 其他:设置tmdb api key,需要注册

追剧/追片
#

我们使用*arr家族来进行索引、tv和电影的订阅管理,用jellyseerr来搜索美剧和电影

sonarr/radarr
#

这俩需要配置的东西基本一致,以中文web ui的设置页面为例

  • 通用
    • 设置认证为表单,设置用户名和密码后保存刷新,重新输入密码登陆
    • 记下API key,后面prowlarr需要用到
  • 下载客户端
    • 添加一个qBittorrent,填写地址和密码,测试连接。分类里面填写一个类别(默认有一个tv-sonarr/radarr可以不用改)并记下来,保存。
    • 远程路径映射,配置qBittorrent的下载路径,因为所有容器都映射了/data或其子目录,所以本地路径和远程路径都填写/data/torrents/tv(sonarr)或者/data/torrents/movie(radarr),保存。
    • 回到qBittorrent的web ui,查看左边栏的分类,找到刚才的类别,右键编辑类别,把路径改为上一步填写的路径并保存。这样是为了确保下载的种子以及文件在torrents目录下,不会被媒体库识别改名前的文件。
  • 媒体管理
    • 重命名
      • sonarr的用{Series Title} S{season:00}E{episode:00}
      • radarr的用{Movie Title} ({Release Year})
      • 高级选项打开使用硬链接代替复制
    • 根目录指的是你要存放的具体小目录,被媒体库自动刮削。这样可以使得下载的做种文件与媒体库扫描分开识别,同时共用一份硬盘空间。
      • 例如sonarr:/data/media/tv
      • radarr:/data/media/movie

prowlarr
#

  • 设置
    • 通用:认证为表单,设置用户名和密码后保存刷新,重新输入密码登陆
    • 索引器:添加搜刮器代理,选flaresolverr,填写地址测试,用来绕过配置了cloudflare的索引器网站
    • 应用程序:添加sonarr和radarr,填写地址和API key,测试连接
  • 索引器
    • 添加一大堆索引器即可,只要测试通过的都可以添加,不用考虑语言限制(一般中文和英文的就ok)
    • 有些索引器添加页面提示了需要flaresolverr代理的,添加页面最下面的标签设置刚才添加flaresolverr时设置的标签,再测试通过即可
    • 点一下同步索引器,会推到sonarr和radarr

jellyseerr
#

类似ani-rss,用于搜索、订阅电影和电视剧。

打开web ui,根据引导配置好jellyfin、sonarr、radarr的地址和api key即可。后面两个的先测试才能选画质,一般用any就好了。

设置完成之后在主页的设置页面/jellyfin 点一下同步库,把jellyfin配置的媒体库同步过来都打开

通过域名访问
#

dns解析
#

用cloudflare添加子域名的dns解析到小鸡上即可,海外服务器拉github,docker快,也不用备案。价格没差多少

反向代理
#

使用caddy配置,给出一个样例文件(没有配置暴露所有的服务,因为有些不需要公网访问,直接连上服务器访问就好)

{
	storage file_system {
		root /etc/ssl/caddy
	}
}

ani.example.org {
	reverse_proxy localhost:7789
}

jelly.example.org {
	reverse_proxy localhost:8096
  # 如果要开启https,查找cloudflare怎么配置一个账户api令牌,访问dns权限即可
	tls {
        # 同时需要caddy支持cloudflare插件
        dns cloudflare <API KEY> 
    }
}

seerr.example.org {
    reverse_proxy localhost:5055
    tls {
        dns cloudflare <API KEY>
    }
}