type
Post
status
Published
date
May 20, 2023
slug
Compose
summary
瞎折腾,同时给与自己一个更快乐的观影体验,和文件管理服务
tags
Linux
category
学习思考
icon
password
背景服务选择服务分布刷机流程AX6SHK1 BOX刷原系统刷armbian参考视频树莓派4BGK3VBIOS刷入环境搭建AX6S树莓派4BHK1BOX下载服务NAS管理服务文件共享服务NFSWebDav开机启动配置GK3VLibreELEC的优点LibreELEC的缺点Jellyfin的配置TMM刮削器文件共享Feature
背景
公寓中,闲来无事,且手头闲置机子够多,可以整点花活
用之前NAS沉淀下来的知识点,搭建一下自己的服务集群
将文件服务和影音服务隔开进行管理
防止之前单点服务器导致的,功耗大且稳定性低
服务选择
对于集群管理,K8s过重,K3s轻,后续考虑支持,Rancher太重,还是portainer香
对于文件管理,NFS和WebDav是目前兼容性和实用性都较高的服务,考虑都支持,毕竟NFS在Windows上不好使,但是Linux下好使,同时对于新的iscsi协议保持观望
这篇期刊中有所体现
对于影音服务采用Jellyfin,支持硬解,为以后若是能穿透使用,提供便捷
同时将刮削服务通过TMM实现,Jellyfin的刮削服务并不好
播放端采用KODI,正好有一个高性能服务器,拿来跑KODI正好
服务分布
机器型号 | OS | 服务 |
红米路由器AX6S | openwrt | 翻墙,网络管理 |
树莓派4B | Raspbian | Portainer(Docker管理) |
HK1BOX | Armbian | qbittorrent & Transmission(下载),WebDev & NFS (文件共享),Nas-tools(NAS管理工具) |
GK3V迷你电脑 | LibreELEC | Jellyfin(影音服务),KODI(影音播放器),TMM(影音刮削) |
总体服务分布取决于各个机器的性能
机器型号 | 特性 | 适用场景 |
树莓派4B | 内存小,功耗低,稳定 | 分担一些简单服务 |
HK1BOX | 内存大,功耗中等,稳定 | 用于底层数据服务,然后通过文件协议共享给各个机器 |
GK3V | 内存大,功耗高,长期开机会宕机,性能强 | 用于高性能服务,以及随开随关 |
服务调用图
刷机流程
AX6S
原系统并不能支持特殊要求
需要给服务器刷入OpenWrt
HK1 BOX
HK1 BOX作为机顶盒,可覆写的系统并不多,只有armbian是最自由的,其他都是影音或者安卓
由于需要高可定制化,需要通过armbian实现,所以如果有别的系统,或者变砖了,需要先刷回原系统,再刷armbian
刷原系统
刷armbian
amlogic-s9xxx-armbian
ophub • Updated Feb 26, 2024
选bullseye的release,有多个版本 注意选择s905x3
通过balena刷机工具,刷入U盘后
插入U盘到2.0接口后,在启动时按住耳机孔内的一个复位开关,即可进入U盘界面
进入后初始化系统,再通过Armbian-install 命令,将系统刷入EMMC闪存,便可以不插入U盘启动
如果不联网在Armbian-install时会出现时间不一致,无需关心
参考视频
树莓派4B
对于树莓派4B,由树莓派自身提供的系统刷入工具即可
由于树莓派只有1G内存,收入命令行的Lite系统对于我就够用了
在刷入时,可以提前配置好网络信息,不然后续需要手动打开SSH等
GK3V
由于GK3V的AMD64平台,使得整体可以选择性高,兼顾到家中4K屏
对于Linux Mint,由于桌面系统的性能压力与GK3V的CPU和GPU不是很匹配,便未选择
但是由希望有一个专门负责影音的机器,支持原盘,4K,连通NAS,便为其刷入KODI的专业Linux,LibreELEC
BIOS刷入
由于盒子自身的BIOS是支持一些启动项设置的,也会USB检测刷机好像【也可能是我自己设置的】
插入U盘启动就可以识别到系统刷入程序
按部就班的用引导程序刷进去就完事了
环境搭建
AX6S
启动后,由于千兆路由器的一些缓存问题,需要在 系统-定时重启 打开定时重启
然后配置openclash,设置下白名单通过策略
之后在 网络模块中
打开无线
配置DHCP/DNS 在其中可以固定好静态IP
本着网络管理方面 稳定就是完美的策略,看不懂的就不动
服务模块中对于能看懂的服务进行启动
如果有自己拉网线配置IPV6的,可以打开全锥型NAT,有效降低打洞难度,提升NAT网络后的连通性
树莓派4B
树莓派如果一开始没有配置好SSH等
进入系统后,接个显示器,打开SSH,SSH-root访问和root密码配置,就可以开始配置了
装入Docker通过菜鸟教程的Docker安装中的debian系即可一键安装
原先此处想安装Rancher,但是Rancher对于树莓派的架构没有能用的Docker,遂放弃
同时Rancher对于性能要求高,在1G内存的树莓派4B上,相对紧张
于是选择Portainer,其轻量且美观的UI,更为符合家庭使用
在树莓派上安装Portainer,其他服务器上安装Portainer-agent即可通过Docker Standalone模式进行连接,即可管理其他集群上的docker
HK1BOX
下载服务
刷入Armbian后,其自身已经支持SSH远程连接,无需额外配置
通过Docker命令进行安装即可
如果之前已经有QB和TR的使用镜像,可以把他们的配置和信息都打包出来,然后覆盖Data文件夹
即可实现快速迁移,但是要保证容器内挂载的磁盘位置是相同的
QB Docker命令(nevinee版,适配了iyuu)
docker run -dit \ -v /data/qb:/data \ -v /mnt1:/mnt1 \ -v /mnt2:/mnt2 \ -v /data/tr/config/torrents/:/tr_bk \ -e PUID="1000" `# 输入id -u可查询,群晖必须改` \ -e PGID="100" `# 输入id -g可查询,群晖必须改` \ -e WEBUI_PORT="8090" `# WEBUI控制端口,可自定义` \ -e BT_PORT="34567" `# BT监听端口,可自定义` \ -e INSTALL_PYTHON='true' \ -e IYUU_TOKEN='IYUUxxxxxxxxxx' \ -p 8090:8090 `# 冒号左右一样,要和WEBUI_PORT一致,命令中的3个8080要改一起改` \ -p 34567:34567/tcp `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \ -p 34567:34567/udp `# 冒号左右一样,要和BT_PORT一致,命令中的5个34567要改一起改` \ -p 9000:8787 `# IYUUPlus的WebUI控制端口` \ --restart always \ --name qb \ --hostname qbittorrent \ nevinee/qbittorrent:4.3.9-iyuu
TR Docker命令(chisbreadbane,快速校验)
docker run -d \ --name=tr \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Asia/Shanghai \ -e USER=txuw \ -e PASS=xxxxxx \ -p 9091:9091 \ -p 51413:51413 \ -p 51413:51413/udp \ -v /data/tr/config:/config \ -v /data/tr/watch:/watch \ -v /mnt1:/mnt1 \ -v /mnt2:/mnt2 \ --restart unless-stopped \ chisbread/transmission:version-3.00-r13
NAS管理服务
之后便是Nas-tools
作为Nas助手,他的目的是想包揽很多活,但是我目前只用了他的目录同步功能
目录同步功能的来源是因为当你使用TR和QB,进行种子存储时,内部文件是不允许移动、修改的
但是如果需要搭配上TMM刮削器,去适配影音服务的海报墙,位置层级结构是要变化的,但是文件内容是不会变化的
此时需要使用硬链接技术,将TR和Qb服务的存储文件夹,做一个索引同步到另一个文件夹去,让刮削服务和影音服务去读取同步后的文件夹,改动里面的文件位置,并不会影响到TR和QB的种子保存情况。
为什么不用软连接呢?因为这个文件夹大概率会被挂载到Docker里,软链接Docker是无法识别的
Nas-tools docker命令
docker run -d \ --name nas-tools \ --hostname nas-tools \ -p 3000:3000 `# 默认的webui控制端口` \ -v /data/nas-tool/config:/config `# 冒号左边请修改为你想在主机上保存配置文件的路径` \ -v /mnt1:/mnt1 `# 媒体目录,多个目录需要分别映射进来` \ -v /mnt2:/mnt2 `# 媒体目录,多个目录需要分别映射进来` \ -e PUID=1000 `# 想切换为哪个用户来运行程序,该用户的uid,详见下方说明` \ -e PGID=1000 `# 想切换为哪个用户来运行程序,该用户的gid,详见下方说明` \ -e UMASK=022 `# 掩码权限,默认000,可以考虑设置为022` \ -e NASTOOL_AUTO_UPDATE=false `# 如需在启动容器时自动升级程程序请设置为true` \ nastool/nas-tools:latest
文件共享服务
对于Linu之间通过NFS进行文件共享
对于Windows通过WebDav进行文件共享
NFS
apt install nfs-kernel-server
即可安装nfs的server服务,他会集成好很多nfs的对应systemctl到系统中
之后进入/etc/exports中 编辑需要Share的文件夹
/mnt *(rw,async,no_root_squash,no_subtree_check) /mnt/mnt1 *(rw,async,no_root_squash,no_subtree_check) /mnt/mnt2 *(rw,async,no_root_squash,no_subtree_check)
[需要Share的文件夹] [允许的IP] (options)
其中 *代表的是所有IP都可以使用这个服务
对于options 其意义如下表格
rw | 允许读写 |
async | 异步读写,性能高 |
no_root_squash | 权限同步,允许root |
no_subtree | 不检查父目录权限 |
同时此处挂载了/mnt的同时又挂载了/mnt/mnt1
是由于mnt1是通过USB挂载进来的,如果不加入这个子目录挂载,识别不到USB内的内容
通过systemctl enable nfs-server无法实现开机自启动,甚是奇怪
WebDav
WebDav此处便于管理,通过docker实现
但是建议还是用正经的WebDav的Go包,或者python进行实现
因为WebDav在Docker中的传输性能并不优秀,会有限制
后续考虑通过Go配置
WebDav docker命令
docker run --name webdav \ --restart=unless-stopped \ -p 80:80 \ -v /mnt1:/media/mnt1 \ -v /mnt2:/media/mnt2 \ -e USERNAME=txuw \ -e PASSWORD=xxxxxx \ -e TZ=Asia/Shanghai \ -e UDI=1000 \ -e GID=1000 \ -d ugeek/webdav:arm
Docker中会自动向外发布media下的文件
开机启动配置
由于HK1 BOX在最新版的内核中引入了新的USB3管理框架
开机自启动无法挂载到USB3接口下的文件
如果对性能没有要求,可以插在USB2上
对于影音,还是得USB3
所以编写开机启动脚本,手动挂载,手动启动docker
由于docker需要root命令,server脚本需要以user=root启动
usb_mount 脚本
#!/bin/bash mount UUID=bdb9d073-fd6b-2648-87c4-655370c7d278 /mnt/mnt1 mount UUID=68031de8-5560-774b-ade9-e2786c2b6f20 /mnt/mnt2 docker start qb docker start tr docker start nas-tools systemctl start nfs-server
mount.server
[Unit] Description=Mount UUID-based Filesystems After=network.target [Service] ExecStart=/bin/bash -c "sudo /root/usb_mount.sh" User=root [Install] WantedBy=multi-user.target
GK3V
LibreELEC的优点
LibreELEC在Kodi和影音的支持上确实是完美的
对于一个我自己都不知道蓝牙是否能用的机器
其LibreELEC管理框架下自带的蓝牙居然是能检测到的,只需要在KODI界面中找到蓝牙插件安装即可
同时其对于有限、无线的支持,都是非常到位的
在作为影音盒子的体验上,确实是完美的
LibreELEC的缺点
LibreELEC的自定义体验上无疑是较为痛苦的
由于LibreELEC是独立的Linux发行版,其区别于常用的Ubuntu和CentOS
大多数的系统级文件,都是写死无法修改的,哪怕你是ROOT
所有文件需要安装和编写在/stroages 的文件夹下
同时对于文件安装,你也只能在KODI内部用ELEC提供的框架进行安装
他不支持常用的任一软件源
好在ELEC提供的框架内,支持了Docker
Jellyfin的配置
对于其他Jellyfin的docker,都不如国内自己搞得香
主要体现在对硬解的支持等
Jellyfin Docker命令 (nyanmisaka版 JellyFin中国程序员编译)
docker run -d \ --restart=always \ -p 8096:8096 \ --name Jellyfin \ -v /storage/data/Jellyfin/config:/config \ -v /storage/data/Jellyfin/cache:/cache \ -v /storage/mnt/mnt1:/mnt1 \ -v /storage/mnt/mnt2:/mnt2 \ nyanmisaka/jellyfin
Jellyfin的使用方法
TMM刮削器
连接HK1BOX的NFS协议,挂载到磁盘中,使用TMM影音刮削器,来刮削一些影片介绍等
TMM也可以通过Docker部署,同时注意TMM在V3免费,V4收费,使用docker部署时注意甄别
此处使用dzhuang 的Docker镜像,专用于国内,支持国内字体
docker run -d --name=tinymediamanager \ -v /data/tinymediamanager/config:/config \ -v /mnt1:/mnt1 \ -v /mnt2:/mnt2 \ -e GROUP_ID=1000 \ -e USER_ID=0 \ -e TZ=Asia/Hong_Kong \ -p 5800:5800 \ -p 5900:5900 \ dzhuang/tinymediamanager:latest
文件共享
在ELEC的WIKI中,提供了NFS等的挂载办法
需要尤为注意
Where=
/storage/recordings
和你的.mount命名是挂钩的 systemctl enable
storage-recordings.mount
不然识别不到
对于WebDav,只能让Kodi去支持
docker版本的WebDav性能非常拉胯,估计是我服务器端包了一层,Client端又一层,直接炸了
或者可以自己编译WebDav的程序包,相信我,非常麻烦
Feature
- 将WebDav在HK1Box中本地支持,而不走Docker
- 集群管理转为k3s
- 作者:txuw
- 链接:https://txuw.top/article/Compose
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。