Emby的一个比较绕的玩儿法
最近折腾了一下emby,实现了一个比较绕的玩法。
这么折腾,是基于以下原因
- 家庭媒体中心,只试了Emby。
- 已存在的媒体文件基本都在windows系统上。
- 提供服务的机器,还是用linux比较好。
- 容器能够提供很好的隔离性,以及方便安装、卸载、恢复。卸载后清爽。
- k3s很好玩。
于是,设计了如下家庭媒体中心架构:
- 媒体资源文件放在windows机器上,通过windows文件共享(smb)共享给局域网。
- 找一台机器,装linux。事实上,我是用的hyper-v的虚机,vm也一样。linux我用的debian,buster版本。linux上安装smbclient,将windows的共享目录映射到某个本地文件夹下。例如/mnt/media。多个win机器的多个共享文件夹可以映射到不同子目录。例如/mnt/media/movie1,/mnt/media/audio2。
- linux上装k3s,k3s跑emby的deployment。指定存储卷,/config对应目录使用local-path存储类,而/media则挂host-path,指定到linux上smb挂载的目录。emby上配置/media下的目录为媒体库路径
大致步骤:
- 将你的windows上的媒体目录共享出来
- 起个hyper-v虚机,装debian
- debian上装cifs-utils,mount windows共享出来的目录到本地
- debian上装k3s
- 通过yaml脚本部署emby
- 打开emby进行设置
具体步骤:
下面可能废话比较多,便于从0开始。
将你的windows上的媒体目录共享出来
- 将你的windows目录共享出来。在你想要共享的目录上右键->属性->共享->高级共享。勾选“共享此文件夹”,设置权限(推荐限制为指定用户,并且只读)。
- 如果有多个需要共享的电脑,或者多个目录,重复进行上述步骤。
起个hyper-v虚机,装debian
- 下载debian镜像,地址:https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso。
- hyper-v上新建一台虚机。
- 选择“第二代”
- 分配内存4096MB,取消“动态分配内存”
- 网络选择外部的虚拟交换机,如果没有则进hyper-v的菜单里找到“虚拟交换机管理”新建一个连接物理网卡。
- 新建1T虚拟磁盘,大小可以自己定,反正是动态的开始很小
- 选择光驱为你刚刚下载的ISO文件
- 完成后,不着急开机,右键选中这台虚机,选“设置”。
- 选中“安全”,将“启动安全启动”勾去掉。
- 选中“处理器”,设置合适的核心数量,比如2
- 检查点,勾去掉
- 自动停止操作,改为“强行关闭虚拟机”
- 启动虚拟机,按照提示一步步安装debian。(ip建议用static,建议此处配置)
- 安装完成,进入虚机。debian的vi非常难用,建议安装vim。
apt install -y vim
。避免鼠标右键粘贴出问题,需要配置vi ~/.vimrc
if has("mouse") set mouse-=a endif
- 如果安装过程中没有设置ip,则进系统设置。(如已配置,下列步骤可以省略)
vi /etc/resolv.conf
, 内容为 nameserver 192.168.1.1(ip自己改,一般是你的无线路由或者光猫)vi /etc/network/interfaces
,(具体ip自己改,网关一般是你的无线路由或者光猫),如果你的硬件名不是eth0,则使用你的硬件名。具体通过:ls /sys/class/net
找auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.xx netmask 255.255.255.0 gateway 192.168.1.1 bradcase 192.168.1.255
systemctl restart networking
- 如果希望以后使用ssh来管理该机器,建议配置并弃用sshd。注意默认情况下debian的sshd禁止其他ip的root访问,需要执行下面步骤
- 配置
vi /etc/ssh/sshd_config
- 找到#PasswordAuthentication no,将注释#符号去掉,并且把no改成yes。
- 找到#PermitRootLogin yes,将注释#去掉。
systemctl restart sshd
- 配置
debian上装cifs-utils,mount windows共享出来的目录到本地
apt install -y cifs-utils
vi /root/.smbcred
username=windows共享服务器的用户名 password=windows共享服务器的密码
vi /etc/fstab
//windows的ip/共享的目录(如//192.168.1.2/movie) /本地的目录(如/mnt/media/movie) cifs ro,vers=3.0,credentials=/root/.smbcred
- 现在你可以重启以使mount生效。当然如果不希望重启,也可以手动挂载,(按照上述例子):
mount -t cifs //192.168.1.2/movie /mnt/media/movie -o ro,vers=3.0,credentials=/root/.smbcred
debian上装k3s
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s -
- 安装完成后,可以查看
k3s kubectl get node
通过yaml脚本部署emby
-
vi emby.yaml
#pvc kind: PersistentVolumeClaim apiVersion: v1 metadata: name: emby-config spec: resources: requests: storage: 10Gi accessModes: - ReadWriteOnce storageClassName: local-path --- #svc apiVersion: v1 kind: Service metadata: name: emby labels: app: emby spec: type: NodePort ports: - name: emby port: 8096 targetPort: 8096 nodePort: 30030 selector: app: emby --- #deploy apiVersion: apps/v1 kind: Deployment metadata: name: emby labels: app: emby spec: replicas: 1 selector: matchLabels: app: emby template: metadata: labels: app: emby spec: containers: - name: emby image: emby/embyserver ports: - containerPort: 8096 resources: limits: cpu: 2000m memory: 4096Mi requests: cpu: 100m memory: 256Mi volumeMounts: - name: emby-config mountPath: /config - name: emby-media mountPath: /media - name: localtime readOnly: true mountPath: /etc/localtime volumes: - name: emby-config persistentVolumeClaim: claimName: emby-config - name: emby-media hostPath: type: Directory path: /mnt/media - name: localtime hostPath: type: File path: /etc/localtime strategy: type: Recreate
-
kubectl apply -f emby.yaml
-
然后就可以盯着看了
watch 'kubectl get pod'
,等到emby的pod状态为Running就成功了
打开emby进行设置
- emby的地址在你的 http://linux机器的ip:30030
- 打开后进行设置,添加媒体库,目录定位在/media下的子目录。如/media/movie
OK。收工
最后补充下。当你想卸载的时候,linux上只需要跑 kubectl delete -f emby.yaml
,你的config存储和程序就都没了。
当你连linux虚机也不想要了的时候,直接把虚机删了。
原有的win上的媒体文件不受任何影响,非常方便。