缘起
之前下载了不少影视资源,放在家里主机的硬盘里,但是想在其他地方或自己的其他设备上观看就不太方便了。于是想到搭建一个线上影视库,可以在任何地方通过网络观看自己的影视资源。 在网上看到了很多搭建线上影视库的方法,比如使用plex、emby、jellyfin等软件,这些软件都是开源的,可以在自己的电脑或服务器上搭建,然后通过网页或客户端来观看自己的影视资源。 由于plex和emby的许多高级功能都需要付费版才能用,而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框架搭建个人网站。
过程如下:
-
找到你的域名管理账户的Access key。可以使用之前的,也可以重新获取,然后将Access key到处为系统变量
Ali_Key
和Ali_Secret
。 -
使用下面的命令生成证书:
1
acme.sh --issue --dns dns_ali -d your.domain.com
-
使用下面的命令将证书复制到你的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
作为云网盘的反向代理配置文件,文件内写入:
|
|
这里我使用8081端口作为jellyfin的服务端口。SSL证书存放在上一步指定的位置。
配置完成后重启nginx服务使修改生效:
|
|
安装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
文件中就如下所示:
|
|
网站初始化和设置
安装好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
的源路径。
创建影视库的方法是
- 登录jellyfin的管理员账户,点击左上角三条横线的图标,展开菜单栏,然后点击
Dashboard
。 - 点击左侧菜单栏的
Libraries
,然后点击右上角的Add Library
。 - 选择影视库的类型,例如
Music
,然后点击Next
。 - 输入影视库的名称,例如
My Music
,然后指定影视库的源路径,例如/data/media/music/song
,然后点击OK
。
安装插件
jellyfin有很多有用的插件,可以在Dashboard
的Plugins
里安装插件。
安装插件前需要先把插件仓库地址添加到jellyfin的插件仓库列表里,这里推荐两个插件仓库:
- https://repo.jellyfin.org/releases/plugin/manifest-stable.json
- https://gitee.com/jjm2473/jellyfin-plugins-repo/raw/master/manifest.json
推荐安装下面几个插件:
其中TMDb和OMDb插件可以用来获取影视的信息,例如海报、简介等,Meiam.Shooter、Meiam.Thunder插件可以用来获取影视的字幕。
安装完插件后需要重启jellyfin容器使插件生效。
乱码问题
当系统和docker容器内缺乏字幕文件中指定的字体文件时,有些中文字体会显示方框。想要彻底解决这个问题需要在docker容器内安装中文字体,并且给jellyfin设置备用字体。安装完成后需要重启jellyfin容器使字体生效。
给jellyfin设置备用字体
jellyfin内的备用字体需要使用woff2
格式的字体,这里我们选用微软雅黑和Noto Sans字体。
字体文件下载后需要放在jellyfin安装目录下的config
文件夹内,然后在jellyfin的管理界面里设置备用字体,具体操作如下:
- 在jellyfin安装目录下的
config
文件夹内创建一个名为fonts
的文件夹,然后将下载的字体文件放在fonts
文件夹内。 - 进入jellyfin设置界面,在左侧菜单栏点击
Playback
,设置Fallback font folder path
为/config/fonts
。
在docker容器内安装字体
先进入jellyfin容器内:
|
|
然后在docker内安装中文字体:
|
|
给系统安装中文字体
如果需要在服务器电脑本地播放视频并显示字幕,最好给服务器系统也安装中文字体。
这个比较简单,只需下载tff
格式的中文字体文件,然后双击安装就行了。这里推荐安装思源黑体。