自托管媒体服务器:摆脱流媒体服务的束缚
本文讲述了作者因 Spotify 价格上涨和对所有流媒体服务用户体验下滑的失望而开始自托管媒体服务器的经历。
流媒体服务的困境
Spotify 在 2025 年 8 月份宣布在德国提高价格,作者尝试了 Spotify 的免费版,却发现免费版存在诸多限制,例如强制随机播放和无法拖动进度条。作者认为这可能是“免费层级的恶化”(Enshittification)现象。
类似的问题也出现在其他流媒体服务中,例如 Amazon Prime 引入广告、Netflix 推出带广告的付费计划、YouTube 充斥着游戏广告和诈骗信息,以及 Disney+ 限制密码共享等。这些都导致用户感觉性价比降低。
自托管解决方案
为了摆脱这种困境,作者决定尝试自托管。
部署环境
- 服务器: 作者选择了德国 Hetzner 云服务提供商的 CAX21 VPS,配置为 4 核 CPU、8GB 内存、20TB 带宽和 80GB SSD 存储。
- 存储: 使用 Hetzner 的 Storage Box 作为媒体存储,通过 SMB 协议将其挂载到 Macbook 上。
- 媒体服务器: 选择了开源软件 Jellyfin 作为媒体服务器,由于 Plex 在 Hetzner 上受限,因此作者选择了 Jellyfin。
远程访问:WireGuard VPN
为了远程访问 VPS,作者使用了 WireGuard VPN:
- 家庭网络: 通过 FRITZ!Box 路由器配置 WireGuard,方便家庭内的设备访问媒体网络,例如 LG webOS 电视。
- 外出: 在设备上安装 WireGuard 客户端,并配置相应的客户端密钥。
WireGuard 服务器配置示例:
[Interface]
Address = 10.13.13.1/24
ListenPort = 51820
PrivateKey = {{ wireguard_server_private_key }}
PostUp = iptables -A INPUT -i wg0 -p tcp --dport 8096 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D INPUT -i wg0 -p tcp --dport 8096 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT
[Peer]
PublicKey = {{ wireguard_client_public_key }}
AllowedIPs = 10.13.13.2/32
[Peer]
PublicKey = {{ wireguard_client_public_key_iphone }}
AllowedIPs = 10.13.13.3/32
[Peer]
PublicKey = {{ wireguard_client_public_key_fritzbox }}
AllowedIPs = 10.13.13.4/32
Client 配置示例 (Macbook): (图片描述:WireGuard 客户端配置截图)
Docker Compose 部署
作者使用 Docker Compose 管理服务部署:
version: "3.9"
services:
wireguard:
image: linuxserver/wireguard:latest
...
jellyfin:
image: jellyfin/jellyfin:latest
...
- WireGuard 服务暴露 UDP 51820 端口。
- Jellyfin 服务将 Hetzner Storage Box 挂载为只读
/media 目录。
- Jellyfin 服务使用 WireGuard 容器的网络栈。
结论
作者总结,自托管媒体服务器是否是流媒体服务的替代方案取决于个人情况。虽然自托管需要一定技术投入,但对于作者来说,拥有自主权和控制权是值得的。