N5105 PVELXC Docker部署Jellyfin硬解+阿里云盘WebDav+TMM
选择LXC的理由
什么值得买、知乎、B站有很多关于Jellyfin和阿里云盘WebDav相关的内容。
因为本人使用的N5105,“据说”核显是新一代,直通好像有点问题,这里我查阅了不少资料。
关键字就是 00:02.0,4e61,GuC / HuC 低压解码 等等。
尝试将 00:02.0 直通给 NAS,折腾的结果是没有结果,宿主机、虚拟机把我搞蒙了,中间安装过多个显卡驱动,执行了乱七八糟好多命令,最后找不到 /dev/dri 了。另外,我安装的 ds3617xs 是软路由的商家提供的,不知道是什么原因,换了 1T的sata硬盘后,还是会有死机的情况,但是比之前 2T硬盘频繁死机好多了(在 软路由篇 1 中有提到)。
折腾过程中,在爱快里面安装过docker,在VLEDE里面安装过docker,也在NAS里面安装过docker。后来一想,就是个docker在单独的容器里面安装不行吗?为啥还要去影响其他的虚拟机?
LXC是PVE的容器,与虚拟机有区别,不用搞硬件直通,可以经过配置与宿主共用硬件设备。
所以。开搞。
第一步 PVE宿主机安装核显驱动
可以参考 Intel 官方指南:
https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-focal.html
安装好驱动以后,检查一下 ls -l /dev/dri 看看有没有下面的内容:
第二步 创建CT模版
据说Ubuntu21以上才支持新的Intel核显,文章出处忘记了,我选用的ubuntu22.04standard(debian11standard应该也是可以的)。
1. 在local(pve)的CT模版里面点“模版”,选择并下载模版。CT模版下载有时候很慢,可以换源,比如清华源:
---
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.p
systemctl restart pvedaemon.service
---
2. 创建CT模版
我8G内存不太够了,爱快2G,VLEDE1G,NAS2G,这个LXC分了3G。
创建CT模版的时候要注意:
2.1. 输入名称,比如我的是 LXC。选项里面的【无特权的容器 把对勾去掉】,密码设置一个;
2.2. 模版选择 下载好的ubuntu22.04;
2.3. 硬盘我用了local-kvm存储里面的12G;
2.4. CPU 4核,内存3G,交换分区3G;
2.5 网络IPv4静态,设置一个与主路由(比如爱快)同网段的地址。
比如我的爱快是192.168.0.1,DHCP是192.168.0.2-192.168.0.200,
这个IPv4可以设置 192.168.0.201/24,网关192.168.0.1。
2.6 DNS默认就行。确认后创建好LXC。看一下新建的LXC的号码,比如我的是 103。
3. 创建CT后不要直接运行,改一下选项【功能选择 fuse,nfs,smb/cifs,嵌套】
4. 在PVE宿主机,修改 /etc/pve/lxc/103.conf (103来自 步骤2.6),在文件末尾加上一些内容。这些内容的意思是,不影响docker的安装和使用,另外就是绑定核显设备。
---
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
---
搞定这些之后,可以启动新创建的 LXC(103) 了。
第三步 安装Docker
0. 因为LXC第一次运行,先给apt换个源吧。教程很多,不写了。换源以后记得 apt-get update。
1. 安装Docker
---
sudo apt-get install ca-certificates curl gnupg lsb-release
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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
---
第四步 做好docker-compose的准备
1. 新建一些文件夹,用途是存放aliyundrive-webdav的refresh_token,存放jellyfin的cache和config,存放TinyMediaManager的config,设置rclone 阿里云盘的目录,等等
---
mkdir -p /root/aliyun-compose/aliyunconfig
mkdir -p /root/aliyun-compose/jellyfin/cache
mkdir -p /root/aliyun-compose/jellyfin/config
mkdir -p /root/aliyun-compose/TMM/config
mkdir -p /mnt/aliyundrive
---
2. 在 /rooot/aliyun-compose 文件夹里面,创建docker-compose.yml,内容如下。
自己在Chrome浏览器打开aliyundrive网页版,查看refresh_token,放在下面代码的【refresh_token】位置。
---
version: '3.1'
services:
webdav:
image: messense/aliyundrive-webdav
restart: always
user: root
container_name: aliyundriver1
ports:
- '8080:8080'
volumes:
- ./aliyunconfig:/etc/aliyundrive-webdav
- /etc/localtime:/etc/localtime
environment:
- REFRESH_TOKEN=[refresh_token]
- JAVA_OPTS='-Xmx1g'
- TZ='Asia/Shanghai'
jellyfin:
image: nyanmisaka/jellyfin
restart: unless-stopped
user: root
container_name: jellyfin1
network_mode: host
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /mnt/aliyundrive:/media
privileged: true
devices:
- /dev/dri:/dev/dri
environment:
- LC_ALL=en_US.UTF-8
- LANG=en_US.UTF-8
- LANGUAGE=en_US.en_US
- TZ=Asia/Shanghai
depends_on:
- webdav
tmm:
image: dzhuang/tinymediamanager
restart: always
user: root
container_name: tinymediamanager1
ports:
- '5800:5800'
volumes:
- ./TMM/config:/config
- /mnt/aliyundrive/Videos:/mnt/aliyun
environment:
- LANG=en_US.UTF-8
depends_on:
- webdav
---
第五步 不太完美的第四步带来的第五步
本来想把rclone放在docker里面,但是实在肝不动了,以后再搞吧。简单一点,在LXC(103)里面直接装一个rclone算了。
[第五步下面部分内容参考了https://blog.csdn.net/weixin_42527192/article/details/95783945,如果下面的命令不成功,可以打开这个网页学习。]
1. 安装rclone
apt-get rclone
2. 配置rclone
rclone config
名称可以输入 aliyun,类型选择 webdav,网址输入 LXC(103) 的IP地址,比如 http://192.168.0.201:8080。
3. 为了让rclone开机自动运行,在 /usr/lib/systemd/system 文件夹里面创建 rclone.service,内容如下:
---
[Unit]
Description=rclone
[Service]
User=root
ExecStartPre=/usr/bin/mkmod -m 666 /dev/fuse c 10 229
ExecStart=/usr/bin/rclone mount aliyundrive: /mnt/aliyundrive --allow-other --allow-non-empty --vfs-cache-mode writes
Restart=on-abort
[Install]
WantedBy=multi-user.target
---
重启 LXC(103) 后,用 df -h 命令看一下 /mnt/aliyundrive 已经挂载成功。
第六步 docker-compose 【不完美的一键部署】
在LXC(103) 的 /root/aliyun-compose 目录里面,执行 docker-compose up -d,就可以完成Jellyfin + aliyundrive-WebDav + TinyMediaManager 的部署了。
是不是有点一键部署的感觉?
建议第一到五步做好以后,放松一下,第二天把第六步当作第一步来做,更有感觉。
可以用 docker ps -a 看一下容器的运行情况。
总结一下
PVE通过lxc.conf把硬件设备给了LXC(103)使用。
Docker里的aliyundrive-wendav端口为8080。
rclone把aliyundrive-webdav挂载到了 /mnt/aliyundrive,实现了读写阿里云盘的功能。
Jellyfin和TMM都把LXC(103)的 /mnt/aliyundrive 映射到自己的容器里面。
使用感受
本来想让朋友们觉得简单,但是写起来又搞的很复杂了。尤其是rclone,以后有空再一起放到docker-compose里面。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~


daghy01
校验提示文案
薛定谔的猫er
校验提示文案
大妈我买买买
校验提示文案
折腾出个空气
校验提示文案
值友3771006838
校验提示文案
值友3771006838
校验提示文案
cyr123
校验提示文案
AlDa
校验提示文案
花蟋蟀
校验提示文案
九溪十八涧
校验提示文案
Jamop
校验提示文案
huangguohuai
校验提示文案
云月
校验提示文案
咖啡小冰
校验提示文案
qxy332165878
校验提示文案
云想流月
校验提示文案
p1y1c1
校验提示文案
Bruceliu496
校验提示文案
值友1739193914
校验提示文案
值友1780511801
校验提示文案
朕想吃鱼了
校验提示文案
JesseChen85
校验提示文案
值友5900951497
校验提示文案
值友1780511801
校验提示文案
wmgylc
校验提示文案
值友1780511801
校验提示文案
值友1739193914
校验提示文案
Bruceliu496
校验提示文案
p1y1c1
校验提示文案
云想流月
校验提示文案
qxy332165878
校验提示文案
九溪十八涧
校验提示文案
花蟋蟀
校验提示文案
值友3771006838
校验提示文案
值友3771006838
校验提示文案
咖啡小冰
校验提示文案
折腾出个空气
校验提示文案
大妈我买买买
校验提示文案
云月
校验提示文案
AlDa
校验提示文案