技术笔记

把 NAS 变成家庭影音中心:Jellyfin + Docker 实战部署

yaobingbin yaobingbin · · 约 6 分钟 · 0 条评论

一、为什么用 Docker 部署

在 NAS 上装应用,最省心的办法几乎是清一色的 Docker。原因很简单:

  • 不污染系统:应用和依赖都打包在容器里,装十个服务也不会把系统搞乱。
  • 升级回滚方便:换镜像版本号就是升级,出问题改回去即可。
  • 迁移简单:配置文件和 docker-compose.yml 拷到新机器,一条命令就能跑起来。
  • 资源隔离:可以限制每个容器的 CPU 和内存占用,不至于一个服务拖垮整台 NAS。

下面以 Jellyfin 为例,完整走一遍部署流程。Jellyfin 是一款完全开源免费的影音服务器,能把你硬盘里的电影、剧集整理成带海报墙的私人影院,手机、电视、平板都能接着看。

二、准备工作

1. 规划目录结构

建议把容器配置和数据分开存放,方便备份。例如:

/docker/jellyfin/config   # 配置文件
/docker/jellyfin/cache    # 缓存
/media/movies             # 电影
/media/tvshows            # 剧集

2. 确认用户权限

很多容器启动失败,都是卡在权限上。先查清楚当前用户的 UID 和 GID:

id your_username

记下输出的 uid 和 gid,后面要写进 compose 文件。同时确保媒体目录对应用户有读写权限:

sudo chown -R 1000:1000 /docker/jellyfin
sudo chmod -R 755 /media

三、编写 docker-compose.yml

/docker/jellyfin/ 目录下新建 docker-compose.yml

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: 1000:1000
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /media/movies:/media/movies:ro
      - /media/tvshows:/media/tvshows:ro
    devices:
      - /dev/dri:/dev/dri
    restart: unless-stopped

几个关键点说明:

  • user: 1000:1000 换成前面查到的实际 UID 和 GID,这是避免权限报错的关键。
  • network_mode: host 让容器直接使用主机网络,方便局域网设备通过 DLNA 发现服务,也省去端口映射的麻烦。
  • devices 这一行把核显设备透传给容器,是开启硬件转码的前提。
  • 媒体目录加了 :ro 只读挂载,防止应用误删你的片库。

然后启动:

cd /docker/jellyfin
docker compose up -d

浏览器访问 http://NAS的IP:8096,就能看到初始化向导了。

四、开启硬件转码

硬解能让 NAS 在低 CPU 占用的情况下流畅转码 4K 视频,这一步别跳过。

进入 Jellyfin 后台:控制台 → 播放 → 转码,硬件加速选择 Video Acceleration API(VAAPI)Quick Sync(取决于你的 CPU),VA-API 设备填 /dev/dri/renderD128,勾选「启用硬件解码」中需要支持的编码格式(H.264、HEVC 等)。

验证是否生效:播放一个高码率视频,然后查看播放页面的「正在转码」信息,或者在容器里执行:

docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device vaapi

也可以直接看宿主机的 intel_gpu_top,有占用就说明核显在工作。

五、媒体库整理与刮削

能不能刮削出漂亮的海报墙,九成取决于文件命名是否规范。推荐格式:

电影:
  /media/movies/蜘蛛侠:英雄无归 (2021)/蜘蛛侠:英雄无归 (2021).mkv

剧集:
  /media/tvshows/权力的游戏/Season 01/权力的游戏 S01E01.mkv

添加媒体库时,内容类型选「电影」或「剧集」,元数据语言选 Chinese Simplified,勾选需要的元数据下载器即可。如果海报刮不出来,多半是命名不含年份,或者目录层级不对。

六、几个常见坑

  • 权限报错:容器日志出现 Permission denied,九成是 UID/GID 没写对,或者目录属主不对。
  • 核显不通:先确认宿主机 ls /dev/dri 有输出,容器里也要能看到;没有的话检查 BIOS 是否开启了核显。
  • 外网访问卡:务必开启硬件转码,纯 CPU 软解 4K 基本跑不动。
  • 字幕乱码:在播放设置里把字幕编码设为 UTF-8,或者用工具批量转码字幕文件。

七、顺带一提:其他值得部署的服务

掌握了 Docker 之后,同一套思路可以部署很多东西:

  • Nextcloud:自建私有云盘,文件同步、在线协作、日历联系人一应俱全。
  • PhotoPrism / Immich:AI 识图的照片管理,能按人脸、地点、物体自动分类,是手机相册的绝佳替代。
  • qBittorrent:挂机下载,配合自动化工具实现追剧自动入库。
  • Vaultwarden:自建密码管理器,Bitwarden 的轻量级服务端实现。

小结

Docker 是把 NAS 从「存储器」变成「家庭服务器」的钥匙。入门只需要理解三件事:配置和数据要分开挂载、权限靠 UID/GID 对齐、升级改镜像版本号。剩下的就是照着 compose 文件抄,抄几次就熟了。

评论经后台审核通过后显示 · 请勿发布广告、外链或无关内容

发表评论

邮箱地址不会被公开。填写昵称与邮箱后方可评论。