Emby的一个比较绕的玩儿法

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文件
  3. 完成后,不着急开机,右键选中这台虚机,选“设置”。
    1. 选中“安全”,将“启动安全启动”勾去掉。
    2. 选中“处理器”,设置合适的核心数量,比如2
    3. 检查点,勾去掉
    4. 自动停止操作,改为“强行关闭虚拟机”
  4. 启动虚拟机,按照提示一步步安装debian。(ip建议用static,建议此处配置)
  5. 安装完成,进入虚机。debian的vi非常难用,建议安装vim。apt install -y vim。避免鼠标右键粘贴出问题,需要配置vi ~/.vimrc
    if has("mouse")
        set mouse-=a
    endif
    
  6. 如果安装过程中没有设置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
      
    3. systemctl restart networking
  7. 如果希望以后使用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共享服务器的密码
    
  3. vi /etc/fstab
    //windows的ip/共享的目录(如//192.168.1.2/movie)  /本地的目录(如/mnt/media/movie)  cifs  ro,vers=3.0,credentials=/root/.smbcred
    
  4. 现在你可以重启以使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
    
  2. kubectl apply -f emby.yaml

  3. 然后就可以盯着看了 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上的媒体文件不受任何影响,非常方便。

posted @ 2022-01-26 00:57  sslyc  阅读(1303)  评论(0编辑  收藏  举报