跳转到内容

使用 Docker 部署 Jellyfin 媒体服务器:打造个人 Netflix(2026版)

Jellyfin 媒体服务器

Jellyfin 是一款完全免费、开源的媒体服务器软件,让您可以在自己的服务器上搭建个人流媒体平台。与 Plex 和 Emby 不同,Jellyfin 没有任何付费限制,所有功能完全开放,包括硬件转码、多用户支持、移动端应用等。本教程将带您从零开始,通过 Docker 部署 Jellyfin,打造属于您自己的"Netflix"。

目录

  1. 什么是 Jellyfin?
  2. 为什么选择 Jellyfin?
  3. 系统要求与准备
  4. Docker 部署方案
  5. 初始配置与设置
  6. 硬件转码配置
  7. 元数据刮削与管理
  8. 远程访问设置
  9. 移动端 App 使用
  10. 性能优化与维护

1. 什么是 Jellyfin?

1.1 Jellyfin 简介

Jellyfin 是 Emby 3.5.2 版本的开源分支,于 2018 年正式发布。由于 Emby 转向闭源并引入付费功能,社区开发者决定创建一个完全开源、免费的替代品,这就是 Jellyfin 的由来。

核心特点

  • 🆓 完全免费:无任何付费功能或订阅
  • 🔓 开源透明:代码完全公开,可审计
  • 🎬 媒体管理:自动整理电影、剧集、音乐
  • 📺 多客户端:Web、iOS、Android、智能电视
  • 硬件转码:支持 GPU 加速转码
  • 👥 多用户支持:独立账户和观看历史
  • 🌐 远程访问:随时随地访问媒体库
  • 🔒 隐私保护:数据完全掌控在自己手中

1.2 与其他媒体服务器对比

特性JellyfinPlexEmbyKodi
价格🆓 完全免费💰 部分付费💰 部分付费🆓 免费
开源✅ 完全开源❌ 闭源❌ 闭源✅ 开源
硬件转码✅ 免费💰 Plex Pass💰 Emby Premiere⚠️ 需插件
移动端 App✅ 免费💰 Plex Pass💰 付费✅ 免费
离线下载✅ 免费💰 Plex Pass💰 付费N/A
** DVR 录制**✅ 免费💰 Plex Pass💰 付费⚠️ 需插件
多服务器✅ 免费💰 Plex Pass💰 付费N/A
社区支持⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
易用性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
自定义性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

选择建议

  • 🎯 追求免费和开源 → Jellyfin
  • 📱 需要最佳用户体验 → Plex
  • ⚖️ 折中方案 → Emby
  • 🖥️ 本地播放为主 → Kodi

1.3 发展历程

时间事件
2018.12Jellyfin 项目启动
2019.02首个稳定版本发布
2020.0710.0 版本,重大改进
2021.03移动端 App 发布
2022.01硬件转码完善
2023.0610.8 版本,UI 重构
2024.1110.9 版本,性能提升
2025.0510.10 版本,AI 元数据
2026.01持续更新,社区活跃

2. 为什么选择 Jellyfin?

2.1 核心优势

优势一:完全免费,无隐藏费用

Plex/Emby 的付费墙

Plex Pass ($119.99 终身或 $4.99/月):
❌ 硬件转码
❌ 移动同步
❌ DVR 录制
❌ 高级音乐功能

Emby Premiere ($54/年或 $119 终身):
❌ 硬件转码
❌ 离线下载
❌ 直播电视
❌ 家长控制增强

Jellyfin

✅ 所有功能完全免费
✅ 无订阅费用
✅ 无功能限制
✅ 社区驱动开发

实际节省

假设使用 5 年:
Plex Pass 终身:$119.99
Emby Premiere 5年:$270
Jellyfin:$0

节省:$120-270

优势二:隐私和数据主权

云端服务的问题

Plex/Emby:
❌ 需要连接到官方服务器
❌ 元数据请求经过第三方
❌ 观看习惯被追踪
❌ 可能收集使用数据

Jellyfin 的本地优先

✅ 完全本地运行
✅ 无需外部服务器
✅ 数据完全私有
✅ 可选择性启用元数据
✅ 可离线使用

隐私保护

bash
# Jellyfin 可以完全断网运行
# 只需内网即可访问
# 不依赖任何云服务

优势三:强大的硬件转码

什么是转码

原始视频格式 → 实时转换 → 兼容格式

例如:
4K HEVC → 1080p H.264
(用于不支持原格式的设备)

硬件转码优势

CPU 软解:
- 占用大量 CPU
- 功耗高
- 可能卡顿

GPU 硬解:
- 占用极少 CPU
- 功耗低
- 流畅播放
- 支持多路并发

支持的硬件

✅ Intel Quick Sync (核显)
✅ NVIDIA NVENC/NVDEC
✅ AMD VCE/VCN
✅ ARM Mali (部分设备)
✅ Raspberry Pi (部分型号)

性能对比

硬件并发转码数功耗
Intel i5 (核显)3-5 路15W
NVIDIA GTX 16505-8 路75W
AMD RX 55004-6 路100W
CPU 软解 (i7)1-2 路65W

优势四:活跃的社区和插件生态

官方插件

📚 元数据提供者
🎵 音乐歌词
📺 直播电视集成
🔤 字幕下载
🎨 主题定制
📊 统计分析

社区贡献

GitHub Stars: 30,000+
Contributors: 500+
Releases: 定期更新
Issues: 快速响应

文档资源

✅ 官方文档完善
✅ 社区教程丰富
✅ YouTube 视频众多
✅ 论坛活跃

2.2 适用场景

场景 1:家庭媒体中心

需求

- 存储家庭照片和视频
- 共享电影和剧集
- 多设备同时观看
- 儿童内容管理

Jellyfin 方案

✅ 集中存储所有媒体
✅ 自动整理和分类
✅ 多用户独立账户
✅ 家长控制功能
✅ 跨设备同步进度

场景 2:个人影视库

需求

- 收藏大量电影
- 追剧管理
- 高质量播放
- 随时访问

Jellyfin 方案

✅ 自动下载元数据
✅ 海报墙展示
✅ 续播功能
✅ 收藏和播放列表
✅ 评分和评论

场景 3:音乐库管理

需求

- 大量音乐收藏
- 按艺术家/专辑分类
- 歌词显示
- 多房间播放

Jellyfin 方案

✅ 自动整理音乐
✅ ID3 标签读取
✅ 歌词同步
✅ 播放队列
✅ 随机播放

场景 4:远程访问

需求

- 外出时访问家中媒体
- 手机/平板观看
- 流量优化
- 安全访问

Jellyfin 方案

✅ Web 界面访问
✅ 移动端 App
✅ 自适应码率
✅ HTTPS 加密
✅ 用户认证

3. 系统要求与准备

3.1 硬件要求

最低配置

CPU: 双核 2GHz+
RAM: 2GB
存储: 20GB (系统) + 媒体空间
网络: 100Mbps
GPU: 可选(用于转码)

适用场景

  • 少量媒体文件(< 500GB)
  • 1-2 个并发用户
  • 直接播放为主(少转码)
  • 树莓派等低功耗设备

推荐配置

CPU: 四核 3GHz+ (Intel 8代+ 或 AMD Ryzen)
RAM: 8GB
存储: 100GB (系统) + TB 级媒体存储
网络: Gigabit Ethernet
GPU: Intel 核显 或 NVIDIA GTX 1650+

适用场景

  • 中等媒体库(1-5TB)
  • 3-5 个并发用户
  • 需要硬件转码
  • 4K 内容支持

高性能配置

CPU: 六核+ (Intel i7/i9 或 AMD Ryzen 7/9)
RAM: 16-32GB
存储: NVMe SSD (系统) + RAID 阵列 (媒体)
网络: 2.5Gbps+ Ethernet
GPU: NVIDIA RTX 3060+ 或 Intel Arc

适用场景

  • 大型媒体库(10TB+)
  • 10+ 并发用户
  • 多路 4K 转码
  • 企业级应用

3.2 存储规划

存储结构建议

/media/
├── movies/           # 电影
│   ├── Movie Name (Year)/
│   │   ├── movie.mp4
│   │   ├── poster.jpg
│   │   └── fanart.jpg
├── tv/              # 电视剧
│   ├── Show Name/
│   │   ├── Season 01/
│   │   │   ├── S01E01.mp4
│   │   │   └── S01E02.mp4
│   │   └── Season 02/
├── music/           # 音乐
│   ├── Artist Name/
│   │   ├── Album Name/
│   │   │   ├── 01 Song.mp3
│   │   │   └── cover.jpg
├── photos/          # 照片(可选)
└── books/           # 电子书(可选)

命名规范

电影

✅ 好:
Avatar (2009).mkv
The Dark Knight (2008).mp4

❌ 差:
avatar_final_v2.mkv
movie1.mp4

电视剧

✅ 好:
Breaking Bad/
├── Season 01/
│   ├── Breaking Bad - S01E01.mkv
│   └── Breaking Bad - S01E02.mkv

❌ 差:
bb/
├── s1/
│   ├── ep1.avi
│   └── 1-2.mkv

音乐

✅ 好:
Artist/
└── Album/
    ├── 01 - Song Title.mp3
    └── folder.jpg

❌ 差:
music/
└── songs/
    ├── track1.mp3
    └── song.mp3

3.3 网络要求

带宽计算

直接播放

SD (480p): 2-5 Mbps
HD (1080p): 5-10 Mbps
4K (2160p): 15-25 Mbps

转码播放

取决于转码质量:
480p: 1-2 Mbps
720p: 2-4 Mbps
1080p: 4-8 Mbps

并发计算

示例:5 个用户同时观看 1080p
直接播放:5 × 8 Mbps = 40 Mbps
转码播放:5 × 5 Mbps = 25 Mbps

建议上行带宽:50-100 Mbps

路由器设置

端口转发(如需外网访问):

TCP 8096: Jellyfin Web UI
TCP 8920: HTTPS (如果启用)
UDP 1900: DLNA (可选)

QoS 设置

优先 Jellyfin 流量
确保流畅播放
避免其他下载影响

3.4 软件准备

必需软件

✅ Docker 和 Docker Compose
✅ 文本编辑器
✅ SSH 客户端(远程管理)
✅ 浏览器

可选软件

📁 File Browser(文件管理)
🔄 Watchtower(自动更新)
🌐 Nginx Proxy Manager(反向代理)
🔍 Radarr/Sonarr(自动下载)

4. Docker 部署方案

4.1 安装 Docker

Ubuntu/Debian

bash
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt update
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# 验证安装
docker --version
docker compose version

CentOS/RHEL

bash
# 添加仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动并开机自启
sudo systemctl start docker
sudo systemctl enable docker

macOS

bash
# 安装 Docker Desktop
brew install --cask docker

# 启动
open /Applications/Docker.app

Windows

下载 Docker Desktop for Windows
https://www.docker.com/products/docker-desktop

安装并启动

4.2 创建目录结构

bash
# 创建项目目录
mkdir -p ~/jellyfin/{config,cache,media}
cd ~/jellyfin

# 目录说明:
# config/ - Jellyfin 配置文件
# cache/ - 缓存和转码临时文件
# media/ - 媒体文件(或挂载外部存储)

如果使用外部存储

bash
# 挂载硬盘
sudo mount /dev/sdb1 /mnt/media

# 创建符号链接
ln -s /mnt/media ~/jellyfin/media

4.3 Docker Compose 配置

创建 docker-compose.yml

yaml
version: '3.8'

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: 1000:1000  # 使用当前用户 ID
    network_mode: host  # 使用 host 网络模式
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media:ro  # 只读挂载媒体
    environment:
      - TZ=Asia/Shanghai  # 时区
      - UMASK_SET=022
    devices:
      # Intel 核显(如使用)
      - /dev/dri:/dev/dri
      # NVIDIA GPU(如使用,需要 nvidia-docker)
      # - /dev/nvidia0:/dev/nvidia0
      # - /dev/nvidiactl:/dev/nvidiactl
      # - /dev/nvidia-uvm:/dev/nvidia-uvm
    restart: unless-stopped
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

重要说明

用户 ID 获取

bash
# 查看当前用户 ID
id

# 输出示例:
# uid=1000(username) gid=1000(username) groups=1000(username)

# 修改 docker-compose.yml 中的 user: 1000:1000

网络模式

host 模式:
✅ 性能最佳
✅ 端口自动映射
❌ 与其他容器可能冲突

bridge 模式(备选):
ports:
  - "8096:8096"
  - "8920:8920"

设备挂载

Intel 核显:

bash
# 检查是否有 DRI 设备
ls -la /dev/dri

# 应该看到:
# card0
# renderD128

NVIDIA GPU:

bash
# 需要安装 NVIDIA Container Toolkit
# 参考:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

# 测试
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

4.4 启动服务

bash
# 启动 Jellyfin
docker compose up -d

# 查看日志
docker compose logs -f jellyfin

# 查看运行状态
docker ps

期望输出

CONTAINER ID   IMAGE                      STATUS
xxx            jellyfin/jellyfin:latest   Up 2 minutes

4.5 访问 Jellyfin

首次访问

浏览器打开:http://your-server-ip:8096

例如:http://192.168.1.100:8096

看到欢迎页面

🎉 Welcome to Jellyfin!

请选择语言 → 继续

5. 初始配置与设置

5.1 初始向导

步骤 1:选择语言

选择:简体中文 或 English
点击 "Next"

步骤 2:创建管理员账户

用户名:admin(或其他)
密码:强密码(至少 8 位)
确认密码:再次输入

⚠️ 重要:
- 记住密码
- 使用强密码
- 建议启用两步验证(后续)

步骤 3:添加媒体库

添加电影库

1. 点击 "Add Media Library"
2. 内容类型:Movies(电影)
3. 显示名称:Movies(或中文"电影")
4. 文件夹:选择 /media/movies
5. 点击 "OK"

添加电视剧库

1. 点击 "Add Media Library"
2. 内容类型:TV Shows(电视剧)
3. 显示名称:TV Shows(或"电视剧")
4. 文件夹:选择 /media/tv
5. 点击 "OK"

添加音乐库(可选):

1. 内容类型:Music(音乐)
2. 显示名称:Music(或"音乐")
3. 文件夹:选择 /media/music
4. 点击 "OK"

步骤 4:元数据语言

首选元数据语言:Chinese Simplified(简体中文)
或 English(英文,元数据更全)

国家/地区:China(中国)

步骤 5:完成设置

点击 "Finish"
进入主界面

5.2 基本设置

进入 Dashboard(仪表板):

General(常规)

Server name: My Jellyfin Server
Preferred language: 简体中文
Enable automatic port mapping: No(如已手动配置)

Playback(播放)

Enable hardware acceleration: 
- 选择您的 GPU 类型
  * Intel QuickSync
  * NVIDIA NVENC
  * AMD VCE
  * Disabled(如无 GPU)

Transcoding throttle: 0(无限制)
Enable throttling: No

Streaming(流媒体)

Internet streaming bitrate limit: 0(无限制)
或根据带宽设置:
- 10 Mbps: 10000 kbps
- 50 Mbps: 50000 kbps

Remote quality: Auto(自动)

5.3 用户管理

创建新用户

Dashboard → Users → Add User

用户名:guest
密码:(可选)
允许远程控制:Yes
允许媒体下载:No(根据需要)

点击 "Save"

家长控制

Dashboard → Users → 选择用户 → Parental Control

限制内容评级:
- 电影:PG-13 以下
- 电视:TV-14 以下

隐藏特定媒体库:Yes/No
设置观看时间限制:可选

5.4 备份配置

手动备份

bash
# 备份配置目录
tar czf jellyfin-backup-$(date +%Y%m%d).tar.gz ~/jellyfin/config/

# 下载到本地
scp user@server:~/jellyfin-backup-*.tar.gz ./

自动备份

yaml
# 添加到 docker-compose.yml
services:
  jellyfin-backup:
    image: alpine
    volumes:
      - ./config:/source:ro
      - ./backups:/backup
    command: >
      sh -c "
        tar czf /backup/jellyfin-$(date +%Y%m%d).tar.gz /source &&
        find /backup -name '*.tar.gz' -mtime +30 -delete
      "
    restart: no

6. 硬件转码配置

6.1 Intel 核显配置

检查硬件

bash
# 查看显卡信息
lspci | grep VGA

# 应该看到:
# Intel Corporation UHD Graphics 630

# 检查 DRI 设备
ls -la /dev/dri

加载驱动

bash
# 确保加载 i915 驱动
sudo modprobe i915

# 验证
lsmod | grep i915

权限设置

bash
# 添加用户到 video 组
sudo usermod -aG video $USER

# 重启 Docker 容器
docker compose down
docker compose up -d

Jellyfin 设置

Dashboard → Playback → Transcoding

Hardware acceleration: Intel QuickSync (QSV)

Encoder preset: Quality
Encoding rate control: VBR
Enable VPP Tone Mapping: Yes(HDR 内容)

测试转码

1. 播放一个需要转码的视频
2. Dashboard → Dashboard → Active Devices
3. 查看是否显示 "HW"(硬件加速)

6.2 NVIDIA GPU 配置

安装驱动

bash
# Ubuntu
sudo apt install nvidia-driver-535

# 重启
sudo reboot

# 验证
nvidia-smi

安装 NVIDIA Container Toolkit

bash
# 添加仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 安装
sudo apt update
sudo apt install nvidia-container-toolkit

# 配置 Docker
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

测试 GPU

bash
# 测试容器
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

# 应该看到 GPU 信息

更新 Docker Compose

yaml
services:
  jellyfin:
    # ... 其他配置
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Jellyfin 设置

Dashboard → Playback → Transcoding

Hardware acceleration: NVIDIA NVENC

Enable hardware encoding: Yes
Enable hardware decoding: Yes
HEVC Decoder: NVIDIA NVDEC
VP9 Decoder: NVIDIA NVDEC

6.3 AMD GPU 配置

安装驱动

bash
# Ubuntu
sudo apt install mesa-vulkan-drivers vainfo

# 验证
vainfo

Jellyfin 设置

Hardware acceleration: AMD VCE

Enable hardware encoding: Yes
Enable hardware decoding: Yes

6.4 转码参数优化

通用设置

Transcoding path: /cache/transcodes
Delete segments older than: 1 day
Throttle Transcodes: No
Enable segment deletion: Yes

编码器预设

Quality vs Speed:
- Faster: 更快,质量稍低
- Balanced: 平衡(推荐)
- Slower: 更慢,质量更高

Rate Control:
- CBR: 固定码率
- VBR: 可变码率(推荐)
- CQP: 固定质量

HDR 处理

Enable VPP Tone Mapping: Yes(将 HDR 转为 SDR)
Tonemapping Algorithm: Reinhard
Tonemapping Range: TV
Tonemapping Desaturation: 0.5

7. 元数据刮削与管理

7.1 元数据提供者

Jellyfin 支持多个元数据源:

内置提供者

✅ TheMovieDB(电影/剧集)
✅ TheTVDB(电视剧)
✅ MusicBrainz(音乐)
✅ OMDB(补充信息)
✅ Fanart.tv(背景图)

配置方法

Dashboard → Libraries → 选择库 → Manage Library → Metadata Downloaders

启用/禁用提供者
调整优先级(拖拽排序)

推荐配置

电影库:

1. TheMovieDB
2. OMDB
3. Fanart.tv

电视剧库:

1. TheTVDB
2. TheMovieDB
3. Fanart.tv

7.2 自动刮削

触发条件

✅ 添加新媒体文件时
✅ 手动刷新元数据
✅ 定时任务(可配置)

手动刷新

1. 进入媒体库
2. 右键点击项目
3. 选择 "Refresh Metadata"
4. 选择 "Replace all metadata"(完全替换)
   或 "Search for missing metadata"(仅补充)

批量刷新

Library → 点击右上角三个点
→ Scan Library
→ Replace all metadata

7.3 自定义元数据

编辑信息

1. 点击媒体项目
2. 点击编辑按钮(铅笔图标)
3. 修改:
   - 标题
   - 概述
   - 年份
   - 评级
   - 流派
   - 演员
4. 保存

上传封面

1. 编辑项目
2. 点击 "Change Image"
3. 上传图片
   - Poster(海报)
   - Backdrop(背景)
   - Logo(标志)
   - Thumb(缩略图)

NFO 文件支持

Jellyfin 支持从 NFO 文件读取元数据:

电影 NFO 示例

xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>Avatar</title>
  <originaltitle>Avatar</originaltitle>
  <year>2009</year>
  <plot>A paraplegic Marine dispatched to the moon...</plot>
  <runtime>162</runtime>
  <mpaa>PG-13</mpaa>
  <genre>Action</genre>
  <genre>Adventure</genre>
  <director>James Cameron</director>
  <actor>
    <name>Sam Worthington</name>
    <role>Jake Sully</role>
  </actor>
</movie>

放置位置

Movie Folder/
├── movie.mp4
└── movie.nfo

7.4 字幕管理

自动下载字幕

安装字幕插件

Dashboard → Plugins → Catalog
搜索 "OpenSubtitles"
安装并重启

配置字幕

Dashboard → Plugins → OpenSubtitles
输入 API Key(免费注册 opensubtitles.org)
设置首选语言:Chinese, English

手动添加字幕

1. 下载字幕文件(.srt, .ass)
2. 重命名为与视频相同
3. 放在同一目录

示例:
Movie.mp4
Movie.zh.srt  (中文字幕)
Movie.en.srt  (英文字幕)

字幕设置

Dashboard → Playback → Subtitles

Subtitle mode: Default
Download subtitles: Yes
Preferred subtitle language: Chinese
Fallback subtitle language: English

8. 远程访问设置

8.1 方案对比

方案难度安全性性能成本
端口转发⭐ 简单⚠️ 一般⭐⭐⭐⭐⭐🆓 免费
Cloudflare Tunnel⭐⭐ 中等⭐⭐⭐⭐⭐⭐⭐⭐⭐🆓 免费
VPN⭐⭐⭐ 复杂⭐⭐⭐⭐⭐⭐⭐⭐⭐🆓-💰
Tailscale⭐ 简单⭐⭐⭐⭐⭐⭐⭐⭐⭐🆓 免费

8.2 Cloudflare Tunnel(推荐)

参见本站教程:Cloudflare Tunnel 完全指南

快速配置

yaml
# cloudflared config.yml
tunnel: your-tunnel-id
credentials-file: /path/to/creds.json

ingress:
  - hostname: jellyfin.yourdomain.com
    service: http://localhost:8096
  
  - service: http_status:404

优势

✅ 无需端口转发
✅ 自动 HTTPS
✅ DDoS 防护
✅ 隐藏真实 IP

8.3 端口转发

路由器设置

1. 登录路由器管理界面
2. 找到 Port Forwarding / Virtual Server
3. 添加规则:
   - 外部端口:8096
   - 内部 IP:Jellyfin 服务器 IP
   - 内部端口:8096
   - 协议:TCP
4. 保存

动态 DNS(如无固定公网 IP):

使用服务:
- No-IP
- DuckDNS
- DynDNS

配置 DDNS 客户端
域名指向动态 IP

访问

http://your-ddns-domain:8096

⚠️ 安全警告

端口转发暴露服务到互联网
务必:
✅ 使用强密码
✅ 启用 HTTPS
✅ 定期更新
✅ 监控访问日志

8.4 Tailscale(最简单)

安装 Tailscale

bash
# 服务器
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

# 客户端(手机/电脑)
下载 Tailscale App
登录同一账户

访问

使用 Tailscale 分配的 IP
http://100.x.x.x:8096

优势

✅ 零配置
✅ 端到端加密
✅ 无需公网 IP
✅ 跨平台支持

8.5 HTTPS 配置

使用 Let's Encrypt

安装 Certbot

bash
sudo apt install certbot

# 获取证书
sudo certbot certonly --standalone -d jellyfin.yourdomain.com

配置 Nginx 反向代理

nginx
server {
    listen 443 ssl;
    server_name jellyfin.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

自动续期

bash
# 添加 cron 任务
sudo crontab -e

# 每月 1 号检查续期
0 0 1 * * certbot renew --quiet && systemctl reload nginx

9. 移动端 App 使用

9.1 官方 App

iOS / iPadOS

安装

App Store 搜索 "Jellyfin"
下载官方 App(免费)

连接服务器

1. 打开 App
2. 点击 "Add Server"
3. 输入地址:
   - 内网:http://192.168.x.x:8096
   - 外网:https://jellyfin.yourdomain.com
4. 登录账户
5. 开始浏览

功能

✅ 浏览媒体库
✅ 播放视频/音乐
✅ 离线下载
✅ 投屏(AirPlay)
✅ 推送通知

Android

安装

Google Play 搜索 "Jellyfin"
或 F-Droid
下载官方 App

功能

✅ 所有 iOS 功能
✅ Chromecast 投屏
✅ 后台播放
✅ 小部件

9.2 第三方客户端

Infuse(iOS/macOS)⭐ 推荐

特点

✅ 精美的界面
✅ 强大的解码能力
✅ 自动元数据
✅ Dolby Vision 支持
✅ 一次性购买(非订阅)

配置

1. 安装 Infuse
2. Settings → Services → Add
3. 选择 Jellyfin
4. 输入服务器地址
5. 登录

价格

免费版:基本功能
Pro 版:$9.99/年 或 $29.99 终身

Yatse(Android)

特点

✅ 遥控器功能
✅ 通知集成
✅ 小部件
✅ 高度可定制

9.3 智能电视

Samsung/LG Smart TV

方法 1:Web 浏览器

1. 打开电视浏览器
2. 访问 Jellyfin Web UI
3. 登录使用

方法 2:Kodi + Jellyfin 插件

1. 安装 Kodi
2. 添加 Jellyfin 插件
3. 配置服务器

Apple TV

App

App Store 下载 "Swiftfin"(免费开源)
或 "Infuse"(付费,体验更佳)

Android TV / Fire TV

App

Google Play 下载官方 Jellyfin App
或使用 Kodi

9.4 离线下载

iOS/Android

1. 找到要下载的项目
2. 点击下载图标
3. 选择质量:
   - Original(原画质)
   - High(高)
   - Medium(中)
   - Low(低)
4. 等待下载完成
5. 离线观看

管理下载

Profile → Downloads
查看已下载内容
删除不需要的
设置下载限制(WiFi only)

10. 性能优化与维护

10.1 数据库优化

定期清理

Dashboard → Scheduled Tasks

运行:
- Clean Database(清理数据库)
- Remove Old Cache Items(清理缓存)
- Optimize Database(优化数据库)

手动优化

bash
# 停止 Jellyfin
docker compose down

# 备份数据库
cp ~/jellyfin/config/data/jellyfin.db ~/jellyfin.db.backup

# 优化 SQLite
sqlite3 ~/jellyfin/config/data/jellyfin.db "VACUUM;"

# 重启
docker compose up -d

10.2 缓存管理

清理转码缓存

bash
# 删除旧的转码文件
find ~/jellyfin/cache/transcodes -type f -mtime +7 -delete

# 或自动清理
# Dashboard → Playback → Delete segments older than: 7 days

清理图片缓存

Dashboard → Scheduled Tasks
运行:Clean Image Cache

10.3 监控和日志

查看日志

bash
# Docker 日志
docker compose logs -f jellyfin

# 日志文件
tail -f ~/jellyfin/config/log_*.log

监控资源

bash
# CPU 和内存
docker stats jellyfin

# 磁盘使用
du -sh ~/jellyfin/*

Dashboard 监控

Dashboard → Dashboard
查看:
- Active Devices(活跃设备)
- Current Streams(当前流)
- System Activity(系统活动)

10.4 自动更新

使用 Watchtower

yaml
# 添加到 docker-compose.yml
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true  # 删除旧镜像
      - WATCHTOWER_SCHEDULE=0 0 3 * * *  # 每天 3 点检查
    restart: unless-stopped

手动更新

bash
# 拉取最新镜像
docker compose pull

# 重启容器
docker compose down
docker compose up -d

# 清理旧镜像
docker image prune -f

10.5 备份策略

完整备份脚本

bash
#!/bin/bash
# backup-jellyfin.sh

BACKUP_DIR=~/backups/jellyfin
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份配置
tar czf $BACKUP_DIR/config_$DATE.tar.gz ~/jellyfin/config/

# 备份数据库
cp ~/jellyfin/config/data/jellyfin.db $BACKUP_DIR/db_$DATE.db

# 删除 30 天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
find $BACKUP_DIR -name "*.db" -mtime +30 -delete

echo "Backup completed: $DATE"

定时备份

bash
# 添加 cron 任务
crontab -e

# 每天凌晨 2 点备份
0 2 * * * /path/to/backup-jellyfin.sh

10.6 故障排除

问题 1:无法访问 Web UI

检查

bash
# 容器是否运行
docker ps | grep jellyfin

# 端口是否监听
sudo netstat -tlnp | grep 8096

# 防火墙规则
sudo ufw status

解决

bash
# 重启容器
docker compose restart

# 检查日志
docker compose logs jellyfin

问题 2:转码失败

检查

bash
# GPU 是否可用
nvidia-smi
# 或
vainfo

# 权限是否正确
ls -la /dev/dri

解决

Dashboard → Playback
尝试不同的硬件加速器
或禁用硬件加速测试

问题 3:元数据不显示

检查

文件命名是否正确
文件夹结构是否符合规范
网络连接是否正常

解决

1. 刷新元数据
2. 检查元数据提供者设置
3. 手动编辑信息
4. 查看日志排查错误

问题 4:播放卡顿

检查

网络带宽是否足够
服务器负载是否过高
是否需要转码

解决

1. 降低播放质量
2. 启用硬件转码
3. 预转码媒体
4. 优化网络

常见问题解答

Q1: Jellyfin 支持哪些视频格式?

A: 几乎支持所有常见格式。

视频编码

✅ H.264/AVC
✅ H.265/HEVC
✅ VP8/VP9
✅ AV1(新)
✅ MPEG-2/4
✅ WMV

音频编码

✅ AAC
✅ AC3/E-AC3
✅ DTS
✅ FLAC
✅ MP3
✅ Opus

容器格式

✅ MP4
✅ MKV
✅ AVI
✅ MOV
✅ TS/M2TS
✅ WEBM

Q2: 如何迁移 Plex/Emby 到 Jellyfin?

A: Jellyfin 提供迁移工具。

从 Plex 迁移

1. 安装 Jellyfin
2. Dashboard → Advanced → Import Data
3. 选择 Plex 数据库
4. 映射媒体路径
5. 导入

从 Emby 迁移

由于 Jellyfin 是 Emby 分支
可以直接使用 Emby 的配置和数据库
只需更换程序即可

Q3: 可以同时多少人观看?

A: 取决于硬件和网络。

直接播放

千兆网络:10-20 人
百兆网络:3-5 人

硬件转码

Intel i5 核显:3-5 路 1080p
NVIDIA GTX 1650:5-8 路 1080p
高端 GPU:10+ 路

CPU 软解

i7-12700K:1-2 路 1080p
不推荐软解

Q4: 如何预转码媒体?

A: 使用 FFmpeg 批量转码。

脚本示例

bash
#!/bin/bash
# pre-transcode.sh

INPUT_DIR="/media/movies"
OUTPUT_DIR="/media/transcoded"

for file in "$INPUT_DIR"/*.mkv; do
    filename=$(basename "$file")
    ffmpeg -i "$file" \
        -c:v libx264 -preset fast -crf 23 \
        -c:a aac -b:a 128k \
        "$OUTPUT_DIR/${filename%.mkv}.mp4"
done

优点

✅ 播放更流畅
✅ 减少服务器负载
✅ 兼容性好

缺点

❌ 占用存储空间
❌ 转码耗时长
❌ 质量有损失

Q5: 如何优化 4K 播放?

A: 多个方面优化。

网络

- 使用有线连接
- 确保带宽充足(25Mbps+)
- 路由器 QoS 设置

服务器

- 启用硬件解码
- SSD 存储媒体
- 足够的 RAM

客户端

- 使用支持硬解的设备
- 更新播放器
- 选择合适的应用

Jellyfin 设置

- 禁用不必要的元数据下载
- 优化图片缓存
- 使用 direct play

Q6: 可以录制直播电视吗?

A: 是的,Jellyfin 支持 DVR。

需要

✅ HDHomeRun 或其他 tuner
✅ 天线或有线电视
✅ 配置 TV Provider

设置

Dashboard → Live TV
添加 Tuner
扫描频道
设置录制计划

Q7: 数据安全吗?

A: 相对安全,但需注意。

安全措施

✅ 使用强密码
✅ 启用 HTTPS
✅ 定期更新
✅ 备份数据
✅ 限制远程访问
✅ 监控日志

额外保护

- 使用 VPN 远程访问
- 启用两步验证
- 设置失败登录锁定
- 定期审查用户权限

Q8: Jellyfin 未来发展方向?

A: 社区驱动的持续改进。

路线图

🎯 更好的移动端体验
🎯 AI 辅助元数据
🎯 改进的转码性能
🎯 更多插件和集成
🎯 云同步功能
🎯 社交功能

社区参与

- GitHub 贡献代码
- 报告 bug
- 提出建议
- 帮助翻译
- 撰写文档

总结

Jellyfin 是构建个人媒体服务器的绝佳选择,它免费、开源、功能强大。

🎯 核心价值

  1. 完全免费:无任何隐藏费用
  2. 隐私保护:数据完全本地化
  3. 硬件转码:高效处理各种格式
  4. 跨平台:支持几乎所有设备
  5. 社区活跃:持续改进和支持

💡 实施建议

  1. 从小开始:先部署基础功能
  2. 逐步扩展:根据需要添加功能
  3. 重视备份:定期备份配置和数据
  4. 关注安全:启用 HTTPS 和强密码
  5. 参与社区:获取帮助和分享经验

📚 延伸阅读

💬 获取帮助

  • 📖 官方文档:jellyfin.org/docs
  • 💬 论坛:forum.jellyfin.org
  • 💬 Discord:discord.gg/jellyfin
  • 🐛 问题反馈:GitHub Issues
  • 💡 本站交流:欢迎在评论区分享经验

🎬 开始构建您的个人 Netflix,享受完全控制的媒体体验!

💡 提示:收藏本页面以备将来参考。如果您觉得本教程有帮助,欢迎分享给更多朋友!