qBittorrent + Docker+ Docker Compose+ VPN (Gluetun, OpenVPN)+ Radarr+ Sonarr+ Prowlarr+ Seerr自托管媒体生态:VPN隐私下载、影片管理、自动订阅与流媒体播放一体化。
Prowlarr提供索引源给Radarr/Sonarr,qBittorrent负责下载,Jellyfin流媒体播放,Seerr管理请求,VPN隐藏IP。
方案简介
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_IP、SONARR_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-vpnprofile。 - 无 VPN 部署被强烈不建议,种子下载可能暴露 IP。
- Jellyseerr 与 Overseerr 自 3 版起统一为 Seerr;迁移时卷所有权需改为 UID 1000。
- VPN 启用时 qBittorrent 通过
vpn服务名访问。 - 电影能否下载取决于 Prowlarr 中配置的索引器的资源可用性。
优缺点
- ✓ 全链路自动化:请求到播放
- ✓ VPN保护下载隐私
- ✕ 无VPN部署会暴露IP
- ✕ 需Docker 28.0.1+
出处
本方案挖掘自开源项目 navilg/media-stack,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。