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下的目录为媒体库路径

大致步骤:

  1. 将你的windows上的媒体目录共享出来
  2. 起个hyper-v虚机,装debian
  3. debian上装cifs-utils,mount windows共享出来的目录到本地
  4. debian上装k3s
  5. 通过yaml脚本部署emby
  6. 打开emby进行设置

具体步骤:

下面可能废话比较多,便于从0开始。

将你的windows上的媒体目录共享出来

  1. 将你的windows目录共享出来。在你想要共享的目录上右键->属性->共享->高级共享。勾选“共享此文件夹”,设置权限(推荐限制为指定用户,并且只读)。
  2. 如果有多个需要共享的电脑,或者多个目录,重复进行上述步骤。

起个hyper-v虚机,装debian

  1. 下载debian镜像,地址:https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso
  2. hyper-v上新建一台虚机。
  1. 选择“第二代”
  2. 分配内存4096MB,取消“动态分配内存”
  3. 网络选择外部的虚拟交换机,如果没有则进hyper-v的菜单里找到“虚拟交换机管理”新建一个连接物理网卡。
  4. 新建1T虚拟磁盘,大小可以自己定,反正是动态的开始很小
  5. 选择光驱为你刚刚下载的ISO文件
  1. 完成后,不着急开机,右键选中这台虚机,选“设置”。
  1. 选中“安全”,将“启动安全启动”勾去掉。
  2. 选中“处理器”,设置合适的核心数量,比如2
  3. 检查点,勾去掉
  4. 自动停止操作,改为“强行关闭虚拟机”
  1. 启动虚拟机,按照提示一步步安装debian。(ip建议用static,建议此处配置)
  2. 安装完成,进入虚机。debian的vi非常难用,建议安装vim。apt install -y vim。避免鼠标右键粘贴出问题,需要配置vi ~/.vimrc
if has("mouse")
    set mouse-=a
endif
  1. 如果安装过程中没有设置ip,则进系统设置。(如已配置,下列步骤可以省略)
  1. vi /etc/resolv.conf, 内容为 nameserver 192.168.1.1(ip自己改,一般是你的无线路由或者光猫)
  2. 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
  1. systemctl restart networking
  1. 如果希望以后使用ssh来管理该机器,建议配置并弃用sshd。注意默认情况下debian的sshd禁止其他ip的root访问,需要执行下面步骤
  1. 配置vi /etc/ssh/sshd_config
  2. 找到#PasswordAuthentication no,将注释#符号去掉,并且把no改成yes。
  3. 找到#PermitRootLogin yes,将注释#去掉。
  4. systemctl restart sshd

debian上装cifs-utils,mount windows共享出来的目录到本地

  1. apt install -y cifs-utils
  2. vi /root/.smbcred
username=windows共享服务器的用户名
password=windows共享服务器的密码
  1. vi /etc/fstab
//windows的ip/共享的目录(如//192.168.1.2/movie)  /本地的目录(如/mnt/media/movie)  cifs  ro,vers=3.0,credentials=/root/.smbcred
  1. 现在你可以重启以使mount生效。当然如果不希望重启,也可以手动挂载,(按照上述例子):
mount -t cifs //192.168.1.2/movie /mnt/media/movie -o ro,vers=3.0,credentials=/root/.smbcred

debian上装k3s

  1. curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s -
  2. 安装完成后,可以查看k3s kubectl get node

通过yaml脚本部署emby

  1. 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
  1. kubectl apply -f emby.yaml
  2. 然后就可以盯着看了 watch 'kubectl get pod',等到emby的pod状态为Running就成功了

打开emby进行设置

  1. emby的地址在你的 http://linux机器的ip:30030
  2. 打开后进行设置,添加媒体库,目录定位在/media下的子目录。如/media/movie

OK。收工

最后补充下。当你想卸载的时候,linux上只需要跑 kubectl delete -f emby.yaml,你的config存储和程序就都没了。

当你连linux虚机也不想要了的时候,直接把虚机删了。

原有的win上的媒体文件不受任何影响,非常方便。