如何在 Debian 12 上安装 Jellyfin 媒体服务器

Jellyfin 是用于构建媒体服务器的免费软件。它允许您从多个设备或客户端收集、管理和流式传输媒体文件。Jellyfin 是一款免费的自托管应用程序,可以安装在您的服务器上,因此您可以在本地环境(例如在家中)创建自己的媒体服务器,然后允许多个客户端和设备访问您的所有媒体文件。

Jellyfin 是 Emby 和 Plex 等专有媒体文件服务器的替代品。它允许您从任何设备和任何地方管理媒体文件。

本指南将向您展示如何在 Debian 12 上安装 Jellyfin 媒体服务器。您将通过预构建的二进制包安装 Jellyfin,并使用 UFW(简单防火墙)、Letsencrypt 的 SSL/TLS 证书和 Apache2 反向代理来保护它。

先决条件

要开始此过程,请确保您具备以下条件:

  • 具有 2 或 4 GB 内存的 Debian 12 服务器。
  • 具有管理员权限的非 root 用户。
  • 域名指向服务器IP地址。

添加 Jellyfin 存储库

Jellyfin 媒体服务器可以通过多种方式安装,可以手动安装,也可以通过适用于大多数 Linux 发行版的预构建软件包安装。在第一步中,您将 Jellyfin 存储库添加到您的 Debian 服务器。

首先,运行以下 apt 命令将依赖项安装到 Debian 计算机。

sudo apt install apt-transport-https ca-certificates gnupg curl -y

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

安装依赖项后,执行以下命令添加 jellyfin 存储库的 GPG 密钥,该密钥将存储在/etc/apt/keyrings/jellyfin.gpg中。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg

现在执行以下命令将 jellyfin 存储库添加到您的 Debian 服务器。执行命令后,将创建 存储库文件/etc/apt/sources.list.d/jellyfin.sources 。

cat <<EOF | sudo tee /etc/apt/sources.list.d/jellyfin.sources
Types: deb
URIs: https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )
Suites: $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release )
Components: main
Architectures: $( dpkg --print-architecture )
Signed-By: /etc/apt/keyrings/jellyfin.gpg
EOF

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

最后,使用下面的apt update命令更新并刷新您的 Debian 软件包索引。

sudo apt update

您应该看到 jellyfin 存储库已添加到系统存储库列表中。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

安装和管理 Jellyfin

添加 jellyfin 存储库后,您就可以安装 jellyfin 媒体服务器了。完成以下步骤来安装 jellyfin 并了解如何通过 systemctl 管理 jellyfin 服务。

执行下面的 apt install 命令来安装 jellyfin 媒体服务器。输入 y 进行确认,然后按 ENTER 继续。

sudo apt install jellyfin

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
安装后,使用以下命令确保 Jellyfin 服务正在运行并启用。

sudo systemctl is-enabled jellyfin
sudo systemctl status jellyfin

如果正在运行,您应该看到输出active (running)。启用后,您应该获得的输出被启用。这意味着 Jellyfin 将在系统启动时自动启动。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

默认情况下,Jellyfin 在 localhost 中运行,端口为 8096。执行下面的 ss 命令来验证 Debian 系统上的端口列表。

ss -tulpn

您可以看到Jellyfin 媒体服务器使用 端口8096 。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
最后,运行以下 systemctl 命令来启动、停止或重新启动 Jellyfin 服务。

sudo systemctl start jellyfin
sudo systemctl stop jellyfin
sudo systemctl restart jellyfin

UFW 的安全设置

在以下部分中,您将通过 UFW 保护 Jellyfin 媒体服务器的安全。您将安装 UFW,然后打开 HTTP 和 HTTPS 协议以供客户端访问。您必须打开 HTTP 和 HTTPS 协议,因为您将使用 Apache2 作为反向代理。

首先,通过下面的 apt install 命令安装 UFW。

sudo apt install ufw -y

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
安装 UFW 后,运行下面的 ufw 命令来添加OpenSSH服务,然后启动并启用 UFW。

sudo ufw allow OpenSSH
sudo ufw enable

出现提示时键入 y,UFW 应正在运行并启用。

现在运行以下命令来添加WWW 完整配置文件并验证 UFW 状态。WWW Full配置文件将在 Debian 系统上打开 HTTP 和 HTTPS 协议。

sudo ufw allow "WWW Full"
sudo ufw status

输出应表明 UFW 处于活动状态,并且启用了 OpenSSH 和 WWW Full 配置文件。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

安装 Apache2 并将其配置为反向代理

在本指南中,您将在 Apache2 中运行 Jellyfin 媒体服务器作为反向代理。您还可以使用通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书来保护您的安装。

现在,完成以下任务:安装 Apache2 和 Certbot,生成 SSL/TLS 证书,并为 Jellyfin 媒体服务器创建 Apache2 虚拟主机配置。

安装 Apache2 和 Certbot

首先,运行以下命令来安装 Apache2 Web 服务器和 Certbot。输入 y 进行确认,然后按 ENTER。

sudo apt install apache2 certbot

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
安装完成后,apache2 服务应该正在运行并默认启用。使用下面的systemctl命令验证它。

sudo systemctl is-enabled apache2
sudo systemctl status apache2

输出enabled表示apache2服务将在启动时自动启动。输出active(正在运行)表示服务的状态正在运行。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
使用 Certbot 生成 SSL/TLS 证书

在生成 SSL/TLS 证书之前,请通过 a2enmod 命令启用一些 Apache2 模块并重新启动 Apache2 服务。

sudo a2enmod proxy proxy_http ssl proxy_wstunnel remoteip http2 headers
sudo systemctl restart apache2

现在运行以下命令创建一个新目录/var/www/html/jellyfin/public_html并将所有权更改为www-data用户和组。该目录将用作生成 SSL/TLS 证书的临时 Web 根目录。

sudo mkdir -p /var/www/html/jellyfin/public_html
sudo chown -R www-data:www-data /var/www/html/jellyfin/public_html

接下来,运行下面的 certbot 命令来生成新的 SSL/TLS 证书。确保在执行命令之前更改电子邮件地址和域名。

sudo certbot certonly --agree-tos --email user@email.com --no-eff-email --webroot -w /var/www/html/jellyfin/public_html -d media.hwdomain.io

完成此过程后,您的 SSL/TLS 证书将在/etc/letsencrypt/live/domain.com目录中可用。文件fullchain.pem是公钥,而privkey.pem是私钥。

将 Apache2 配置为反向代理

使用以下 nano 编辑器命令 创建新的虚拟主机配置/etc/apache2/sites-available/jellyfin.conf 。

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

插入下面的配置,并确保使用您的信息更改域名、SSL/TLS 证书的路径和服务器 IP 地址。这样,您就可以将 Apache2 设置为在端口8096上运行的 jellyfin 媒体服务器的反向代理。

<VirtualHost *:80>
    ServerName media.hwdomain.io

    # Comment to prevent HTTP to HTTPS redirect
    Redirect permanent / https://media.hwdomain.io/

    ErrorLog /var/log/apache2/media.hwdomain.io-error.log
    CustomLog /var/log/apache2/media.hwdomain.io-access.log combined
</VirtualHost>

# If you are not using an SSL certificate, replace the 'redirect'
# line above with all lines below starting with 'Proxy'
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName media.hwdomain.io
    # This folder exists just for certbot(You may have to create it, chown and chmod it to give apache permission to read it)
    DocumentRoot /var/www/html/jellyfin/public_html

    ProxyPreserveHost On

    # Letsencrypt's certbot will place a file in this folder when updating/verifying certs
    # This line will tell Apache to not to use the proxy for this folder.
    ProxyPass "/.well-known/" "!"

    # Tell Jellyfin to forward that requests came from TLS connections
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"

    ProxyPass "/socket" "ws://192.168.10.15:8096/socket"
    ProxyPassReverse "/socket" "ws://192.168.10.15:8096/socket"

    ProxyPass "/" "http://192.168.10.15:8096/"
    ProxyPassReverse "/" "http://192.168.10.15:8096/"

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/media.hwdomain.io/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/media.hwdomain.io/privkey.pem
    Protocols h2 http/1.1

    # Enable only strong encryption ciphers and prefer versions with Forward Secrecy
    SSLCipherSuite HIGH:RC4-SHA:AES128-SHA:!aNULL:!MD5
    SSLHonorCipherOrder on

    # Disable insecure SSL and TLS versions
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    ErrorLog /var/log/apache2/media.hwdomain.io-error.log
    CustomLog /var/log/apache2/media.hwdomain.io-access.log combined
</VirtualHost>
</IfModule>

完成后保存文件并退出编辑器。

接下来,运行下面的 a2ensite 命令来激活虚拟主机jellyfin.conf,然后验证您的 Apache2 语法。

sudo a2ensite jellyfin.conf 
sudo apachectl configtest

如果您有正确的 Apache2 语法,您应该得到一个输出Syntax OK。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维
现在使用以下命令重新启动 apache2 服务以应用更改。您的 jellyfin 安装应该在 Apache2 反向代理下运行并受到保护。

sudo systemctl restart apache2

使用网络浏览器并访问 Jellyfin 安装的域名,例如 https://media.hwdomain.io/。如果配置成功,您应该会看到 Jellyfin 安装向导,如下所示:

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

Jellyfin 媒体服务器安装

在接下来的步骤中,您将通过安装向导完成 Jellyfin 媒体服务器配置。

首先,选择 Jellyfin 安装的默认语言,然后单击“下一步”

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

现在,为 Jellyfin 安装创建一个新的管理员用户。输入您的用户名和密码,然后单击“下一步”

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

对于媒体库,您可以稍后配置它们。单击“下一步”继续。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

选择您的库的首选元数据语言,然后单击“下一步”

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

选中允许远程连接选项以启用对 jellyfin 媒体服务器的远程访问。另外,您可以通过选中该选项来启用端口映射。然后,单击“下一步”

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

如果配置成功,您应该会收到消息You're Done!。单击完成以完成 jellyfin 安装。

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

现在,您应该被重定向到 Jellyfin 登录页面。输入 Jellyfin 的管理员用户和密码,然后单击“登录”

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

如果一切顺利,您应该会看到 Jellyfin 管理仪表板,如下所示:

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

最后,单击“管理”部分中的“仪表板”菜单。您应该看到有关 Jellyfin 媒体服务器安装的详细信息:

如何在 Debian 12 上安装 Jellyfin 媒体服务器-每日运维

结论

作为本指南的总结,您已经使用 Apache2 反向代理和 Letsencrypt 的 SSL/TLS 在 Debian 12 上完成了 Jellyfin 媒体服务器的安装。您还使用 UFW 保护了 jellyfin 服务器的安全,并完成了 Jellyfin 媒体服务器的基本配置。您可以创建新的媒体库并将媒体文件上传到 Jellyfin。