Jellyfin 媒体服务器部署完全指南:Docker 一条主线 + 3 个高频坑位,30 分钟跑通
【免费下载链接】jellyfinThe Free Software Media System - Server Backend & API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin
想搭一台免费的私人媒体服务器?这篇 Jellyfin 部署教程只走一条主线:Docker 容器化,外加首次配置与三个高频坑的修复法,普通用户 30 分钟可上线。
30 秒认识 Jellyfin
Jellyfin 是一个完全免费、开源的媒体服务器:把你硬盘里的电影、剧集、音乐、照片整理成可搜索、可多端播放的库,数据始终留在自己的机器上。
- 功能全部开放:无广告、无会员墙,转码、硬件加速都是默认能力
- 多端覆盖:Web 管理台 + 手机/电视客户端,多用户各自有进度和偏好
- 播放灵活:局域网内尽量直连播放,带宽不够时自动转码兜底
- 元数据自动化:首扫时自动抓取海报、简介、演员信息
- 可备份可迁移:配置、用户、媒体库元数据支持打包成单个归档
选对部署姿势
先决策,再动手。四种路径的差异一眼看完:
| 部署方式 | 适合谁 | 上手成本 | 自由度 |
|---|---|---|---|
| 安装包 | 家用电脑、想即装即用的人 | 最低(装完即运行) | 低,按官方默认布局跑 |
| Docker 容器 | 有服务器或 NAS、以后可能迁移的人 | 低(4 条命令) | 中,挂载卷与镜像版本自己控制 |
| 源码编译 | 开发者、想读代码或二次开发的人 | 高(装 SDK + 编译) | 最高,可以改到代码层 |
| NAS/虚拟机镜像 | 群晖、TrueNAS 或 homelab 玩家 | 中(导入镜像) | 中,受宿主机生态约束 |
本文主线选Docker:隔离干净、迁移就是搬三个目录,也是大多数人的最终形态。
手把手部署实战 🚀
容器化部署四步走
第 1 步:装好 Docker 并让它自启。
sudo apt install docker.io sudo systemctl enable --now docker装完docker --version能出版本号就算就绪。
第 2 步:建三个目录,分别放配置、缓存、媒体文件:
sudo mkdir -p /opt/jellyfin/config /opt/jellyfin/cache /srv/media/srv/media换成你实际放片子的路径即可。
第 3 步:启动容器。一行命令,逐个看挂载点:
docker run -d \ --name jellyfin \ --restart=unless-stopped \ -p 8096:8096 \ -v /opt/jellyfin/config:/config \ -v /opt/jellyfin/cache:/cache \ -v /srv/media:/media \ jellyfin/jellyfin-p 8096:8096是服务端口,Jellyfin 默认 HTTP 端口就是 8096- 三个
-v分别对应容器内固定的/config、/cache、/media
第 4 步:验证容器活着。
docker ps看到jellyfin状态为Up后,浏览器打开http://服务器IP:8096,能进欢迎页即部署成功。
另外三条路,各一句要点
安装包路线(家用机最快):
sudo apt install jellyfin # Ubuntu/Debian sudo dnf install jellyfin # CentOS/RHEL装完服务即随系统自启,用sudo systemctl restart jellyfin重启;Windows 上则是net stop jellyfin/net start jellyfin。
源码编译路线(开发者向):global.json 声明项目使用 .NET 10 SDK,先装git、dotnet-sdk-10.0和ffmpeg,然后:
git clone https://gitcode.com/GitHub_Trending/je/jellyfin cd jellyfin dotnet build dotnet run --project Jellyfin.Server编译通过后dotnet run直接起服务,调试时可以加--configdir等参数把配置指到别处。
NAS/虚拟机路线(进阶):在群晖 Container Manager、TrueNAS 或 PVE 里导入 Jellyfin 官方镜像,映射同样的三个卷和 8096 端口,后续操作与 Docker 完全一致。
常用启动参数速查
不管是哪条路线,服务都认同一组命令行参数(定义见 StartupOptions.cs):
| 参数 | 作用 |
|---|---|
--configdir | 配置目录(用户设置、图片、network.xml 都在这里) |
--datadir | 数据目录(数据库文件等) |
--cachedir | 缓存目录,放 SSD 上转码更顺 |
--logdir | 日志目录 |
--webdir | Web 客户端资源目录 |
--ffmpeg | 指定自定义 FFmpeg 可执行文件 |
--restore-archive | 启动时从备份归档恢复(见下文备份节) |
第一次点进去该做什么
Jellyfin 首次配置按操作顺序走四步,全程点鼠标:
- 创建管理员账户:欢迎页上设置用户名和密码,这个账号是后面所有管理操作的入口。
- 过一遍初始设置:选择界面语言、元数据语言(选中文即可)、时区,不确定的直接跳过,日后再改。
- 添加媒体库:控制台 → 媒体库 → 新建,选类型(电影/电视剧/音乐/照片/书籍/家庭视频),然后挑目录。目录结构建议先整理成两种最规范的形态,识别率最高:
Movies/ 星际穿越 (2014).mkv TV/ 熊家餐馆/ 第 01 季/ 熊家餐馆 S01E01.mkv- 验证播放:随便点开一部片子,用手机或网页端播放。首扫需要时间,封面和简介会陆续补全;播放时留意页面显示的"直连播放"或"转码",前者说明局域网直出,性能最好。
💡 想研究接口时,浏览器访问http://服务器IP:8096/api-docs/swagger/index.html可以看完整的 API 文档,做二次开发非常有用。
踩坑急救 ⚠️
以下三个是 Jellyfin 常见问题里出镜率最高的,都按"现象 → 三步处理 → 验证"来写。
端口被占用了怎么办?
现象:服务起不来,日志里出现类似Kestrel failed to start的报错,提示地址或端口绑定失败。
三步处理:
- 先确认谁占着端口:
ss -lntp | grep 8096 - 两条路二选一:Docker 用户改宿主机映射即可,重建容器时写
-p 8097:8096;本机直装用户则编辑配置目录里的network.xml,把InternalHttpPort改成空闲端口 - 重启服务或容器
验证:curl -I http://localhost:新端口能返回响应头,浏览器可打开欢迎页。
媒体文件识别不出来怎么办?
现象:媒体库建好了,但列表是空的,或只有部分文件出现。
三步处理:
- 检查权限:运行用户(或容器用户)必须对媒体目录有读权限,Docker 挂载后
docker exec进去ls试一下最直观 - 检查命名:电视剧解析依赖 TV 命名解析器 这套规则,
剧集名 S01E01.mkv这类格式最稳;文件被重命名成乱码时解析会直接跳过 - 手动触发重扫:控制台 → 媒体库 → 对应库 → 刷新媒体库
验证:目标文件出现在库里且封面、集数信息正确。
播放卡顿、转码吃力怎么办?
现象:手机或网页端播放明显掉帧,服务器 CPU 飙高。
三步处理:
- 确认转码可用:Docker 镜像自带 FFmpeg,本机直装则确保
ffmpeg在 PATH 里,或用--ffmpeg指定路径 - 开启硬件加速:控制台 → 播放 → 硬件加速,按你的芯片选 QSV / VAAPI / NVENC
- 把
--cachedir指到 SSD,并适当调低转码质量档位
验证:再次播放时状态显示"直连播放",或转码时 CPU 占用明显回落。
让媒体库更好用
养成备份习惯
备份覆盖的是用户、配置和媒体库元数据(不含媒体文件本身),升级或改库前打一份最省心。在控制台的备份页即可创建归档,核心逻辑在 备份服务实现;需要在新机器上整站还原时,一条命令:
jellyfin --restore-archive /path/to/backup.zip服务会先启动、应用归档再自动重启,完成后媒体库原样回来。
反向代理 + HTTPS 一把过 🔒
对外暴露时别裸奔 HTTP。用 nginx 把 443 反代到本机 8096,一段最小配置:
server { listen 443 ssl; server_name your.domain; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; location / { proxy_pass http://127.0.0.1:8096; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; # WebSocket 需要 proxy_set_header Connection "upgrade"; } }配完nginx -s reload,客户端改用https://your.domain连接即可;WebSocket 不升级头的话会话推送会断。
转码与硬件加速
局域网内尽量让它直连播放,把转码留给弱网络场景。硬件加速开好后,转码压力从 CPU 转移到显卡,同一台机器可多路转码。进阶玩家可以把--cachedir、--logdir拆到不同磁盘,转码临时文件进 SSD、日志进机械盘,互不抢 IO。
让封面和简介自己长出来
首次扫描时 Jellyfin 会调用元数据插件(如 OMDb)自动补全海报、简介与演职员信息,命名越规范、匹配越准。
结语 🎬
部署只是开始——把片子按规范命名、把备份和反代配好,你的私有影音库就能长期安静地跑下去。现在就去挑一个空目录,把第一部电影丢进去试试。
| 安装包 | Docker 容器 | 源码编译 |
|---|---|---|
| 适合:家用机、只想马上用起来 | 适合:服务器/NAS、未来可能要迁移 | 适合:开发者、要读源码或改功能 |
| 成本:装完即用,几分钟 | 成本:4 条命令,约 15 分钟 | 成本:SDK + 编译,半小时起 |
| 建议:家庭场景先装它,够用且省心 | 建议:生产首选,迁移就是搬三个卷 | 建议:有二次开发需求再走这条路 |
【免费下载链接】jellyfinThe Free Software Media System - Server Backend & API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考