上次写 NAS 选购指南的时候,突然想起我还没有写过个人媒体中心这方面的教程,考虑到很多人的 NAS 都有这方面的用途,所以想了下还是写篇 Jellyfin 的搭建教程吧。当然,我知道能搭建媒体中心的程序不止 Jellyfin 这一个,Plex Emby 用的人也是挺多的,但是我个人还是更喜欢优先使用开源免费的产品,所以这里就只说 Jellyfin 了。

一、前期准备

先说下本教程的系统环境和配置吧!

系统:Debian 11(bullseye)

Web 服务器:Nginx 1.18.0

Jellyfin 版本:10.7.7

对了再说下 Jellyfin 官网https://jellyfin.org

因为 Jellyfin 不需要额外再安装数据库之类的东西,所以这次我也没有使用 LNMP 一键脚本来安装环境,只是使用了 Debian 自带源里的 Nginx。如果各位对 Web 服务器有要求的话,也可以自己选择安装 Apache 或者别的之类的来代替 Nginx,我自己是更喜欢 Nginx 一些,所以本文就只写 Nginx 相关的东西了。

二、必要程序安装

前期需要安装的东西不多,基本上安装好 Nginx 就完事了,所以我就直接贴命令吧,在 VPS 命令行里输入即可。

apt install nginx wget apt-transport-https

解释下除了 Nginx 后面安装的两个包,wget 大多就是用来下载东西的,大多系统都自带了,不一定要自己安装,apt-transport-https 是让 apt 能够使用 https 的,这个不用了解太多,只是为了能正常使用 jellyfin 的软件源而装的。

三、正式安装

正式安装主要分为两个部分,一个是安装 Jellyfin,一个是配置 Nginx,因为比较简单,所以我就不分开说了。

Jellyfin 安装

wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt update
sudo apt install jellyfin

上面这些其实都是 Jellyfin 官方给的安装命令,照着命令一条一条输入就能安装好 Jellyfin,其实本来还要安装 apt-transport-https 包的,只是因为我前面在必要程序安装里面已经安装过了,所以这里就不再重复一遍了。

关于 Jellyfin 官方对 Debian/Ubuntu 的支持情况,官方是这么说的:

We support amd64, armhf, and arm64 for architectures, debian and ubuntu for distributions, and stretch, buster, and bullseye for Debian releases and xenial, bionic, and focal for Ubuntu releases. If you see something different in your output, you might need to manually modify it. Use the closest equivalent Debian or Ubuntu version instead.

引用自官方下载页:https://jellyfin.org/downloads

Jellyfin 安装好之后,还不能马上通过网页访问,需要先给前面安装好的 Web 服务器 Nginx 设置好配置才行。

这里解释一下,Jellyfin 本身是不需要借助 Nginx 来提供服务的,但是如果用公网访问 Jellyfin 的话,不借助 Nginx 使用 Jellyfin 会不太方便,所以我这里才额外写下 Nginx 的配置。

Nginx 配置

使用 apt 安装的 Nginx,其网站默认使用的配置文件目录为/etc/nginx/sites-enabled,只要在这个目录下添加好配置文件,重载下 Nginx 即可让配置文件生效,这里我以创建/etc/nginx/sites-enabled/jellyfin 这个配置文件为例,写下其中要写的配置信息。

cat > /etc/nginx/sites-enabled/jellyfin<<EOF
server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    # Uncomment to redirect HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    # use a variable to store the upstream proxy
    # in this example we are using a hostname which is resolved via DNS
    # (if you aren't using DNS remove the resolver line and change the variable to point to an IP address e.g `set $jellyfin 127.0.0.1`)
    set $jellyfin 127.0.0.1;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    #include /etc/letsencrypt/options-ssl-nginx.conf;
    #ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;

    #Security / XSS Mitigation Headers
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # Content Security Policy
    # See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
    # Enforces https content and restricts JS/CSS to origin
    # External Javascript (such as cast_sender.js for Chromecast) must be whitelisted.
    #add_header Content-Security-Policy "default-src https: data: blob: http://image.tmdb.org; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com/cv/js/sender/v1/cast_sender.js https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";

    location = / {
        return 302 https://$host/web/;
    }

    location / {
        # Proxy main Jellyfin traffic
        proxy_pass http://$jellyfin:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;

        # Disable buffering when the nginx proxy gets very resource heavy upon streaming
        proxy_buffering off;
    }

    # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
    location = /web/ {
        # Proxy main Jellyfin traffic
        proxy_pass http://$jellyfin:8096/web/index.html;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location /socket {
        # Proxy Jellyfin Websockets traffic
        proxy_pass http://$jellyfin:8096;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }
}
EOF

注意,上述命令第一行与最后一行是创建对应配置文件并写入配置信息用的,实际配置信息是中间的部分。

以上配置文件来自官方的示例文档,有更多需求的可以看下官方的示例页面:https://jellyfin.org/docs/general/networking/nginx.html

注意,上面的 Nginx 配置里有几个地方是需要根据自己的情况修改的:

  1. server_name 内的 example.com 要替换成你自己实际使用的域名
  2. set $jellyfin 127.0.0.1; 这一行指定的是 Jellyfin 服务器的 IP,我们一般都是本机所以写的是 127.0.0.1
  3. Nginx 配置文件里开启了 443 端口,也就是开启了 HTTPS,其中的 SSL 证书部分需要根据自己情况修改
  4. 所有配置信息里 proxy_pass http://$jellyfin:8096 这部分里的 8096 要改成 Jellyfin 实际监听的端口。没动过 Jellyfin 默认就是 8096,不需要再改动

OK,差不多就是这些注意事项,对于新手来说可能稍显麻烦的是配置 SSL 证书这部分,因为这个要你自己先去申请好 SSL 证书才行。本来的话,我是想把申请证书的部分也写在教程里的,不过想了想每个人的证书获得方式都不一定相同,我写了也也不一定适用所有人,所以想想还是算了,大家自己记得注意一下。

上面的配置写好保存之后,重载下 Nginx 使配置文件生效:

nginx -s reload

四、后续配置

前面把 Jellyfin 安装好了,Nginx 也配置好了,剩下的就是别忘了把域名和 VPS IP 绑定好了,这个跟普通网站一样,就不多说了。我这里主要是想补充一点,因为本篇文章主要说的是搭建 Jellyfin 这方面,没有针对后续的媒体库配置,插件安装这些进行说明(主要是每个人的使用习惯都不一样),所以我个人建议想用 Jellyfin 的朋友在搭建好之后,还是多看下官方给的文档说明:https://jellyfin.org/docs/general/quick-start.html 虽然官方写的东西不多,不过要是想好好使用 Jellyfin 的话还是多看下比较好,我个人觉得里面关于文件命名,转码这些都是很有必要看的。

结束

OK!水完一篇文了233333

本来我以为 Jellyfin 的教程我会写挺多的,结果写完才发现我真正要说的不多,因为官方都把命令给你写好了,你只用在命令行里照着输入就能安装好,而且 Jellyfin 也不像博客一样还得配置数据库什么的,安装好之后就能上手使用,所以我要写的东西真的不多……

Jellyfin 的搭建教程就写这么多了,其实如果不是公网搭建的话,自己在本地搭建还要更简单一些,因为不需要再额外安装 Nginx 就能很方便的使用。另外我提醒下大家,因为 Jellyfin 有个转码的问题,开启之后可能会对 VPS 产生不小的压力,如果有这方面需求的记得提前考虑下自己的 VPS 配置够不够用。

好了不说了,以后有机会我看看能不能写下 Jellyfin 具体的一些配置方面的教程吧,这个应该会更有用一些,各位回见~

PS:文章的特色图片是截图的官方 demo 网站界面,想体验 Jellyfin 的可以先去看下官方的 demo 演示站点:https://demo.jellyfin.org/stable

说点什么
欢迎评论!不想写邮箱的请填写 [email protected] 哦!
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...