保姆级教程:用Jellyfin全家桶在vps上打造家庭影音私有云

释放双眼,带上耳机,听听看~!

您是否曾梦想拥有一个属于自己的“奈飞(Netflix)”?一个能自动搜集全球电影剧集、自动下载、自动整理、自动刮削海报简介形成精美详情页,并能在任何设备上随时播放的私人影音库?本教程将指导您如何利用一台Linux服务器和强大的Docker技术,从零开始搭建一套世界级的、全自动的家庭媒体中心。

我们将使用以下“黄金组合”软件,它们全部免费且开源:

  • Jellyfin: 优雅的媒体中心,负责播放与展示。

  • Radarr: 电影管家,负责自动化管理电影。

  • Sonarr: 剧集管家,负责自动化管理电视剧。

  • Prowlarr: 资源中介,统一管理所有资源索引站。

  • qBittorrent: 下载工具,负责执行下载任务。

  • ChineseSubFinder: 字幕专家,专为中文用户优化的字幕下载器。

在开始之前,您只需要一台拥有SSH权限的Linux服务器(ARM64架构也完全兼容)并已安装好Docker和Docker-Compose。【如果你有自己的nat硬盘机并且支持docker也适用】

架构总览图

下图清晰地展示了我们这套系统的全自动工作流程:

graph LR
    subgraph "用户操作 (User Actions)"
        A[您 Add Movie/TV] -- "添加想看的电影/剧集" --> B((Radarr / Sonarr));
    end

    subgraph "自动化后台 (Automated Backend)"
        B -- "1. 请求资源" --> D((Prowlarr));
        D -- "2. 搜索索引器" --> E{资源站 Indexers};
        E -- "3. 返回种子" --> D;
        D -- "4. 发送给下载器" --> F((qBittorrent));
        F -- "5. 下载文件到临时目录" --> G[/downloads];
        F -- "6. 通知下载完成" --> B;
        B -- "7. 硬链接/移动并重命名" --> H[/media 最终目录];
    end
    
    subgraph "字幕与播放 (Subtitles & Playback)"
        I((ChineseSubFinder)) -- "1. 扫描媒体库" --> H;
        E -- "2. 搜索字幕" --> I;
        I -- "3. 下载字幕到媒体文件夹" --> H;
        H -- "媒体库" --> J((Jellyfin));
    end

    subgraph "观看 (Viewing)"
        J -- "在任何设备上播放" --> K(您 Watch);
    end

style A fill:#f9f,stroke:#333,stroke-width:2px
style K fill:#f9f,stroke:#333,stroke-width:2px

第一步:基础准备 – 规划目录结构

一个清晰的目录结构是成功的一半。通过SSH登录您的服务器,创建一个总的项目目录,并在其中规划好所有子目录。

# 创建总目录
mkdir -p /data/media-stack

# 进入总目录
cd /data/media-stack

# 创建子目录
mkdir -p config downloads media/movies media/tv

最终目录结构如下:

  • /data/media-stack/: 我们所有配置和文件的根目录。

  • /data/media-stack/config/: 存放所有服务的配置文件。

  • /data/media-stack/downloads/: qBittorrent的临时下载目录。

  • /data/media-stack/media/movies/: 整理好的电影最终存放目录。

  • /data/media-stack/media/tv/: 整理好的剧集最终存放目录。


第二步:核心蓝图 – 编写 docker-compose.yml

/data/media-stack/ 目录下,创建一个名为 docker-compose.yml 的文件,并将以下所有内容复制进去。这是我们整个媒体中心的“建筑蓝图”。

version: "3.8"
services:
  # 媒体中心
  jellyfin:
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai # 请设置为您常用的时区
    volumes:
      - ./config/jellyfin:/config
      - ./media:/media
    ports:
      - "8096:8096" # Web访问端口
    restart: unless-stopped
  # 下载工具
  qbittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - WEBUI_PORT=8080
    volumes:
      - ./config/qbittorrent:/config
      - ./downloads:/downloads
    ports:
      - "8080:8080"
      - "6881:6881"
      - "6881:6881/udp"
    restart: unless-stopped
  # 资源中介
  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config/prowlarr:/config
    ports:
      - "9696:9696"
    restart: unless-stopped
  # 剧集管家
  sonarr:
    image: linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config/sonarr:/config
      - ./downloads:/downloads
      - ./media/tv:/tv
    ports:
      - "8989:8989"
    restart: unless-stopped
  # 电影管家
  radarr:
    image: linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config/radarr:/config
      - ./downloads:/downloads
      - ./media/movies:/movies
    ports:
      - "7878:7878"
    restart: unless-stopped
  # 中文字幕下载器
  chinesesubfinder:
    image: allanpk716/chinesesubfinder:latest
    container_name: chinesesubfinder
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - PERMS=true
      - UMASK=022
    volumes:
      - ./config/chinesesubfinder:/config
      - ./media:/media
    ports:
      - "19035:19035"
    restart: unless-stopped

注意:所有容器中的PUIDPGID都替换成你的用户id,在ssh命令行输入 id 回车即可看到用户id;不要使用root用户因为root用户可能存在读写权限错乱问题,导致各个模块同步出错。建议使用1000或1001,具体查看自己的系统用户id。


第三步:启动前的关键一步 – 用户ID与文件夹权限

为了避免所有服务之间的权限问题,我们需要统一文件所有者。

  1. 获取用户ID:在SSH中执行 id 命令。记下输出的 uidgid (通常都是1000)。

  2. 修改docker-compose.yml:将文件中所有的 PUID=1000PGID=1000 修改为您自己的uidgid

  3. 修正文件夹权限:执行以下命令,将整个项目文件夹的所有者变更为我们指定的用户。

# 将 1000:1000 替换为您自己的 PUID:PGID
chown -R 1000:1000 /data/media-stack/
chmod -R 775 /data/media-stack/

第四步:点火启动 – 部署与访问

万事俱备,现在我们来启动整个媒体帝国。

  1. 在SSH中,确保您位于 /data/media-stack/ 目录下。

  2. 执行启动命令:

    docker-compose up -d
    
  3. Docker将自动下载镜像并启动所有容器。启动后,请确保在服务器的防火墙中为以下端口开放TCP访问

  • Jellyfin: 8096
  • qBittorrent: 8080, 6881 (TCP/UDP)
  • Prowlarr: 9696
  • Sonarr: 8989
  • Radarr: 7878
  • ChineseSubFinder: 19035

第五步:灵魂注入 – 串联服务(配置流程)

现在,您需要逐个登录每个服务的WebUI,将它们关联起来。

  1. qBittorrent (http://[服务器IP]:8080):登录后修改默认密码,并将“下载”设置中的“Torrent管理模式”设为**“自动”**。

  2. Prowlarr (http://[服务器IP]:9696):设置登录密码,添加您常用的资源索引站(Indexers),并添加qBittorrent作为下载客户端。

  3. Sonarr/Radarr (:8989 / :7878):分别登录,在设置中连接Prowlarr和qBittorrent(主机名直接填写服务名,如qbittorrent),并设置好媒体库的根目录(电影是/movies,剧集是/tv)。

  4. ChineseSubFinder (http://[服务器IP]:19035):在设置中,分别连接到Sonarr, Radarr和Jellyfin的API。

  5. Jellyfin (http://[服务器IP]:8096):设置管理员账户,然后添加两个媒体库:

    • 电影库:路径设置为 /media/movies

    • 剧集库:路径设置为 /media/tv


结语

恭喜您!完成以上所有步骤后,您的全自动个人影音帝国就已经建成。现在,您只需要在Radarr或Sonarr中添加您想看的电影和剧集,剩下的就交给这套不知疲倦的自动化系统吧。稍后,您就可以在Jellyfin中欣赏到带有中文字幕的完美影音内容了。

给TA充电
共{{data.count}}人
人已充电
建站私有云

终极指南:在宝塔面板上通过Docker完美部署Seafile13.0私有云

2025-8-5 0:57:39

建站私有云

榨干NAT机器的全部玩法:从网站CDN加速到分布式编译

2025-8-8 23:26:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索