Featured image of post 使用jellyfin搭建个人线上影视库

使用jellyfin搭建个人线上影视库

使用jellyfin和docker在自己的电脑或服务器上搭建个人线上影视库

缘起

之前下载了不少影视资源,放在家里主机的硬盘里,但是想在其他地方或自己的其他设备上观看就不太方便了。于是想到搭建一个线上影视库,可以在任何地方通过网络观看自己的影视资源。 在网上看到了很多搭建线上影视库的方法,比如使用plexembyjellyfin等软件,这些软件都是开源的,可以在自己的电脑或服务器上搭建,然后通过网页或客户端来观看自己的影视资源。 由于plexemby的许多高级功能都需要付费版才能用,而jellyfin则是所有功能都免费,这里我选择使用jellyfin来搭建个人线上影视库。

前提

  • docker和docker compose
  • 域名(二级域名即可)
  • acme.sh (生成SSL证书)
  • nginx (反向代理)

准备工作

准备域名

在自己购买域名的网站上或者自己域名的管理网站上创建一个二级域名并配置域名解析,具体过程可参见“个人网站的建立过程(一):购买个人域名并配置动态域名解析”

例如我有一个主域名jinli.cyou,于是我为私有邮箱服务器创建了一个"m.jinli.cyou"的二级域名。然后在阿里云的域名管理平台上进行了域名和IP地址的绑定。

使用acme.sh生成SSL证书

网上很多教程都使用Let’s Encrypt来生成SSL证书,但由于我之前在搭建这个网站时已经下载了acme.sh工具,因此这里我使用了acme.sh来为"m.jinli.cyou"生成证书。具体过程可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站

过程如下:

  1. 找到你的域名管理账户的Access key。可以使用之前的,也可以重新获取,然后将Access key到处为系统变量Ali_KeyAli_Secret

  2. 使用下面的命令生成证书:

    1
    
    acme.sh --issue --dns dns_ali -d your.domain.com
    
  3. 使用下面的命令将证书复制到你的mailcow目录下,例如我在mailcow安装目录下新建了一个文件夹cert来存放证书文件:

    1
    2
    3
    
    acme.sh --install-cert -d your.domain.com \
            --key-file /media/jellyfin/cert/key.pem \
            --fullchain-file /media/jellyfin/cert/cert.pem 
    

nginx反向代理配置

因为我之前在建立本网站时就安装了nginx,所以这里我使用了nginx作为反向代理工具。

在nginx的配置目录下创建一个新的配置文件mailcow.conf作为云网盘的反向代理配置文件,文件内写入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
upstream m.jinli.li {  
    server 127.0.0.1:8081; 
}

server {
    listen 80;
    server_name  m.jinli.li;
    return 301 https://m.jinli.li$request_uri;
}

server {
    listen 443 ssl;
    server_name  m.jinli.li;

    # ssl 配置
    ssl_certificate /media/jellyfin/cert/cert.pem;
    ssl_certificate_key /media/jellyfin/cert/key.pem;

    location / {
        proxy_redirect off;
        proxy_pass http://m.jinli.li;

        proxy_set_header  Host                $http_host;
        proxy_set_header  X-Real-IP           $remote_addr;
        proxy_set_header  X-Forwarded-Ssl     on;
        proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto   $scheme;
        proxy_set_header  X-Frame-Options     SAMEORIGIN;

	client_max_body_size 1000m;
    }
}

这里我使用8081端口作为jellyfin的服务端口。SSL证书存放在上一步指定的位置。

配置完成后重启nginx服务使修改生效:

1
sudo service nginx restart

安装jellyfin

这里使用docker-compose来安装jellyfin,具体操作参照https://hub.docker.com/r/linuxserver/jellyfin

docker-compose.yml文件中可以修改的参数有:

  • TZ:时区
  • ports:端口
  • volumes:映射的文件夹 这里我选择将jellyfin的配置文件都放在jellyfin安装目录下的config文件夹内。影视文件存放在原来的硬盘内,这里将存放影视文件的文件夹(例如名为/media/Disk8T)映射到jellyfin容器内的/data/media文件夹内。 那么关于volumes的具体设置在docker-compose.yml文件中就如下所示:
1
2
3
4
5
     volumes:
       - ./config:/config
       - type: bind
         source: /media/Disk8T
         target: /data/media

网站初始化和设置

安装好Jellyfin之后可以通过浏览器访问网站,可以在地址栏输入http://0.0.0.0:8081,如果 nginx已经设置好,也可以通过网址来访问:http://m.jinli.cyou

首次登录需要设置管理员账户和密码,然后就可以进入jellyfin的管理界面了。

添加影视库

然后可以创建影视库,将在硬盘上存放的影视资源加入影视库。由于在创建docker容器时我们把存放影视资源的文件夹映射到了/data/media文件夹内,所以我们可以通过在/media/Disk8T内创建不同的文件夹,然后在jellyfin里创建对应的影视库。 例如我们在/media/Disk8T内创建了一个名为movies和一个music的文件夹,那么我们就可以在jellyfin里创建一个名为My Movies的影视库和一个名为My Music的音乐库,然后指定/data/media/movies作为Movies的源路径,指定/data/media/music/song作为My Music的源路径。

创建影视库的方法是

  1. 登录jellyfin的管理员账户,点击左上角三条横线的图标,展开菜单栏,然后点击Dashboard
  2. 点击左侧菜单栏的Libraries,然后点击右上角的Add Library
  3. 选择影视库的类型,例如Music,然后点击Next
  4. 输入影视库的名称,例如My Music,然后指定影视库的源路径,例如/data/media/music/song,然后点击OK

jellyfin添加影视库

安装插件

jellyfin有很多有用的插件,可以在DashboardPlugins里安装插件。

安装插件前需要先把插件仓库地址添加到jellyfin的插件仓库列表里,这里推荐两个插件仓库:

推荐安装下面几个插件: jellyfin插件

其中TMDb和OMDb插件可以用来获取影视的信息,例如海报、简介等,Meiam.Shooter、Meiam.Thunder插件可以用来获取影视的字幕。

安装完插件后需要重启jellyfin容器使插件生效。

乱码问题

当系统和docker容器内缺乏字幕文件中指定的字体文件时,有些中文字体会显示方框。想要彻底解决这个问题需要在docker容器内安装中文字体,并且给jellyfin设置备用字体。安装完成后需要重启jellyfin容器使字体生效。

给jellyfin设置备用字体

jellyfin内的备用字体需要使用woff2格式的字体,这里我们选用微软雅黑Noto Sans字体。

字体文件下载后需要放在jellyfin安装目录下的config文件夹内,然后在jellyfin的管理界面里设置备用字体,具体操作如下:

  1. 在jellyfin安装目录下的config文件夹内创建一个名为fonts的文件夹,然后将下载的字体文件放在fonts文件夹内。
  2. 进入jellyfin设置界面,在左侧菜单栏点击Playback,设置Fallback font folder path/config/fonts

在docker容器内安装字体

先进入jellyfin容器内:

1
sudo docker exec -it jellyfin /bin/bash

然后在docker内安装中文字体:

1
2
apt update
apt install fonts-noto-cjk-extra

给系统安装中文字体

如果需要在服务器电脑本地播放视频并显示字幕,最好给服务器系统也安装中文字体。

这个比较简单,只需下载tff格式的中文字体文件,然后双击安装就行了。这里推荐安装思源黑体

comments powered by Disqus