【影音自托管 01】自建影音库不踩坑:用便宜 VPS 搭 Plex / Jellyfin / Emby 的完整部署指南(2026)

想私有化影音又不想被网盘下架、订阅涨价约束?本文讲清 Plex / Jellyfin / Emby 区别、转码与带宽流量的坑,横向对比 RackNerd、CloudCone、Contabo、HostDare 四家低价大带宽商家,并附 Docker 部署实战。

你已经决定在 VPS 上自建影音库,本篇是「动手篇」。我们直接用 Docker Compose 把 Jellyfin(顺带讲 Plex / Emby 的差异)跑起来,再用反代 + 域名 + 免费 SSL 把它安全地暴露到外网,然后优化 Direct Play、配置多用户与客户端,最后把版权与流量红线一次讲清。选型与转码算力怎么测算,是上一篇文章的事,详见:/vps-selfhost-jellyfin-2026。

延伸阅读

更多相关攻略推荐:2026 实测:VPS 上自托管 AI 编程助手——Continue【知识库自托管 02】2026 实测:VPS 自托管 Anythin【知识库自托管 03】2026 实测:搬瓦工/RackNerd 上自2026 VPS 选购决策树与白皮书:一张图看懂怎么买2026 海外 VPS 行业趋势年报:价格、架构与格局全景

一、部署前准备:系统、域名与目录规划

建议选一台 Debian 12 或 Ubuntu 22.04 的 VPS,这两类发行版文档最全、Docker 兼容性最好。先更新系统并装好 Docker 引擎与 docker compose 插件:大多数厂商的镜像里一条官方安装脚本就能搞定,装完把当前用户加入 docker 组,免得每次都要 sudo。准备一个你已经把 A 记录解析到该 VPS 公网 IP 的域名(比如 media.example.com),后续反代和 SSL 都要用它;如果暂时没有域名,也可以先用 IP + 端口访问,只是体验和安全都差一截。

目录规划上,建议把「配置」和「媒体」彻底分开。配置放到 /opt/jellyfin/config,媒体放到 /mnt/media。媒体目录可以是 VPS 自带的块存储、对象存储挂载(如 rclone 挂到 /mnt/media),也可以是家里 NAS 通过 SSHFS 映射过来的目录。关键是让 Jellyfin 容器对媒体目录只有只读权限,对配置目录有读写权限。权限上别随手 chmod 777,给一个专用 uid/gid(如 1000:1000)即可,既安全又避免后续 UID 错乱导致扫库失败。

防火墙也顺手定了:只开放 22(SSH)、80、443(反代)以及你调试时临时用的 8096,其余端口默认拒绝。千万别把 8096 长期裸奔在公网,那是被扫库和被爆破的高危面。

二、Docker Compose 部署 Jellyfin

下面是一个最小可用的 compose 片段,重点是把 /dev/dri(如果你有核显)和设备透传打开,并加上内存上限避免吃垮整机。

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: "1000:1000"
    network_mode: "host"
    volumes:
      - /opt/jellyfin/config:/config
      - /mnt/media:/media:ro
    devices:
      - /dev/dri:/dev/dri
    mem_limit: 2048m
    restart: unless-stopped

逐行说明:user 固定 uid/gid 让文件权限可控;network_mode 用 host 最简单,容器直接复用宿主网络,无需再映射端口;volumes 把配置和媒体挂进去,媒体只读(:ro)防止容器误删;devices 透传核显,没有就删掉这行,纯 CPU 软转;mem_limit 兜底,避免某次转码把整机内存吃光触发 OOM。docker compose up -d 启动后,访问 http://服务器IP:8096 完成初始化向导:设管理员、建媒体库、选语言与元数据语言。

Plex 的差异在于镜像换成 plexinc/plex,且首次启动要去 plex.tv 领一个 claim 码填到环境变量 PLEX_CLAIM 里绑定账号;Emby 镜像换成 emby/embyserver,流程类似。三者都建议保持 network_mode: host(或把 8096 / 32400 端口显式映射出来),方便后面反代直接走 127.0.0.1 转发。

三、媒体库目录与扫描策略

在 Jellyfin 后台「媒体库」里添加 /media 下的子目录,按电影、剧集、音乐、图书分库。命名尽量用「影片名 (年份)」这种标准格式,刮削器才能正确匹配海报与元数据;剧集用「剧集名 (年份)/Season 01/剧集名 S01E01.mkv」结构,否则往往识别成乱码。扫描策略上,关掉「实时监控文件系统」以省 CPU,改为每天凌晨定时全量扫描;片库很大时尤其如此,实时监听几万文件对共享 CPU 是纯浪费。

字幕优先用外挂 srt,避免触发服务端字幕硬烧(那会吃 CPU)。如果一定要烧录,确认 /dev/dri 已透传并开启 VAAPI,否则一次烧录就能把 1080p 转码时间拖到几分钟。元数据代理选「The Movie Database」之类公开源,首次全量刮削会很吃 IO,建议在凌晨跑完后再开放给用户看。

四、反代对外访问:Caddy 反代 + 域名 + 免费 SSL

不要把 8096 裸端口直接暴露,用反代统一收口。下面是一段 Caddy 配置,Caddy 会自动申请并续期 Let's Encrypt 证书,你什么都不用管:

media.example.com {
  reverse_proxy 127.0.0.1:8096
}

如果你用 Nginx,则在 server 块里写 proxy_pass 到 127.0.0.1:8096,并加上 WebSocket 升级头(Jellyfin 部分实时功能用到),然后在 Jellyfin 后台「网络」里把反向代理后的基 URL 设为 https://media.example.com,同时开启「使用转发后的协议头」。这样外网访问 https://media.example.com 即可,端口 443 加密,无需给用户记端口。

想更稳还可以套一层 Cloudflare:把域名 NS 迁到 Cloudflare,CNAME 指向你的 VPS,橙云开启后隐藏真实 IP、还能挡一波扫描。注意 Cloudflare 免费版对大流量视频流不友好(会缓存或限速),影音流媒体建议把媒体子域设为 DNS only(灰云),只让 Cloudflare 做 DNS 解析而不走它的代理。若担心被陌生人扫到,可在反代层加一段 basic auth 或仅允许家庭 IP 段,进一步收紧。

五、Direct Play 优化:让服务器少转码

转码是 VPS 上最贵的操作,没有之一。优化思路是把客户端和片库都往「原生可播」靠。片源上,优先选 H.264 视频 + AAC 音频 + MP4 封装的版本,绝大多数电视、盒子、手机、网页客户端都能 Direct Play;HEVC / AV1 虽然省带宽,但老客户端不支持,会被迫转码。在 Jellyfin 客户端里把「自动画质」设为原画,关掉「自动调整码率」,并开启「允许直接播放」。

家里网络差的成员,宁可让他把原画分辨率手动降到 720p 看,也不要让服务器转码——前者只降清晰度,后者把 CPU 拉满还可能卡顿。音频方面,客户端支持 passthrough(透传)的,把 AC3 / EAC3 / DTS 设为透传,服务器不重新编码音频。记住一句口诀:能 Direct Play,就别让服务器转码,这是 VPS 影音服务器能不能长久跑稳的关键。

六、多用户与客户端:把家人请进来

Jellyfin 后台「用户」里为每个家人建独立账号,可设儿童资料库限制(只让看动画片库)、可限制最大同时在线与是否允许转码。把 https://media.example.com 发给他们,手机装 Jellyfin App、电视装支持的客户端(Android TV / Apple TV / 网页)即可观看。Plex 则是邀请邮箱加入家庭,客户端体验更一致。

注意给每个用户单独的观看限制,避免某人乱看 4K 把服务器 CPU 拉满。若要跨地访问更稳、更安全,可让客户端走家里或 VPS 上的 WireGuard 隧道,而不是直接把服务暴漏公网;WireGuard 只有持有密钥的设备能连,既加密又规避了公网扫描。对外分享给朋友时,宁可发邀请链接走鉴权,也别开「免登录游客库」。

七、版权与流量红线:只服务合法持有的媒体

自建影音服务器只适用于你合法持有的文件:自己拍的、已购的、或明确可私用的内容。三件事绝对别做:不破解 DRM、不把未授权内容分享给外人、不把服务器当公开资源站。把「分享账号 / 公开注册」当卖点,是踩红线的典型做法,不仅违反服务条款,还可能触及版权法。

流量上,看清商家政策。很多便宜 VPS 对「持续高上行」有隐性限制,短期突发没事,长期满速跑流媒体可能被限速甚至封机。把媒体服务绑定到域名 + 反代,比裸端口更稳也更不容易被误判为异常扫描。若你流量需求真的大,优先选明确「大带宽 / 不限流量」的套餐(如部分商家标称的 unmetered),并在购买前看晚高峰实测。具体选商家的带宽与转码取舍,见本系列第 1 篇:/vps-selfhost-jellyfin-2026。

八、常见故障排查

跑起来后最常遇到的几个坑:一是外网打不开,先确认域名 A 记录已生效、反代已起、防火墙放了 443;二是客户端被迫转码卡顿,进客户端播放信息看是哪一步转码,通常是音频格式不被支持导致整路转码,换成兼容音轨或开透传即可;三是刮削不到元数据,检查命名格式和元数据代理可用性,必要时手动匹配;四是 SSHFS 挂载的媒体库扫描慢,那是网络文件系统延迟,建议把常看内容缓存到本地盘或换 rclone 缓存模式。