如何在 Ubuntu 20.04 LTS 服务器/桌面上安装 Jellyfin 媒体服务器

[ad_1]

本教程将向您展示如何在 Ubuntu 20.04 LTS 服务器/桌面上安装 Jellyfin 媒体服务器。 Jellyfin 是一款免费的开源应用程序,可让您在一个漂亮的界面中组织电影、电视节目、音乐和照片,并通过网络或通过网络在 PC、平板电脑、手机、电视、Roku 等设备上流式传输这些媒体文件互联网。 Jellyfin 可以安装在 Linux、MacOS 和 Windows 上。

Jellyfin 特点

Jellyfin 是 Emby 媒体服务器的一个分支。 它包含许多与 Plex 和 Emby 相同的功能。

  • 与 Plex 或 Emby 不同,Jellyfin 是 100% 免费和开源的。 无广告。 移动应用程序没有播放限制。 (虽然 iOS 应用无法在后台播放视频。)
  • 观看直播电视并设置自动录制以扩展您的媒体库。
  • 自动从 TheTVDB、TheMovieDB、OpenMovie Database 和 Rotten Tomatoes 获取艺术品、元数据。
  • 支持DLNA。
  • 可以安装可选插件以提供附加功能。
  • 支持使用 FFMpeg 进行视频编码/解码的硬件加速。
  • 和更多。

在 Ubuntu 20.04 上安装 Jellyfin 媒体服务器

Jellyfin 不包含在默认的 Ubuntu 存储库中,但它有自己的存储库。 运行以下命令将 Jellyfin 存储库添加到您的 Ubuntu 系统。

echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/jellyfin.list

接下来,运行以下命令将 Jeffyfin GPG 密钥导入 Ubuntu 系统,以便 APT 在安装过程中验证包的完整性。

wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -

而且因为这个仓库使用的是HTTPS连接,所以我们还需要安装 apt-transport-https ca-certificates 包裹。

sudo apt install apt-transport-https ca-certificates

最后,更新 Ubuntu 系统上的包索引并安装 Jellyfin。

sudo apt update

sudo apt install jellyfin

此命令还将安装 3 个其他软件包作为依赖项:

  • jellyfin-ffmpeg: 用于视频转码。
  • jellyfin-server: 后端服务器。
  • jellyfin-web: 前端网页界面。

现在 Jellyfin 媒体服务器已安装,我们可以使用以下命令检查其状态:

systemctl status jellyfin

如您所见,它在我的 Ubuntu 20.04 系统上运行。 (按 q 键收回终端控制权。)

如果 Jellyfin 媒体服务器未运行,您可以使用以下命令启动它:

sudo systemctl start jellyfin

Jellyfin 媒体服务器初始设置

基于 Web 的管理界面在 8096 端口可用。您可以通过以下 URL 访问 Jellyfin Web 界面。

https://127.0.0.1:8096/web

如果您在远程 Ubuntu 服务器上安装了 Jellyfin,则需要使用 Nginx 或 Apache 以便访问 Web UI,本教程稍后将对此进行说明。

第一步是选择您喜欢的语言。

安装 jellyfin 媒体服务器 ubuntu 20.04

在下一个屏幕上,创建一个用户帐户。

jellyfin-ubuntu-20.04-apt-repository

现在您可以添加库。 点击 Add Media Library 按钮。

jellyfin ubuntu 20.04 服务器

选择一个 内容类型 (电影、音乐、电视节目等)和显示名称。

然后点击 加号 (+) 按钮选择内容的文件夹。

jellyfin 媒体文件夹路径

请注意, jellyfin 用户需要对您的媒体目录具有读取和执行权限。 比如我的2T外置硬盘安装在 /media/linuxbabe/ ,由 root 拥有。 不在组内的用户 root 无法访问它,所以我运行以下命令给用户 jellyfin 读取和执行权限。 (我不建议用 chown 或者 chgrp 命令。 使用 setfacl 命令就足够了。)

sudo setfacl -m u:jellyfin:rx /media/linuxbabe/

您可能还需要为各个媒体目录分配权限,如下所示。

sudo setfacl -m u:jellyfin:rx /media/linuxbabe/directory-name

添加递归标志(-R), 这使 jellyfin 驱动器上每个文件和子目录的读取和执行权限。

sudo setfacl -R -m u:jellyfin:rx /media/linuxbabe/

如果您的外置硬盘仅用于存储媒体文件,那么您可以这样做,但如果您的外置硬盘上有敏感文件,请不要这样做。

添加完媒体文件夹后,您可以配置库设置。 选择您的语言、国家等。

jellyfin 库设置

点击 OkNext 按钮。 您以后可以随时添加更多库。 下一步允许您选择是否启用远程访问。 我不建议启用本机远程访问方法,因为它不提供 HTTPS 加密,因此取消选中两个复选框。 如果您需要远程访问,请阅读本文后面的如何设置反向代理。

jellyfin 远程访问

点击 NextFinish 按钮。 最后,登录您的 Jellyfin 帐户。

重做初始设置

如果您在初始设置中犯了错误,您可以重新开始。 首先,编辑 Jellyfin 配置文件。

sudo nano /etc/jellyfin/system.xml

改变

<IsStartupWizardCompleted>true</IsStartupWizardCompleted>

<IsStartupWizardCompleted>false</IsStartupWizardCompleted>

Save 和 close 文件。 然后重新启动 Jellyfin。

sudo systemctl restart jellyfin

现在访问 localhost:8096/web 您将再次看到设置向导。

在哪里下载电影和电视节目

  1. 使用像 Deluge 这样的洪流客户端。
  2. 了解如何从 Usenet 下载。

Usenet的优势

  1. 它为您提供更好的隐私,因为其他人无法看到您正在下载的内容。
  2. 超快的下载速度。
  3. Usenet 上的文件通常比 torrent 文件保存的时间长得多。 例如,Newsdemon 将文件存储 4430 天(超过 12 年),因此您可以以非常快的速度下载旧内容。

设置反向代理

因为它监听 127.0.0.1:8096, Jellyfin Web 界面仅可用于来自同一台计算机的连接。 为了能够从远程计算机访问 Jellyfin Web 界面,我们可以使用 Nginx 为 Jellyfin 设置反向代理或 Apache.

nginx

Nginx 是一种非常流行的 Web 服务器和反向代理。 如果您更喜欢使用 Nginx,请运行以下命令进行安装。

sudo apt install nginx

然后为 Jellyfin 创建一个服务器块文件。

sudo nano /etc/nginx/conf.d/jellyfin.conf

将以下内容添加到此文件中。 代替 jellyfin.example.com 用你自己的域名。 您还应该为此子域创建 DNS A 记录。 如果您没有真正的域名,我建议您去 NameCheap 购买一个。 价格低廉,他们终身免费提供whois隐私保护。

server {
      listen 80;
      listen [::]:80;
      server_name jellyfin.example.com;

      access_log /var/log/nginx/jellyfin.access;
      error_log /var/log/nginx/jellyfin.error;

      set $jellyfin 127.0.0.1;

      location / {
          proxy_pass https://127.0.0.1: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 https://$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 https://$127.0.0.1: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;
      }

        # 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";

}

Save 和 close 这个文件。 然后测试 Nginx 配置。

sudo nginx -t

如果测试成功,请重新加载 Nginx 以使更改生效。

sudo systemctl reload nginx

现在您可以通过以下方式访问 Jellyfin 媒体服务器 jellyfin.example.com.

Apache

若你宁可 Apache 通过 Nginx,然后安装 Apache Web 服务器使用以下命令。

sudo apt install apache2

使用 Apache 作为反向代理,我们需要启用 proxy 模块和头模块。

sudo a2enmod proxy proxy_http headers proxy_wstunnel

然后为 Jellyfin 创建一个虚拟主机文件。

sudo nano /etc/apache2/sites-available/jellyfin.conf

将以下配置放入文件中。 代替 jellyfin.example.com 使用您的实际域名。 不要忘记为此子域创建 DNS A 记录。 如果您没有真正的域名,我建议您去 NameCheap 购买一个。 价格低廉,他们终身免费提供whois隐私保护。

<VirtualHost *:80>
   ServerName jellyfin.example.com
   ErrorDocument 404 /404.html

   #HTTP proxy
   ProxyPass / https://localhost:8096/
   ProxyPassReverse / https://localhost:8096/

   #Websocket proxy
   SSLProxyEngine on
   <Location /:/websockets/notifications>
        ProxyPass wss://localhost:8096/:/websockets/notifications
        ProxyPassReverse wss://localhost:8096/:/websockets/notifications
   </Location>

   Header always unset X-Frame-Options
</VirtualHost>

Save 和 close 文件。 然后启用这个虚拟主机。

sudo a2ensite jellyfin.conf

重新开始 Apache

sudo systemctl restart apache2

现在您可以使用域名访问 Jellyfin 媒体服务器 jellyfin.example.com.

启用 HTTPS

为了在您从外部访问 Jellyfin 服务器时加密 HTTP 流量,我们可以通过安装 Let’s Encrypt 颁发的免费 TLS 证书来启用 HTTPS。 运行以下命令在 Ubuntu 20.04 上安装 Let’s Encrypt 客户端 (certbot)。

sudo apt install certbot

如果您使用 Nginx,那么您还需要安装 Certbot Nginx 插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令获取并安装 TLS 证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com

如果你使用 Apache,那么你需要安装Certbot Apache 插入。

sudo apt install python3-certbot-apache

接下来,运行以下命令获取并安装 TLS 证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com

在哪里:

  • --nginx: 使用nginx插件。
  • --apache: 使用 Apache 插入。
  • --agree-tos: 同意服务条款。
  • --redirect: 通过 301 重定向强制 HTTPS。
  • --hsts:将 Strict-Transport-Security 标头添加到每个 HTTP 响应。 强制浏览器始终对域使用 TLS。 防御 SSL/TLS 剥离。
  • --staple-ocsp:启用 OCSP 装订。 有效的 OCSP 响应被装订到服务器在 TLS 期间提供的证书。

现在应该获得并自动安装证书。

jellyfin 启用 https certbot letencrypt

您可以通过 HTTPS 访问 Jellyfin Web 界面: https://jellyfin.example.com.

jellyfin 网页界面

如何在 Ubuntu 20.04 上升级 Jellyfin

当新版本的 Jellyfin 媒体服务器出来时,您可以通过执行以下命令对其进行升级。

sudo apt update

sudo apt upgrade

然后重新启动 Jellyfin。

sudo systemctl restart jellyfin

故障排除提示

发送套接字消息时出错

如果您的 Ubuntu 服务器运行 WireGuard VPN,您可能会在 Jellyfin 日志中看到以下错误(sudo journalctl -eu jellyfin)。

[ERR] Error sending socket message from 10.0.0.102 to 239.255.255.250:1900
System.Net.Sockets.SocketException (0xFFFFFFFF): Bad value for ai_flags

此错误意味着消息无法从 WireGuard 接口发送到 239.255.255.250,这是 SSDP(简单服务发现协议)多播地址。 这是由于您的 WireGuard 接口不允许访问 IP 地址。

要解决此问题,请编辑您的 WireGuard 接口配置文件。

sudo nano /etc/wireguard/your-interface.conf

找出 AllowedIPs 范围。 我的是如下。

AllowedIPs = 10.0.0.0/8

如您所见,只允许 VPN 客户端连接到 10.0.0.0/8 网络。 现在添加 239.255.255.250 地址。

AllowedIPs = 10.0.0.0/8, 239.255.255.250

Save 和 close 文件。 重新启动 WireGuard。

sudo systemctl restart [email protected]your-interface

重新启动 Jellyfin。

sudo systemctl restart jellyfin

检查 Jellyfin 日志 (sudo journalctl -eu jellyfin) 再次。 上面的错误应该没有了。

无效签名

如果你在运行时看到以下错误 sudo apt update 命令,

The following signatures were invalid: EXPKEYSIG 49023CD01DE21A7B Jellyfin Team <[email protected]>

您需要使用以下命令重新导入 Jellyfin 公钥。

wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -

包起来

我希望本教程可以帮助您在 Ubuntu 20.04 上安装 Jellyfin 媒体服务器。 与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 保重?

[ad_2]

Related Posts