

1 背景与硬件
寒假在家闲的蛋疼,受女朋友安利想看番剧和电影,奈何网络流媒体画质基本都令人汗颜。于是萌生了将家里这台闲置的电脑10400F & RX550变成一个集NAS 存储、媒体中心、远程下载、网盘挂载于一体的全能家庭服务器
服务器配置
Home-Server
- CPU: Intel i5-10400F (无核显)
- GPU: AMD Radeon RX 550 (亮机卡)
- OS: Ubuntu Server 24.04.3 + 1Panel 面板
- Storage: 1TB HDD + 250GB SSD
- Network: 双网口 (eno1/eno2)
主要服务
Docker Stack
Jellyfin
Samba
Nginx
AList
Aria2
本文将详细记录整个折腾过程中从物理连线到驱动安装,再到反向代理的报错问题和解决方案。
一些基础过程,比如 Windows 重装 Ubuntu-Server 、Jellyfin 的基础部署和使用,在前面的文章中已经记录过流程,网上也有大量详细教程,这里不再赘述。
以下仅按照流程顺序记录折腾过程中的问题与解决方案。
2 网络与存储:Windows 直连 Ubuntu Samba
为了传输 TB 级的数据,我选择用网线直接连接 Windows 和 Ubuntu 服务器(因为路由器端口不够且速度受限)。
之后遇到IP配置和Samba权限的问题,经过Gemini的帮助,选择了直接挂载服务器储存盘到Windows的方式,实现稳定的高速传输的同时为后来直接使用夸克网盘(没有Docker版本,部署在服务器代价太大)下载到服务器做了铺垫。以下是直接用网线连接两台机器的过程:
遇到的问题:Ping 得通,连不上
刚开始,我给两边分别设置了静态 IP (192.168.50.1 和 .2)。
- 现象:Linux 端配置正确,
pingWindows 通畅。但 Windows 端死活无法访问 Samba 共享。 - 报错:Windows 提示
系统错误 1231或网络路径不存在。
解决方案
核心原因是 Windows 将直连网络识别为“公用网络”,防火墙拦截了 SMB 流量;且 Docker 版 Samba 默认权限配置导致 Windows 匿名登录失败。
-
物理连接:网线直连两机网口。
-
IP 配置:
- Ubuntu:
sudo ip addr add 192.168.50.1/24 dev eno1 - Windows: 设置静态 IP
192.168.50.1,网关留空。


- Ubuntu:
-
Samba 部署 (Docker): 使用 Docker 部署比原生安装更干净。
-
强制挂载: 为了绕过 Windows 的匿名登录限制,使用命令行强制挂载:
powershell# 先清除旧连接 net use * /delete /y # 强制带用户认证挂载 net use Z: \\192.168.50.1\media /user:kylaan your_password
3 核心媒体库:Jellyfin 与显卡驱动问题
这是最耗时的一步。我的 CPU (10400F) 没核显,必须依靠 RX 550 独显进行转码。
第一回合:FFmpeg 退出代码 171 & 187
Docker 部署 Jellyfin 后,直接播放视频,日志疯狂报错:
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 171
No VA display found for device /dev/dri/renderD128.log原因分析:
- Code 171: 选择了
AMD AMF硬件加速。RX 550 对 AMF 支持极差,且我不小心勾选了 AV1 编码(老显卡根本不支持)。 - No VA display: Docker 根本没加载显卡驱动!
ls -l /dev/dri输出为空。
第二回合:修复驱动与配置
1. 宿主机安装固件
Ubuntu Server 缺省没有 AMD 固件。
sudo apt update
sudo apt install linux-firmware mesa-va-drivers mesa-vdpau-drivers -y
sudo rebootbash2. 验证驱动
重启后检查设备,终于看到了 renderD128。
ls -l /dev/dri
# 输出: card0 renderD128bash3. Docker 映射
修改 1Panel 编排,把显卡直通给容器。
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0yaml4. Jellyfin 内部设置
这是最关键的一步,设置错一个就会黑屏。
- 硬件加速: 选择
VAAPI(不要选 AMF) - VA-API 设备:
/dev/dri/renderD128 - 硬件解码: ✅ H264, ✅ HEVC, ✅ MPEG2
- 硬件编码: ❌ 取消勾选 AV1 (RX 550 不支持),只保留 H264。
4 公网访问:Nginx 反代配置问题
为了在外网访问,我采用了 FRP (内网穿透) -> 阿里云服务器 -> Nginx 反代 的架构。
诡异现象
- 使用
IP:端口访问:一切正常。 - 使用
https://movie.kylaan.top访问:网页能打开,能看海报,但点击播放一直转圈,最后黑屏,且服务器显示有流量跑动。

根源与修复
这是一个经典的 Nginx 反代配置问题。原因有二:
- 混合内容:Jellyfin 以为自己在跑 HTTP,返回了 HTTP 的流地址,被浏览器拦截。
- 缓冲阻塞:Nginx 默认开启缓冲,试图下载完视频片段再发给客户端,导致流媒体卡死。
5 资源获取:网盘自动化方案
服务器没有资源就是空壳。我配置了百度网盘和夸克网盘的自动化下载。
方案:使用 johngong/baidunetdisk 镜像,通过 VNC (Web 界面) 操作 Linux 版客户端。
操作重点:
- 部署后访问
http://192.168.100.89:5800/。 - 输入 VNC 密码。
- 最重要的设置:在百度网盘客户端设置里,将下载路径改为
/media/downloads(映射到物理硬盘的路径),否则下载的文件会在重启容器后丢失!

方案:夸克没有 Linux 客户端。Gemini给出的解决方案是 AList (聚合挂载) + Aria2 (下载器)。
流程:
- 部署 AList 和 Aria2 容器。
- AList 挂载夸克网盘 (需要抓取 Cookie)。
- AList 配置 Aria2 连接 (
http://aria2:6800/jsonrpc)。 - 使用:在 AList 网页勾选文件 -> “发送到 Aria2” -> 文件自动下载到服务器。
6 完美主义:字幕、弹幕与导航页
为了提升观影体验,我还折腾了以下细节:
1. 中文字幕方框问题
Jellyfin 烧录字幕时,如果容器内没有中文字体,汉字会显示为方框。

- 解决:
- 宿主机安装
fonts-noto-cjk-extra。 - Docker 映射
/usr/share/fonts:/usr/share/fonts。 - Jellyfin 后台启用“备用字体”
2. Bilibili 弹幕
使用了 jellyfin-plugin-danmu 插件。
- 安装插件仓库。
- 配置 B 站 Cookie。
- 刷新元数据,播放时选择 “Bilibili” 字幕轨道,弹幕就出来了!
3. 导航页 (Sun-Panel)
部署了 Sun-Panel,将 Jellyfin、1Panel和各个资源站等等全部聚合在一个页面,这是我的家庭云入口。

后续还有可能把阿里云上的服务也加进去,做到真正的一键直达。
7 总结
经过几天的通宵折腾,这台 10400F + RX 550 的机器已经脱胎换骨。
- 看片:Jellyfin 硬解 4K 流畅,支持弹幕。
- 管理:Samba 跑满千兆带宽。
- 下载:百度/夸克自动搬运。
- 访问:HTTPS 域名直达,无视内网限制。
希望这篇文章能帮助到有类似需求的朋友们。如果你也在折腾家庭服务器,欢迎留言交流经验!😊