Jellyfin + qBittorrent qBittorrent + Docker+ Docker Compose+ VPN (Gluetun, OpenVPN)+ Radarr+ Sonarr+ Prowlarr+ Seerr

自托管媒体生态:VPN隐私下载、影片管理、自动订阅与流媒体播放一体化。

Prowlarr提供索引源给Radarr/Sonarr,qBittorrent负责下载,Jellyfin流媒体播放,Seerr管理请求,VPN隐藏IP。

✓ 全链路自动化:请求到播放✓ VPN保护下载隐私 ✕ 无VPN部署会暴露IP✕ 需Docker 28.0.1+

方案简介

media-stack 是一套基于 Docker Compose 的自托管媒体生态系统,将媒体管理、流媒体播放与 VPN 隐私下载整合为一条可一键部署的技术配方。它面向希望在自己服务器上搭建私人影院的用户:通过 Seerr 提交观影请求,Prowlarr 管理种子索引器并自动同步给 Radarr(电影)与 Sonarr(剧集),qBittorrent 完成实际下载,最终由 Jellyfin 提供开源流媒体服务。整个栈默认推荐在 VPN(NordVPN 等)保护下运行,使 qBittorrent 与 Prowlarr 的流量走 VPN,避免下载种子时暴露真实 IP。部署方式有三种:带 VPN(推荐)、不带 VPN、以及可选加入 AI 推荐工具 Recommendarr。

亮点与能力

  • 一键 Docker Compose 部署完整媒体栈,通过 profile 控制 VPN/无 VPN 模式
  • VPN 保护:qBittorrent 与 Prowlarr 在 VPN 之后运行,支持 NordVPN、ExpressVPN、SurfShark、ProtonVPN、自定义 OpenVPN、WireGuard
  • 电影(Radarr)与剧集(Sonarr)分离管理,自动监控与下载
  • Prowlarr 统一管理索引器并自动同步到 Radarr/Sonarr
  • Seerr 统一管理媒体请求(Jellyseerr/Overseerr 已统一为 Seerr)
  • Jellyfin 开源流媒体播放,自动扫描媒体库
  • 可选 Nginx 反向代理

组成与分工

  • VPN (Gluetun):为 qBittorrent 和 Prowlarr 提供加密隧道,隐藏真实 IP
  • Radarr:电影管理
  • Sonarr:电视节目管理
  • Prowlarr:面向 Radarr/Sonarr 的种子索引器管理器
  • qBittorrent:下载媒体的种子客户端
  • Seerr:管理媒体请求
  • Jellyfin:开源流媒体服务器
  • Docker / Docker Compose:容器化编排,要求 Docker 28.0.1+、Compose v2.33.1+
  • Nginx(可选):反向代理

前置要求

  • Docker version 28.0.1 or later
  • Docker compose version v2.33.1 or later
  • 旧版本可能可用,但未经测试
  • 部署前需创建 Docker 网络:

bash
docker network create --subnet 172.20.0.0/16 mynetwork

Update the CIDR range based on your available IP range

实施步骤

1. 创建 Docker 网络

bash
docker network create --subnet 172.20.0.0/16 mynetwork

2.(可选迁移)从 Jellyseerr 迁移到 Seerr

使用相同卷名 jellyseerr-config 保留配置,并将卷所有权改为 UID 1000:

bash
docker run --rm -v media-stack_jellyseerr-config:/data alpine chown -R 1000:1000 /data

3. 配置 VPN 提供商

默认使用 NordVPN,可切换 ExpressVPN、SurfShark、ProtonVPN、自定义 OpenVPN、WireGuard。在 docker-compose.yml 中通过注释/取消注释启用 VPN,默认 VPN 是禁用的。

4. 带 VPN 部署(NordVPN 示例)

bash
VPN_SERVICE_PROVIDER=nordvpn OPENVPN_USER=openvpn-username OPENVPN_PASSWORD=openvpn-password SERVER_COUNTRIES=Switzerland RADARR_STATIC_CONTAINER_IP=radarr-container-static-ip SONARR_STATIC_CONTAINER_IP=sonarr-container-static-ip docker compose --profile vpn up -d

当 Prowlarr 在 VPN 后面时,必须为 Radarr/Sonarr 设置静态容器 IP(RADARR_STATIC_CONTAINER_IPSONARR_STATIC_CONTAINER_IP),因为 Prowlarr 只能用容器 IP 与它们通信。

5. 不带 VPN 部署(不推荐)

bash
docker compose --profile no-vpn up -d

6. 可选:Nginx 反向代理

bash
docker compose -f docker-compose-nginx.yml up -d

使用与配置要点

  • qBittorrent:访问 http://localhost:5080,默认用户 admin,临时密码从 docker logs qbittorrent 获取;进入容器创建下载目录:

bash
docker exec -it qbittorrent bash
mkdir /downloads/movies /downloads/tvshows
chown 1000:1000 /downloads/movies /downloads/tvshows

  • Radarr:访问 http://localhost:7878,媒体管理中勾选删除自动取消监控、添加根目录 /downloads/movies;下载客户端配置 qBittorrent 主机 qbittorrent(启用 VPN 时 Host 填 vpn)、端口 5080;General 中启用认证。
  • 添加电影:Movies 搜索 → 根目录 /downloads/movies → 质量配置 → 添加;在 Activities → Queue 查看队列,再到 qBittorrent 确认下载。Sonarr 配置方式类似。
  • Jellyfin:访问 http://localhost:8096,首次访问按引导配置,媒体库文件夹选 /data/movies/。
  • Seerr:访问 http://localhost:5055,按引导填写 Sonarr/Radarr 信息。
  • Prowlarr:访问 http://localhost:9696,启用认证,添加 Indexer,再在 Settings → Apps 添加 Radarr(Prowlarr server http://prowlarr:9696,Radarr server http://radarr:7878,填 API Key)。

注意事项与常见问题

  • 无 profile 运行 docker compose 不会部署任何东西;不带 VPN 必须使用 no-vpn profile。
  • 无 VPN 部署被强烈不建议,种子下载可能暴露 IP。
  • Jellyseerr 与 Overseerr 自 3 版起统一为 Seerr;迁移时卷所有权需改为 UID 1000。
  • VPN 启用时 qBittorrent 通过 vpn 服务名访问。
  • 电影能否下载取决于 Prowlarr 中配置的索引器的资源可用性。

优缺点

  • ✓ 全链路自动化:请求到播放
  • ✓ VPN保护下载隐私
  • ✕ 无VPN部署会暴露IP
  • ✕ 需Docker 28.0.1+

出处

本方案挖掘自开源项目 navilg/media-stack,方案内容与实施命令均来自其 README 原文。

方案出处
navilg/media-stack:A self-hosted stack for media management and streaming, with AI-powered movie an
1236 star A self-hosted stack for media management and streaming, with AI-powered movie and show recommendations. Includes Sonarr, Radarr, qBitTorrent, Prowlarr, Jellyfin, Seerr, Recommendarr, and VPN support.

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。