N5105 PVELXC Docker部署Jellyfin硬解+阿里云盘WebDav+TMM

2022-05-01 20:58:25 32点赞 230收藏 50评论

选择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里面。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
50评论

  • 精彩
  • 最新
  • 作为一个小白。在第二步已经晕了。后面就不知道在说什么了。

    校验提示文案

    提交
    看来我要重新写了。 [大囧]

    校验提示文案

    提交
    同晕,这明显不是给小白看的 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 5105价格778了,我快忍不住了,求阻止

    校验提示文案

    提交
    直接买就是了,做好家人埋怨总断网的准备 [种草]

    校验提示文案

    提交
    这么不稳定?只能做旁路由了?

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 第五步卡住了 [喜极而泣] [喜极而泣] [喜极而泣]

    校验提示文案

    提交
    卡哪了?报什么错误?

    校验提示文案

    提交
    收起所有回复
  • 我的5105折腾了几天也无法调用硬解,大佬能指点指点吗

    校验提示文案

    提交
    你用的什么方案啊? exsi还是pve?

    校验提示文案

    提交

    Biid

    Jamop

    作者
    我的也是,esxi,emby死活不调用核显,jellyfin扫描媒体库直接卡死,不知道为啥

    校验提示文案

    提交
    收起所有回复
  • up主,我5105整了好几天,pve—lxc—docker—jellyfin,怎么样都硬解不了,docker我不是一键的,先装了官方docker,再拉nyanmisaka的jellyfin!到这里不行,我还进入jellyfin容器,也给打上intel-media-va-driver-non-free,和vainfo,vainfo提示有错误

    校验提示文案

    提交
    lxc的配置文件conf改了吗?加上核显了嘛?LXC方式,驱动应该安装在PVE宿主机里面,是共享给LXC容器用的。给你个官方论坛文章参考去看看

    校验提示文案

    提交
    收起所有回复
  • 楼主,我是pve,和ununtu,都装了intel-media-va-driver-non-free版本22.2好像,和vainfo,再docker,再拉nyanmisaka的jellyfin没法硬解,然后又进jellyfin装了上面两个,还是不行?你能详细说一下过程吗?

    校验提示文案

    提交
    pve虚拟机ubuntu需要直通,就是屏蔽pve宿主的核显驱动,然后把核显pci设备直通到虚拟机里面,在虚拟机里面安装核显驱动。如果用CT模版(LXC)方式,就不用屏蔽pve宿主的核显驱动,只需要改lxc.conf就可以在LXC里共享宿主机的核显设备。你要看自己用的是哪种方式。

    校验提示文案

    提交
    核显没直通,我用的是lxc装docker,再拉取nyanmisaka的jellyfin镜像!pve和lxc里都要安装intel核显驱动吧?然后需要进到容器jellyfin里再装一下吗? [喜极而泣] ,搞了三四天,没搞定!intel的驱动版本号是22.2.1可以吧?

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 我是esxi直接装unraid虚拟机然后直接直通核显给虚拟机,然后在unraid里装emby就可以硬解了

    校验提示文案

    提交
    套娃嘛套娃嘛

    校验提示文案

    提交
    没办法,已经用esxi很久了如果都迁移到unraid工作量更大

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 写的太复杂了,把人都吓跑了 [吐血]

    校验提示文案

    提交
  • 不是小白,稍微有点基础的人看的都不明不白的

    校验提示文案

    提交
  • 能不能直接把硬盘镜像打包? [皱眉] 我直接还原好了

    校验提示文案

    提交
  • Jamop

    作者
    值友们可以下载需要的代码 去看看 提取码: jaaa

    校验提示文案

    提交
  • 哦no,太折腾了。

    校验提示文案

    提交
  • 网口会不会断流?

    校验提示文案

    提交
  • rclone干嘛?

    校验提示文案

    提交
  • 什么是直通?影响是什么?

    校验提示文案

    提交
  • 第一步安装驱动我就死了

    校验提示文案

    提交
  • 同机器 刚到折腾一天 什么都没装上。无力 unraid跑跑docker算了 黑裙没希望

    校验提示文案

    提交
  • N5105的JELYFIN 转码性能如何,能给个参考吗

    校验提示文案

    提交
  • 为了搞这个,多次断网,天天被家人说,最后又拉了一天宽带。现在可以放心搞了

    校验提示文案

    提交
  • @Jamop 那个n5105虚拟机重启会死机吗?

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
230
扫一下,分享更方便,购买更轻松